diff --git a/BUILD.gn b/BUILD.gn
index 291e3be..3bb7c25 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -1325,6 +1325,7 @@
       "//build/gn_helpers.py",
       "//build/config/gclient_args.gni",
       "//components/crash/content/tools/generate_breakpad_symbols.py",
+      "//testing/unexpected_passes_common/",
       "//third_party/blink/renderer/bindings/scripts/",
       "//third_party/blink/renderer/build/scripts/",
       "//third_party/blink/tools/",
diff --git a/DEPS b/DEPS
index 85a95468..1acd0455 100644
--- a/DEPS
+++ b/DEPS
@@ -232,7 +232,7 @@
   # 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': '016798114a416a357e12b76d00ce57fb45637090',
+  'v8_revision': '355f217d9ab248e31bb27796d086a2c8b4b43446',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling swarming_client
   # and whatever else without interference from each other.
@@ -244,7 +244,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling SwiftShader
   # and whatever else without interference from each other.
-  'swiftshader_revision': 'e4b7794ddbee1c3fa9a8199779ab6e605faa48c3',
+  'swiftshader_revision': 'c3dd927e51b730b0ada151218d199c332317ca33',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling PDFium
   # and whatever else without interference from each other.
@@ -307,7 +307,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': '5ea47df09c1201ff55c15c665a870f26add07553',
+  'devtools_frontend_revision': '360520d5d699166b7b2411c3215cddf11979c0d9',
   # 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.
@@ -347,11 +347,11 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
-  'dawn_revision': '1ee777fcd578efeef72cdc06678975eba4e33bd9',
+  'dawn_revision': '213ac89edfe717371f7ac55db7d8246a7a22f431',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
-  'quiche_revision': '5cadb6aa589f8a80fa90a17cf3b7a33cbc5e8aa7',
+  'quiche_revision': 'ccb7c6bff6f2699bbe147645ea79311ec8cec912',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling ios_webkit
   # and whatever else without interference from each other.
@@ -610,7 +610,7 @@
   },
 
   'src/ios/third_party/material_components_ios/src': {
-      'url': Var('chromium_git') + '/external/github.com/material-components/material-components-ios.git' + '@' + '6ad84c1a6a29525ab34ce10b19d3ac7a04a399ad',
+      'url': Var('chromium_git') + '/external/github.com/material-components/material-components-ios.git' + '@' + 'ece3a925823b3bcf934f325495e6bf8ac3d54f47',
       'condition': 'checkout_ios',
   },
 
@@ -691,7 +691,7 @@
       'packages': [
         {
           'package': 'chromium/rts/model/mac-amd64',
-          'version': 'Nwz2oX6Motz8k9dxr1WaxdMHTrppvhla2kAME1Yx0XgC',
+          'version': '-xRlyurTPdf6aaiwnpegZTEqjJRa9r0RdK2mptMq9JEC',
         },
       ],
       'dep_type': 'cipd',
@@ -702,7 +702,7 @@
       'packages': [
         {
           'package': 'chromium/rts/model/windows-amd64',
-          'version': 'ZgESCkgvPar2H2l1K1Yxws-O5V1L_xPG78UvzPv2X_MC',
+          'version': 'snl7UQlAc88dc0PzdtjPl_JwcK-pilqfxQIh0W_lsKMC',
         },
       ],
       'dep_type': 'cipd',
@@ -767,7 +767,7 @@
     'packages': [
       {
           'package': 'chromium/third_party/androidx',
-          'version': '6YnvOFZqQbSfmq9Bknb9CSKuND84c-TqnEATwNlvhqwC',
+          'version': 'iS9uLbt1ks96lnB9FgzCbsDit0AaQS7PqWyWdVJ3mggC',
       },
     ],
     'condition': 'checkout_android',
@@ -1003,7 +1003,7 @@
   },
 
   'src/third_party/depot_tools':
-    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '0a4dd4181ae2d3f2b77bb9f4ea4451d9209c8159',
+    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + 'cc487710bb02ca3fc078e0495a12e6445bf80131',
 
   'src/third_party/devtools-frontend/src':
     Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'),
@@ -1389,7 +1389,7 @@
   },
 
   'src/third_party/perfetto':
-    Var('android_git') + '/platform/external/perfetto.git' + '@' + '00e6f338d036b5d1ad547b979b612ec008fe3165',
+    Var('android_git') + '/platform/external/perfetto.git' + '@' + '7d0822e5b1903542d5712673481fc0747ca34bb7',
 
   'src/third_party/perl': {
       'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3',
@@ -1621,7 +1621,7 @@
     Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + '26da66e2987afd8fb426c8b83f7b96d500c3fb01',
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + '363b1745670c15ee85b952cb63ef94b36deef133',
+    Var('webrtc_git') + '/src.git' + '@' + 'ba1beba7cdec6708a34a4e1e36cc4f77aead36ba',
 
   'src/third_party/libgifcodec':
      Var('skia_git') + '/libgifcodec' + '@'+  Var('libgifcodec_revision'),
@@ -1682,7 +1682,7 @@
     Var('chromium_git') + '/v8/v8.git' + '@' +  Var('v8_revision'),
 
   'src-internal': {
-    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@b6a1efa8ab3e84318cb837af17b4b7187afb21b5',
+    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@c7a479b8c6e1230616c024e49689411b920fa285',
     'condition': 'checkout_src_internal',
   },
 
diff --git a/ash/BUILD.gn b/ash/BUILD.gn
index 8ebaac4a0..44709ee 100644
--- a/ash/BUILD.gn
+++ b/ash/BUILD.gn
@@ -1971,9 +1971,9 @@
     "//ui/base/ime/chromeos",
     "//ui/base/ime/init",
     "//ui/chromeos",
-    "//ui/chromeos/colors:cros_colors_views",
     "//ui/chromeos/events",
     "//ui/chromeos/resources",
+    "//ui/chromeos/styles:cros_styles_views",
     "//ui/compositor",
     "//ui/compositor_extra",
     "//ui/display",
@@ -2589,8 +2589,8 @@
     "//ui/base/ime",
     "//ui/base/ime/chromeos",
     "//ui/chromeos",
-    "//ui/chromeos/colors:cros_colors_views",
     "//ui/chromeos/events",
+    "//ui/chromeos/styles:cros_styles_views",
     "//ui/compositor",
     "//ui/compositor:test_support",
     "//ui/compositor_extra:compositor_extra",
diff --git a/ash/app_list/views/app_list_view.cc b/ash/app_list/views/app_list_view.cc
index 4c5db33..58b7c50 100644
--- a/ash/app_list/views/app_list_view.cc
+++ b/ash/app_list/views/app_list_view.cc
@@ -644,7 +644,7 @@
   a11y_announcer_->Shutdown();
 
   // Remove child views first to ensure no remaining dependencies on delegate_.
-  RemoveAllChildViews(true);
+  RemoveAllChildViews();
 }
 
 // static
diff --git a/ash/app_list/views/apps_grid_view.cc b/ash/app_list/views/apps_grid_view.cc
index 78f9b4fe..c20930a 100644
--- a/ash/app_list/views/apps_grid_view.cc
+++ b/ash/app_list/views/apps_grid_view.cc
@@ -323,7 +323,7 @@
   bounds_animator_->Cancel();
 
   view_model_.Clear();
-  RemoveAllChildViews(true);
+  RemoveAllChildViews();
 }
 
 void AppsGridView::SetLayout(int cols, int rows_per_page) {
diff --git a/ash/app_list/views/page_switcher.cc b/ash/app_list/views/page_switcher.cc
index a9d61a6..a5da5ba 100644
--- a/ash/app_list/views/page_switcher.cc
+++ b/ash/app_list/views/page_switcher.cc
@@ -281,7 +281,7 @@
   if (!model_)
     return;
 
-  buttons_->RemoveAllChildViews(true);
+  buttons_->RemoveAllChildViews();
   for (int i = 0; i < model_->total_pages(); ++i) {
     PageSwitcherButton* button =
         buttons_->AddChildView(std::make_unique<PageSwitcherButton>(
diff --git a/ash/app_list/views/search_result_actions_view.cc b/ash/app_list/views/search_result_actions_view.cc
index c4e4361..86a1178 100644
--- a/ash/app_list/views/search_result_actions_view.cc
+++ b/ash/app_list/views/search_result_actions_view.cc
@@ -195,7 +195,7 @@
   if (selected_action_.has_value())
     selected_action_.reset();
   subscriptions_.clear();
-  RemoveAllChildViews(true);
+  RemoveAllChildViews();
 
   for (size_t i = 0; i < actions.size(); ++i)
     CreateImageButton(actions[i], i);
diff --git a/ash/assistant/ui/BUILD.gn b/ash/assistant/ui/BUILD.gn
index a85961d..2e99422 100644
--- a/ash/assistant/ui/BUILD.gn
+++ b/ash/assistant/ui/BUILD.gn
@@ -103,7 +103,7 @@
     "//chromeos/services/libassistant/public/cpp:structs",
     "//chromeos/ui/vector_icons",
     "//ui/aura",
-    "//ui/chromeos/colors:cros_colors_views",
+    "//ui/chromeos/styles:cros_styles_views",
     "//ui/compositor",
     "//ui/gfx",
     "//ui/views",
diff --git a/ash/assistant/ui/colors/BUILD.gn b/ash/assistant/ui/colors/BUILD.gn
index 56985462..68df33c 100644
--- a/ash/assistant/ui/colors/BUILD.gn
+++ b/ash/assistant/ui/colors/BUILD.gn
@@ -6,7 +6,7 @@
 
 style_variable_generator("assistant_colors") {
   sources = [
-    "//ui/chromeos/colors/cros_palette.json5",
+    "//ui/chromeos/styles/cros_palette.json5",
     "assistant_colors.json5",
   ]
 }
diff --git a/ash/assistant/ui/main_stage/animated_container_view.cc b/ash/assistant/ui/main_stage/animated_container_view.cc
index 11298d4d..0201e86 100644
--- a/ash/assistant/ui/main_stage/animated_container_view.cc
+++ b/ash/assistant/ui/main_stage/animated_container_view.cc
@@ -133,7 +133,7 @@
   // We can prevent over-propagation of the PreferredSizeChanged event by
   // stopping propagation during batched view hierarchy add/remove operations.
   ScopedDisablePreferredSizeChanged disable_preferred_size_changed(this);
-  content_view()->RemoveAllChildViews(/*delete_children=*/true);
+  content_view()->RemoveAllChildViews();
 
   // We inform our derived class all views have been removed.
   OnAllViewsRemoved();
diff --git a/ash/assistant/ui/main_stage/assistant_query_view.cc b/ash/assistant/ui/main_stage/assistant_query_view.cc
index f048ab5..135d700 100644
--- a/ash/assistant/ui/main_stage/assistant_query_view.cc
+++ b/ash/assistant/ui/main_stage/assistant_query_view.cc
@@ -18,7 +18,7 @@
 #include "net/base/escape.h"
 #include "third_party/skia/include/core/SkColor.h"
 #include "ui/accessibility/ax_enums.mojom.h"
-#include "ui/chromeos/colors/cros_colors.h"
+#include "ui/chromeos/styles/cros_styles.h"
 #include "ui/views/accessibility/view_accessibility.h"
 #include "ui/views/background.h"
 #include "ui/views/layout/flex_layout.h"
@@ -79,20 +79,20 @@
 
   // TODO(crbug.com/1176919): We cannot use ScopedLightModeAsDefault from
   // ash/assistant/ui as it causes a circular dependency. Find a better way to
-  // resolve cros_colors color.
+  // resolve cros_styles color.
   SkColor text_color_primary =
       features::IsDarkLightModeEnabled()
           ? ColorProvider::Get()->GetContentLayerColor(
                 ColorProvider::ContentLayerType::kTextColorPrimary)
-          : cros_colors::ResolveColor(cros_colors::ColorName::kTextColorPrimary,
+          : cros_styles::ResolveColor(cros_styles::ColorName::kTextColorPrimary,
                                       /*is_dark_mode=*/false,
                                       /*use_debug_colors=*/false);
   SkColor text_color_secondary =
       features::IsDarkLightModeEnabled()
           ? ColorProvider::Get()->GetContentLayerColor(
                 ColorProvider::ContentLayerType::kTextColorSecondary)
-          : cros_colors::ResolveColor(
-                cros_colors::ColorName::kTextColorSecondary,
+          : cros_styles::ResolveColor(
+                cros_styles::ColorName::kTextColorSecondary,
                 /*is_dark_mode=*/false,
                 /*use_debug_colors=*/false);
 
diff --git a/ash/assistant/ui/main_stage/assistant_query_view_unittest.cc b/ash/assistant/ui/main_stage/assistant_query_view_unittest.cc
index 040b26e9..c5903a5 100644
--- a/ash/assistant/ui/main_stage/assistant_query_view_unittest.cc
+++ b/ash/assistant/ui/main_stage/assistant_query_view_unittest.cc
@@ -16,7 +16,7 @@
 #include "base/feature_list.h"
 #include "base/test/scoped_feature_list.h"
 #include "third_party/skia/include/core/SkColor.h"
-#include "ui/chromeos/colors/cros_colors.h"
+#include "ui/chromeos/styles/cros_styles.h"
 #include "ui/views/background.h"
 #include "ui/views/controls/label.h"
 #include "ui/views/view.h"
@@ -49,7 +49,7 @@
                 assistant_colors::ColorName::kBgAssistantPlate,
                 /*is_dark_mode=*/false, /*use_debug_colors=*/false));
   EXPECT_EQ(high_confidence_label->GetEnabledColor(),
-            cros_colors::ResolveColor(cros_colors::ColorName::kTextColorPrimary,
+            cros_styles::ResolveColor(cros_styles::ColorName::kTextColorPrimary,
                                       /*is_dark_mode=*/false,
                                       /*use_debug_colors=*/false));
   EXPECT_EQ(low_confidence_label->GetBackgroundColor(),
@@ -58,7 +58,7 @@
                 /*is_dark_mode=*/false, /*use_debug_colors=*/false));
   EXPECT_EQ(
       low_confidence_label->GetEnabledColor(),
-      cros_colors::ResolveColor(cros_colors::ColorName::kTextColorSecondary,
+      cros_styles::ResolveColor(cros_styles::ColorName::kTextColorSecondary,
                                 /*is_dark_mode=*/false,
                                 /*use_debug_colors=*/false));
 
@@ -74,7 +74,7 @@
                 assistant_colors::ColorName::kBgAssistantPlate,
                 /*is_dark_mode=*/true, /*use_debug_colors=*/false));
   EXPECT_EQ(high_confidence_label->GetEnabledColor(),
-            cros_colors::ResolveColor(cros_colors::ColorName::kTextColorPrimary,
+            cros_styles::ResolveColor(cros_styles::ColorName::kTextColorPrimary,
                                       /*is_dark_mode=*/true,
                                       /*use_debug_colors=*/false));
   EXPECT_EQ(low_confidence_label->GetBackgroundColor(),
@@ -83,7 +83,7 @@
                 /*is_dark_mode=*/true, /*use_debug_colors=*/false));
   EXPECT_EQ(
       low_confidence_label->GetEnabledColor(),
-      cros_colors::ResolveColor(cros_colors::ColorName::kTextColorSecondary,
+      cros_styles::ResolveColor(cros_styles::ColorName::kTextColorSecondary,
                                 /*is_dark_mode=*/true,
                                 /*use_debug_colors=*/false));
 }
diff --git a/ash/assistant/ui/main_stage/assistant_zero_state_view.cc b/ash/assistant/ui/main_stage/assistant_zero_state_view.cc
index 48dcadf6..5bb160d7 100644
--- a/ash/assistant/ui/main_stage/assistant_zero_state_view.cc
+++ b/ash/assistant/ui/main_stage/assistant_zero_state_view.cc
@@ -21,7 +21,7 @@
 #include "chromeos/services/assistant/public/cpp/features.h"
 #include "third_party/skia/include/core/SkColor.h"
 #include "ui/base/l10n/l10n_util.h"
-#include "ui/chromeos/colors/cros_colors.h"
+#include "ui/chromeos/styles/cros_styles.h"
 #include "ui/views/background.h"
 #include "ui/views/border.h"
 #include "ui/views/controls/label.h"
@@ -74,12 +74,12 @@
 
   // TODO(crbug.com/1176919): We cannot use ScopedLightModeAsDefault from
   // ash/assistant/ui as it causes a circular dependency. Find a better way to
-  // resolve cros_colors color.
+  // resolve cros_styles color.
   SkColor text_color_primary =
       features::IsDarkLightModeEnabled()
           ? ColorProvider::Get()->GetContentLayerColor(
                 ColorProvider::ContentLayerType::kTextColorPrimary)
-          : cros_colors::ResolveColor(cros_colors::ColorName::kTextColorPrimary,
+          : cros_styles::ResolveColor(cros_styles::ColorName::kTextColorPrimary,
                                       /*is_dark_mode=*/false,
                                       /*use_debug_colors=*/false);
   greeting_label_->SetEnabledColor(text_color_primary);
diff --git a/ash/assistant/ui/main_stage/assistant_zero_state_view_unittest.cc b/ash/assistant/ui/main_stage/assistant_zero_state_view_unittest.cc
index 02a0373..24a7c31 100644
--- a/ash/assistant/ui/main_stage/assistant_zero_state_view_unittest.cc
+++ b/ash/assistant/ui/main_stage/assistant_zero_state_view_unittest.cc
@@ -15,7 +15,7 @@
 #include "ash/style/ash_color_provider.h"
 #include "base/test/scoped_feature_list.h"
 #include "third_party/skia/include/core/SkColor.h"
-#include "ui/chromeos/colors/cros_colors.h"
+#include "ui/chromeos/styles/cros_styles.h"
 #include "ui/views/controls/label.h"
 
 namespace ash {
@@ -50,7 +50,7 @@
                 assistant_colors::ColorName::kBgAssistantPlate,
                 /*is_dark_mode=*/false, /*use_debug_colors=*/false));
   EXPECT_EQ(greeting_label->GetEnabledColor(),
-            cros_colors::ResolveColor(cros_colors::ColorName::kTextColorPrimary,
+            cros_styles::ResolveColor(cros_styles::ColorName::kTextColorPrimary,
                                       /*is_dark_mode=*/false,
                                       /*use_debug_colors=*/false));
 
@@ -62,7 +62,7 @@
                 assistant_colors::ColorName::kBgAssistantPlate,
                 /*is_dark_mode=*/true, /*use_debug_colors=*/false));
   EXPECT_EQ(greeting_label->GetEnabledColor(),
-            cros_colors::ResolveColor(cros_colors::ColorName::kTextColorPrimary,
+            cros_styles::ResolveColor(cros_styles::ColorName::kTextColorPrimary,
                                       /*is_dark_mode=*/true,
                                       /*use_debug_colors=*/false));
 }
diff --git a/ash/login/ui/lock_contents_view.cc b/ash/login/ui/lock_contents_view.cc
index 20b27a0..c1a1ef6ea 100644
--- a/ash/login/ui/lock_contents_view.cc
+++ b/ash/login/ui/lock_contents_view.cc
@@ -900,7 +900,7 @@
   // so there is not stale-pointer usage. See crbug.com/884402.
   // TODO(crbug.com/1222096): We should figure out a better way of handling
   // user info changes such as avatar changes. They should not cause view re-layouting.
-  main_view_->RemoveAllChildViews(true /*delete_children*/);
+  main_view_->RemoveAllChildViews();
 
   // Build user state list. Preserve previous state if the user already exists.
   std::vector<UserState> new_users;
diff --git a/ash/quick_answers/ui/quick_answers_view.cc b/ash/quick_answers/ui/quick_answers_view.cc
index df2ca48..b1799c7 100644
--- a/ash/quick_answers/ui/quick_answers_view.cc
+++ b/ash/quick_answers/ui/quick_answers_view.cc
@@ -551,7 +551,7 @@
 }
 
 void QuickAnswersView::ResetContentView() {
-  content_view_->RemoveAllChildViews(true);
+  content_view_->RemoveAllChildViews();
   first_answer_label_ = nullptr;
 }
 
diff --git a/ash/quick_pair/pairing/fast_pair/fast_pair_gatt_service_client_impl.cc b/ash/quick_pair/pairing/fast_pair/fast_pair_gatt_service_client_impl.cc
index 0f35591..8dd31af 100644
--- a/ash/quick_pair/pairing/fast_pair/fast_pair_gatt_service_client_impl.cc
+++ b/ash/quick_pair/pairing/fast_pair/fast_pair_gatt_service_client_impl.cc
@@ -29,6 +29,31 @@
 
 constexpr base::TimeDelta kConnectingTimeout = base::TimeDelta::FromSeconds(5);
 
+constexpr const char* ToString(
+    device::BluetoothGattService::GattErrorCode error_code) {
+  switch (error_code) {
+    case device::BluetoothGattService::GATT_ERROR_UNKNOWN:
+      return "GATT_ERROR_UNKNOWN";
+    case device::BluetoothGattService::GATT_ERROR_FAILED:
+      return "GATT_ERROR_FAILED";
+    case device::BluetoothGattService::GATT_ERROR_IN_PROGRESS:
+      return "GATT_ERROR_IN_PROGRESS";
+    case device::BluetoothGattService::GATT_ERROR_INVALID_LENGTH:
+      return "GATT_ERROR_INVALID_LENGTH";
+    case device::BluetoothGattService::GATT_ERROR_NOT_PERMITTED:
+      return "GATT_ERROR_NOT_PERMITTED";
+    case device::BluetoothGattService::GATT_ERROR_NOT_AUTHORIZED:
+      return "GATT_ERROR_NOT_AUTHORIZED";
+    case device::BluetoothGattService::GATT_ERROR_NOT_PAIRED:
+      return "GATT_ERROR_NOT_PAIRED";
+    case device::BluetoothGattService::GATT_ERROR_NOT_SUPPORTED:
+      return "GATT_ERROR_NOT_SUPPORTED";
+    default:
+      NOTREACHED();
+      return "";
+  }
+}
+
 }  // namespace
 
 namespace ash {
@@ -235,7 +260,8 @@
 void FastPairGattServiceClientImpl::OnGattError(
     PairFailure failure,
     device::BluetoothGattService::GattErrorCode error) {
-  QP_LOG(VERBOSE) << "StartNotifySession failed due to GATT error.";
+  QP_LOG(VERBOSE) << "StartNotifySession failed due to GATT error: "
+                  << ToString(error);
   NotifyError(failure);
 }
 
diff --git a/ash/shortcut_viewer/views/keyboard_shortcut_view.cc b/ash/shortcut_viewer/views/keyboard_shortcut_view.cc
index 3f050ef..214454a 100644
--- a/ash/shortcut_viewer/views/keyboard_shortcut_view.cc
+++ b/ash/shortcut_viewer/views/keyboard_shortcut_view.cc
@@ -512,7 +512,7 @@
   if (!should_show_search_results) {
     // Remove all child views, including horizontal separator lines, to prepare
     // for showing search results next time.
-    search_results_container_->RemoveAllChildViews(true);
+    search_results_container_->RemoveAllChildViews();
     if (!categories_tabbed_pane_->GetVisible()) {
       // Repopulate |categories_tabbed_pane_| child views, which were removed
       // when they were added to |search_results_container_|.
@@ -528,7 +528,7 @@
 
 void KeyboardShortcutView::ShowSearchResults(
     const std::u16string& search_query) {
-  search_results_container_->RemoveAllChildViews(true);
+  search_results_container_->RemoveAllChildViews();
   auto* search_container_content_view = search_no_result_view_.get();
   auto found_items_list_view = std::make_unique<KeyboardShortcutItemListView>();
   base::i18n::FixedPatternStringSearchIgnoringCaseAndAccents finder(
diff --git a/ash/style/ash_color_provider.cc b/ash/style/ash_color_provider.cc
index 21c8da32..377d263 100644
--- a/ash/style/ash_color_provider.cc
+++ b/ash/style/ash_color_provider.cc
@@ -21,7 +21,7 @@
 #include "components/prefs/pref_change_registrar.h"
 #include "components/prefs/pref_registry_simple.h"
 #include "components/prefs/pref_service.h"
-#include "ui/chromeos/colors/cros_colors.h"
+#include "ui/chromeos/styles/cros_styles.h"
 #include "ui/gfx/color_analysis.h"
 #include "ui/gfx/color_palette.h"
 #include "ui/gfx/color_utils.h"
@@ -34,7 +34,7 @@
 
 namespace ash {
 
-using ColorName = cros_colors::ColorName;
+using ColorName = cros_styles::ColorName;
 
 namespace {
 
@@ -68,8 +68,8 @@
 constexpr int kPillButtonImageLabelSpacingDp = 8;
 
 // Get the corresponding ColorName for |type|. ColorName is an enum in
-// cros_colors.h file that is generated from cros_colors.json5, which includes
-// the color IDs and colors that will be used by ChromeOS WebUI.
+// cros_styles.h file that is generated from cros_colors.json5, which
+// includes the color IDs and colors that will be used by ChromeOS WebUI.
 ColorName TypeToColorName(AshColorProvider::ContentLayerType type) {
   switch (type) {
     case AshColorProvider::ContentLayerType::kTextColorPrimary:
@@ -96,11 +96,11 @@
   }
 }
 
-// Get the color from cros_colors.h header file that is generated from
+// Get the color from cros_styles.h header file that is generated from
 // cros_colors.json5. Colors there will also be used by ChromeOS WebUI.
 SkColor ResolveColor(AshColorProvider::ContentLayerType type,
                      bool use_dark_color) {
-  return cros_colors::ResolveColor(
+  return cros_styles::ResolveColor(
       TypeToColorName(type), use_dark_color,
       base::FeatureList::IsEnabled(
           ash::features::kSemanticColorsDebugOverride));
diff --git a/ash/system/accessibility/select_to_speak/select_to_speak_speed_view.cc b/ash/system/accessibility/select_to_speak/select_to_speak_speed_view.cc
index d3fcf02c..5884f04 100644
--- a/ash/system/accessibility/select_to_speak/select_to_speak_speed_view.cc
+++ b/ash/system/accessibility/select_to_speak/select_to_speak_speed_view.cc
@@ -37,7 +37,7 @@
 }
 
 void SelectToSpeakSpeedView::SetInitialSpeechRate(double initial_speech_rate) {
-  RemoveAllChildViews(true);
+  RemoveAllChildViews();
 
   for (size_t i = 0; i < base::size(kSelectToSpeakSpeechRates); i++) {
     double option_speed = kSelectToSpeakSpeechRates[i];
diff --git a/ash/system/accessibility/switch_access/switch_access_menu_view.cc b/ash/system/accessibility/switch_access/switch_access_menu_view.cc
index 191720b..0bc0fd0 100644
--- a/ash/system/accessibility/switch_access/switch_access_menu_view.cc
+++ b/ash/system/accessibility/switch_access/switch_access_menu_view.cc
@@ -115,7 +115,7 @@
 SwitchAccessMenuView::~SwitchAccessMenuView() = default;
 
 void SwitchAccessMenuView::SetActions(std::vector<std::string> actions) {
-  RemoveAllChildViews(/*delete_children=*/true);
+  RemoveAllChildViews();
 
   views::GridLayout* layout =
       SetLayoutManager(std::make_unique<views::GridLayout>());
diff --git a/ash/system/audio/audio_detailed_view.cc b/ash/system/audio/audio_detailed_view.cc
index f8528d1..90d0b07 100644
--- a/ash/system/audio/audio_detailed_view.cc
+++ b/ash/system/audio/audio_detailed_view.cc
@@ -152,7 +152,7 @@
 }
 
 void AudioDetailedView::UpdateScrollableList() {
-  scroll_content()->RemoveAllChildViews(true);
+  scroll_content()->RemoveAllChildViews();
   device_map_.clear();
 
   // Add audio output devices.
diff --git a/ash/system/bluetooth/bluetooth_detailed_view_legacy.cc b/ash/system/bluetooth/bluetooth_detailed_view_legacy.cc
index 1041fd8..1a29852 100644
--- a/ash/system/bluetooth/bluetooth_detailed_view_legacy.cc
+++ b/ash/system/bluetooth/bluetooth_detailed_view_legacy.cc
@@ -157,7 +157,7 @@
   paired_devices_heading_ = nullptr;
   unpaired_devices_heading_ = nullptr;
   bluetooth_discovering_label_ = nullptr;
-  scroll_content()->RemoveAllChildViews(true);
+  scroll_content()->RemoveAllChildViews();
 
   DCHECK(scroller());
   if (!disabled_panel_) {
diff --git a/ash/system/cast/tray_cast.cc b/ash/system/cast/tray_cast.cc
index d18f1b0..ff03133 100644
--- a/ash/system/cast/tray_cast.cc
+++ b/ash/system/cast/tray_cast.cc
@@ -110,7 +110,7 @@
 void CastDetailedView::UpdateReceiverListFromCachedData() {
   // Remove all of the existing views.
   view_to_sink_map_.clear();
-  scroll_content()->RemoveAllChildViews(true);
+  scroll_content()->RemoveAllChildViews();
 
   // Add a view for each receiver.
   for (auto& it : sinks_and_routes_) {
diff --git a/ash/system/holding_space/holding_space_item_views_section.cc b/ash/system/holding_space/holding_space_item_views_section.cc
index 29f5ea2..996caf4 100644
--- a/ash/system/holding_space/holding_space_item_views_section.cc
+++ b/ash/system/holding_space/holding_space_item_views_section.cc
@@ -308,7 +308,7 @@
   // not visible to the user.
   DCHECK(!IsDrawn() || !container_->IsDrawn() ||
          container_->layer()->opacity() == 0.f);
-  container_->RemoveAllChildViews(/*delete_children=*/true);
+  container_->RemoveAllChildViews();
   views_by_item_id_.clear();
 }
 
diff --git a/ash/system/message_center/stacked_notification_bar.cc b/ash/system/message_center/stacked_notification_bar.cc
index a9f9b8c..9538301 100644
--- a/ash/system/message_center/stacked_notification_bar.cc
+++ b/ash/system/message_center/stacked_notification_bar.cc
@@ -522,7 +522,7 @@
 void StackedNotificationBar::OnNotificationAdded(const std::string& id) {
   // Reset the stacked icons bar if a notification is added since we don't
   // know the position where it may have been added.
-  notification_icons_container_->RemoveAllChildViews(true);
+  notification_icons_container_->RemoveAllChildViews();
   stacked_notification_count_ = 0;
   UpdateStackedNotifications(message_center_view_->GetStackedNotifications());
 }
diff --git a/ash/system/network/vpn_list_view.cc b/ash/system/network/vpn_list_view.cc
index 89757362..0b1e7f2 100644
--- a/ash/system/network/vpn_list_view.cc
+++ b/ash/system/network/vpn_list_view.cc
@@ -359,7 +359,7 @@
   }
 
   // Clear the list.
-  scroll_content()->RemoveAllChildViews(true);
+  scroll_content()->RemoveAllChildViews();
   provider_view_map_.clear();
   network_view_guid_map_.clear();
   list_empty_ = true;
diff --git a/ash/system/phonehub/phone_hub_recent_apps_view.cc b/ash/system/phonehub/phone_hub_recent_apps_view.cc
index ef4ad68..2b0d600 100644
--- a/ash/system/phonehub/phone_hub_recent_apps_view.cc
+++ b/ash/system/phonehub/phone_hub_recent_apps_view.cc
@@ -141,7 +141,7 @@
 }
 
 void PhoneHubRecentAppsView::RecentAppButtonsView::Reset() {
-  RemoveAllChildViews(true /* delete_children */);
+  RemoveAllChildViews();
 }
 
 void PhoneHubRecentAppsView::Update() {
diff --git a/ash/system/phonehub/task_continuation_view.cc b/ash/system/phonehub/task_continuation_view.cc
index 6cd2b96..f0d1676 100644
--- a/ash/system/phonehub/task_continuation_view.cc
+++ b/ash/system/phonehub/task_continuation_view.cc
@@ -141,7 +141,7 @@
 
 void TaskContinuationView::TaskChipsView::Reset() {
   task_chips_.Clear();
-  RemoveAllChildViews(true /* delete_children */);
+  RemoveAllChildViews();
 }
 
 gfx::Point TaskContinuationView::TaskChipsView::GetButtonPosition(int index) {
diff --git a/ash/system/status_area_widget.cc b/ash/system/status_area_widget.cc
index 45ae610..9897425b 100644
--- a/ash/system/status_area_widget.cc
+++ b/ash/system/status_area_widget.cc
@@ -330,7 +330,7 @@
 void StatusAreaWidget::HandleLocaleChange() {
   // Here we force the layer's bounds to be updated for text direction (if
   // needed).
-  status_area_widget_delegate_->RemoveAllChildViews(/*delete_children=*/false);
+  status_area_widget_delegate_->RemoveAllChildViewsWithoutDeleting();
 
   // The layout manager will be updated when shelf layout gets updated, which is
   // done by the shelf layout manager after `HandleLocaleChange()` gets called.
diff --git a/ash/system/status_area_widget_delegate.cc b/ash/system/status_area_widget_delegate.cc
index e8dc713..9cbf69b 100644
--- a/ash/system/status_area_widget_delegate.cc
+++ b/ash/system/status_area_widget_delegate.cc
@@ -117,7 +117,7 @@
   // TODO(pbos): Investigate if this is necessary. This is a bit defensive but
   // it's done to make sure that StatusAreaWidget isn't accessed by the View
   // hierarchy during its destruction.
-  RemoveAllChildViews(/*delete=*/true);
+  RemoveAllChildViews();
   // StatusAreaWidgetDelegate uses a GridLayout which unfortunately doesn't
   // handle child add/removal. Remove the LayoutManager early to prevent UAFs
   // during Widget destruction.
diff --git a/ash/system/tray/hover_highlight_view.cc b/ash/system/tray/hover_highlight_view.cc
index e748974..ed1d550 100644
--- a/ash/system/tray/hover_highlight_view.cc
+++ b/ash/system/tray/hover_highlight_view.cc
@@ -164,7 +164,7 @@
 }
 
 void HoverHighlightView::Reset() {
-  RemoveAllChildViews(true);
+  RemoveAllChildViews();
   text_label_ = nullptr;
   sub_text_label_ = nullptr;
   left_icon_ = nullptr;
diff --git a/ash/system/tray/tray_detailed_view.cc b/ash/system/tray/tray_detailed_view.cc
index 76397f4a..b3d3536 100644
--- a/ash/system/tray/tray_detailed_view.cc
+++ b/ash/system/tray/tray_detailed_view.cc
@@ -408,7 +408,7 @@
 }
 
 void TrayDetailedView::Reset() {
-  RemoveAllChildViews(true);
+  RemoveAllChildViews();
   scroller_ = nullptr;
   scroll_content_ = nullptr;
   progress_bar_ = nullptr;
diff --git a/ash/system/unified/page_indicator_view.cc b/ash/system/unified/page_indicator_view.cc
index 1a43c46..f31fed27 100644
--- a/ash/system/unified/page_indicator_view.cc
+++ b/ash/system/unified/page_indicator_view.cc
@@ -210,7 +210,7 @@
                                           int new_page_count) {
   DCHECK(model_);
 
-  buttons_container_->RemoveAllChildViews(true);
+  buttons_container_->RemoveAllChildViews();
   for (int i = 0; i < model_->total_pages(); ++i) {
     PageIndicatorButton* button = new PageIndicatorButton(controller_, i);
     button->SetAccessibleName(l10n_util::GetStringFUTF16(
diff --git a/ash/system/unified/unified_slider_bubble_controller.cc b/ash/system/unified/unified_slider_bubble_controller.cc
index ef36bea..ce2a5dab 100644
--- a/ash/system/unified/unified_slider_bubble_controller.cc
+++ b/ash/system/unified/unified_slider_bubble_controller.cc
@@ -159,7 +159,7 @@
     DCHECK(bubble_view_);
 
     if (slider_type_ != slider_type) {
-      bubble_view_->RemoveAllChildViews(true);
+      bubble_view_->RemoveAllChildViews();
 
       slider_type_ = slider_type;
       CreateSliderController();
diff --git a/ash/system/unified/unified_system_tray_bubble.cc b/ash/system/unified/unified_system_tray_bubble.cc
index f99ba1f3..815b1d3 100644
--- a/ash/system/unified/unified_system_tray_bubble.cc
+++ b/ash/system/unified/unified_system_tray_bubble.cc
@@ -123,7 +123,7 @@
   // Unified view children depend on `controller_` which is about to go away.
   // Remove child views synchronously to ensure they don't try to access
   // `controller_` after `this` goes out of scope.
-  bubble_view_->RemoveAllChildViews(true);
+  bubble_view_->RemoveAllChildViews();
   bubble_view_->ResetDelegate();
 
   if (bubble_widget_) {
diff --git a/ash/system/unified/unified_system_tray_view.cc b/ash/system/unified/unified_system_tray_view.cc
index 4579972..9fbc5778 100644
--- a/ash/system/unified/unified_system_tray_view.cc
+++ b/ash/system/unified/unified_system_tray_view.cc
@@ -285,7 +285,7 @@
   auto system_tray_size = system_tray_container_->GetPreferredSize();
   system_tray_container_->SetVisible(false);
 
-  detailed_view_container_->RemoveAllChildViews(true /* delete_children */);
+  detailed_view_container_->RemoveAllChildViews();
   detailed_view_container_->AddChildView(detailed_view);
   detailed_view_container_->SetVisible(true);
   detailed_view_container_->SetPreferredSize(system_tray_size);
@@ -294,7 +294,7 @@
 }
 
 void UnifiedSystemTrayView::ResetDetailedView() {
-  detailed_view_container_->RemoveAllChildViews(true /* delete_children */);
+  detailed_view_container_->RemoveAllChildViews();
   detailed_view_container_->SetVisible(false);
   if (media_controls_container_)
     media_controls_container_->MaybeShowMediaControls();
diff --git a/ash/webui/common/resources/page_toolbar.html b/ash/webui/common/resources/page_toolbar.html
index 41e8c06e..6b8bfea 100644
--- a/ash/webui/common/resources/page_toolbar.html
+++ b/ash/webui/common/resources/page_toolbar.html
@@ -1,5 +1,5 @@
 <link rel="stylesheet"
-    href="chrome://resources/chromeos/colors/cros_colors.generated.css">
+    href="chrome://resources/chromeos/colors/cros_styles.css">
 <link rel="stylesheet" href="chrome://resources/css/text_defaults_md.css">
 <link rel="stylesheet" href="chrome://resources/css/md_colors.css">
 <style cr-shared-style>
diff --git a/ash/webui/diagnostics_ui/resources/diagnostics_shared_css.html b/ash/webui/diagnostics_ui/resources/diagnostics_shared_css.html
index 99ee318..9da66b4 100644
--- a/ash/webui/diagnostics_ui/resources/diagnostics_shared_css.html
+++ b/ash/webui/diagnostics_ui/resources/diagnostics_shared_css.html
@@ -1,5 +1,5 @@
 <link rel="stylesheet"
-    href="chrome://resources/chromeos/colors/cros_colors.generated.css">
+    href="chrome://resources/chromeos/colors/cros_styles.css">
 <link rel="import" href="chrome://resources/cr_elements/shared_vars_css.html">
 <link rel="stylesheet" href="chrome://resources/css/text_defaults_md.css">
 <link rel="stylesheet" href="chrome://resources/css/md_colors.css">
diff --git a/ash/webui/diagnostics_ui/resources/routine_result_entry.html b/ash/webui/diagnostics_ui/resources/routine_result_entry.html
index 2923a61c..fdaeac10 100644
--- a/ash/webui/diagnostics_ui/resources/routine_result_entry.html
+++ b/ash/webui/diagnostics_ui/resources/routine_result_entry.html
@@ -23,6 +23,7 @@
     align-items: center;
     display: flex;
     flex-direction: column;
+    width: 56px;
   }
 
   .entryRow {
@@ -50,7 +51,6 @@
   .red {
     border-left: 1px dashed var(--google-red-600);
     position: relative;
-    right: 4px;
   }
 
   #routine {
diff --git a/ash/webui/diagnostics_ui/resources/text_badge.html b/ash/webui/diagnostics_ui/resources/text_badge.html
index 26ae5de..40dc6d3 100644
--- a/ash/webui/diagnostics_ui/resources/text_badge.html
+++ b/ash/webui/diagnostics_ui/resources/text_badge.html
@@ -2,13 +2,11 @@
   .error {
     background-color: var(--google-red-50);
     color: var(--google-red-600);
-    margin-right: 14px;
   }
 
   .queued {
     background-color: var(--google-grey-200);
     color: var(--google-grey-700);
-    margin-right: 7px;
   }
 
   .running {
diff --git a/ash/webui/os_feedback_ui/resources/os_feedback_shared_css.html b/ash/webui/os_feedback_ui/resources/os_feedback_shared_css.html
index 31913ed..c90d36a 100644
--- a/ash/webui/os_feedback_ui/resources/os_feedback_shared_css.html
+++ b/ash/webui/os_feedback_ui/resources/os_feedback_shared_css.html
@@ -1,5 +1,5 @@
 <link rel="stylesheet"
-    href="chrome://resources/chromeos/colors/cros_colors.generated.css">
+    href="chrome://resources/chromeos/colors/cros_styles.css">
 <link rel="stylesheet" href="chrome://resources/css/text_defaults_md.css">
 <link rel="stylesheet" href="chrome://resources/css/md_colors.css">
 <template>
diff --git a/ash/webui/scanning/resources/scanning_shared_css.html b/ash/webui/scanning/resources/scanning_shared_css.html
index ae6b3a4..9bd9a76 100644
--- a/ash/webui/scanning/resources/scanning_shared_css.html
+++ b/ash/webui/scanning/resources/scanning_shared_css.html
@@ -1,5 +1,5 @@
 <link rel="stylesheet"
-    href="chrome://resources/chromeos/colors/cros_colors.generated.css">
+    href="chrome://resources/chromeos/colors/cros_styles.css">
 <link rel="stylesheet" href="chrome://resources/css/text_defaults_md.css">
 <link rel="stylesheet" href="chrome://resources/css/md_colors.css">
 <link rel="stylesheet" href="chrome://resources/cr_elements/md_select_css.html">
diff --git a/ash/webui/shimless_rma/resources/shimless_rma_shared_css.html b/ash/webui/shimless_rma/resources/shimless_rma_shared_css.html
index 1923305..e729b4a55d 100644
--- a/ash/webui/shimless_rma/resources/shimless_rma_shared_css.html
+++ b/ash/webui/shimless_rma/resources/shimless_rma_shared_css.html
@@ -1,5 +1,5 @@
 <link rel="stylesheet"
-    href="chrome://resources/chromeos/colors/cros_colors.generated.css">
+    href="chrome://resources/chromeos/colors/cros_styles.css">
 <link rel="stylesheet" href="chrome://resources/css/text_defaults_md.css">
 <link rel="stylesheet" href="chrome://resources/css/md_colors.css">
 <link rel="stylesheet" href="chrome://resources/cr_elements/md_select_css.html">
diff --git a/ash/webui/shortcut_customization_ui/resources/shortcut_customization_shared_css.html b/ash/webui/shortcut_customization_ui/resources/shortcut_customization_shared_css.html
index c84301a..e729b4a55d 100644
--- a/ash/webui/shortcut_customization_ui/resources/shortcut_customization_shared_css.html
+++ b/ash/webui/shortcut_customization_ui/resources/shortcut_customization_shared_css.html
@@ -1,5 +1,5 @@
 <link rel="stylesheet"
-    href="chrome://resources/chromeos/colors/cros_colors.generated.css">
+    href="chrome://resources/chromeos/colors/cros_styles.css">
 <link rel="stylesheet" href="chrome://resources/css/text_defaults_md.css">
 <link rel="stylesheet" href="chrome://resources/css/md_colors.css">
 <link rel="stylesheet" href="chrome://resources/cr_elements/md_select_css.html">
@@ -10,4 +10,4 @@
       background-color: var(--cros-bg-color);
     }
   </style>
-</template>
\ No newline at end of file
+</template>
diff --git a/ash/wm/window_cycle/window_cycle_list.cc b/ash/wm/window_cycle/window_cycle_list.cc
index 34948b4..56e1e90 100644
--- a/ash/wm/window_cycle/window_cycle_list.cc
+++ b/ash/wm/window_cycle/window_cycle_list.cc
@@ -578,7 +578,7 @@
     target_window_ = nullptr;
     current_window_ = nullptr;
     defer_widget_bounds_update_ = false;
-    RemoveAllChildViews(true);
+    RemoveAllChildViews();
     OnFlingEnd();
   }
 
diff --git a/base/trace_event/common/trace_event_common.h b/base/trace_event/common/trace_event_common.h
index e8a0de7..7639198 100644
--- a/base/trace_event/common/trace_event_common.h
+++ b/base/trace_event/common/trace_event_common.h
@@ -392,12 +392,15 @@
                            TRACE_EVENT_FLAG_COPY, arg1_name, arg1_val,     \
                            arg2_name, arg2_val)
 
-// Similar to TRACE_EVENT_BEGINx but with a custom |at| timestamp provided.
+// Similar to TRACE_EVENT_BEGINx but with a custom |timestamp| provided.
 // - |id| is used to match the _BEGIN event with the _END event.
 //   Events are considered to match if their category_group, name and id values
 //   all match. |id| must either be a pointer or an integer value up to 64 bits.
 //   If it's a pointer, the bits will be xored with a hash of the process ID so
 //   that the same pointer on two different processes will not collide.
+// - |timestamp| must be non-null or it crashes. Use DCHECK(timestamp) before
+//   calling this to detect an invalid timestamp even when tracing is not
+//   enabled, as the commit queue doesn't run all tests with tracing enabled.
 #define TRACE_EVENT_BEGIN_WITH_ID_TID_AND_TIMESTAMP0(category_group, name, id, \
                                                      thread_id, timestamp)     \
   INTERNAL_TRACE_EVENT_ADD_WITH_ID_TID_AND_TIMESTAMP(                          \
@@ -448,6 +451,10 @@
                            TRACE_EVENT_FLAG_COPY, arg1_name, arg1_val,   \
                            arg2_name, arg2_val)
 
+// Adds a trace event with the given |name| and |timestamp|. |timestamp| must be
+// non-null or it crashes. Use DCHECK(timestamp) before calling this to detect
+// an invalid timestamp even when tracing is not enabled, as the commit queue
+// doesn't run all tests with tracing enabled.
 #define TRACE_EVENT_MARK_WITH_TIMESTAMP0(category_group, name, timestamp) \
   INTERNAL_TRACE_EVENT_ADD_WITH_TIMESTAMP(                                \
       TRACE_EVENT_PHASE_MARK, category_group, name, timestamp,            \
@@ -478,12 +485,15 @@
       TRACE_EVENT_PHASE_MARK, category_group, name, timestamp,                \
       TRACE_EVENT_FLAG_COPY)
 
-// Similar to TRACE_EVENT_ENDx but with a custom |at| timestamp provided.
+// Similar to TRACE_EVENT_ENDx but with a custom |timestamp| provided.
 // - |id| is used to match the _BEGIN event with the _END event.
 //   Events are considered to match if their category_group, name and id values
 //   all match. |id| must either be a pointer or an integer value up to 64 bits.
 //   If it's a pointer, the bits will be xored with a hash of the process ID so
 //   that the same pointer on two different processes will not collide.
+// - |timestamp| must be non-null or it crashes. Use DCHECK(timestamp) before
+//   calling this to detect an invalid timestamp even when tracing is not
+//   enabled, as the commit queue doesn't run all tests with tracing enabled.
 #define TRACE_EVENT_END_WITH_ID_TID_AND_TIMESTAMP0(category_group, name, id, \
                                                    thread_id, timestamp)     \
   INTERNAL_TRACE_EVENT_ADD_WITH_ID_TID_AND_TIMESTAMP(                        \
@@ -542,6 +552,9 @@
                            static_cast<int>(value2_val))
 
 // Similar to TRACE_COUNTERx, but with a custom |timestamp| provided.
+// - |timestamp| must be non-null or it crashes. Use DCHECK(timestamp) before
+//   calling this to detect an invalid timestamp even when tracing is not
+//   enabled, as the commit queue doesn't run all tests with tracing enabled.
 #define TRACE_COUNTER_WITH_TIMESTAMP1(category_group, name, timestamp, value) \
   INTERNAL_TRACE_EVENT_ADD_WITH_TIMESTAMP(                                    \
       TRACE_EVENT_PHASE_COUNTER, category_group, name, timestamp,             \
diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
index 758d373..11bc5f54 100644
--- a/build/config/compiler/BUILD.gn
+++ b/build/config/compiler/BUILD.gn
@@ -314,7 +314,6 @@
   # .o files built with different compiler versions harder.
   if (!is_win || is_clang) {
     cflags += [ "-fno-ident" ]
-    asmflags += [ "-fno-ident" ]
   }
 
   # In general, Windows is totally different, but all the other builds share
diff --git a/chrome/OWNERS b/chrome/OWNERS
index b51923cc..0749105 100644
--- a/chrome/OWNERS
+++ b/chrome/OWNERS
@@ -33,3 +33,6 @@
 per-file VERSION=chrome-official-brancher@chops-service-accounts.iam.gserviceaccount.com
 per-file VERSION=govind@chromium.org
 per-file VERSION=mmoss@chromium.org
+
+# Fuchsia integration owners:
+per-file *fuchsia*=file://build/fuchsia/OWNERS
diff --git a/chrome/android/expectations/lint-suppressions.xml b/chrome/android/expectations/lint-suppressions.xml
index 8563dc91..ff444a3 100644
--- a/chrome/android/expectations/lint-suppressions.xml
+++ b/chrome/android/expectations/lint-suppressions.xml
@@ -133,6 +133,9 @@
     <!-- The double dash in the following file is a command line flag. -->
     <ignore regexp="chrome/app/policy/android/values-v21/restriction_values.xml"/>
   </issue>
+  <issue id="TypographyEllipsis">
+    <ignore regexp="chrome/browser/ui/android/strings/ui_strings_grd.resources.zip/values-uz/android_chrome_strings.xml"/>
+  </issue>
   <issue id="UnusedIds" severity="ignore"/>
   <issue id="UnusedQuantity" severity="ignore"/>
   <issue id="UnusedResources">
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SigninCheckerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SigninCheckerTest.java
index 3b07b89..e07bd90 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SigninCheckerTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SigninCheckerTest.java
@@ -25,6 +25,7 @@
 import org.chromium.base.test.util.CommandLineFlags;
 import org.chromium.base.test.util.CriteriaHelper;
 import org.chromium.base.test.util.DisableIf;
+import org.chromium.base.test.util.FlakyTest;
 import org.chromium.base.test.util.UserActionTester;
 import org.chromium.chrome.browser.flags.ChromeFeatureList;
 import org.chromium.chrome.browser.flags.ChromeSwitches;
@@ -84,6 +85,7 @@
 
     @Test
     @MediumTest
+    @FlakyTest(message = "https://crbug.com/1205346")
     public void signinWhenPrimaryAccountIsRenamedToAKnownAccount() {
         mActivityTestRule.startMainActivityOnBlankPage();
         mAccountManagerTestRule.addAccountAndWaitForSeeding("the.second.account@gmail.com");
@@ -105,6 +107,7 @@
 
     @Test
     @MediumTest
+    @FlakyTest(message = "https://crbug.com/1205346")
     public void signoutWhenPrimaryAccountIsRenamedToAnUnknownAccount() {
         mActivityTestRule.startMainActivityOnBlankPage();
         mAccountManagerTestRule.addAccountAndWaitForSeeding("the.second.account@gmail.com");
@@ -126,6 +129,7 @@
 
     @Test
     @MediumTest
+    @FlakyTest(message = "https://crbug.com/1205346")
     public void signoutWhenPrimaryAccountIsRemoved() {
         mActivityTestRule.startMainActivityOnBlankPage();
         mAccountManagerTestRule.addAccountAndWaitForSeeding("the.second.account@gmail.com");
@@ -144,6 +148,7 @@
 
     @Test
     @MediumTest
+    @FlakyTest(message = "https://crbug.com/1205346")
     public void signoutWhenPrimaryAccountWithoutSyncConsentIsRemoved() {
         mActivityTestRule.startMainActivityOnBlankPage();
         mAccountManagerTestRule.addAccountAndWaitForSeeding("the.second.account@gmail.com");
diff --git a/chrome/android/javatests/src/org/chromium/chrome/test/smoke/ChromeBundleSmokeTest.java b/chrome/android/javatests/src/org/chromium/chrome/test/smoke/ChromeBundleSmokeTest.java
index ad40d5922..fd38604 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/test/smoke/ChromeBundleSmokeTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/test/smoke/ChromeBundleSmokeTest.java
@@ -20,6 +20,7 @@
 import org.junit.runner.RunWith;
 
 import org.chromium.base.test.BaseJUnit4ClassRunner;
+import org.chromium.base.test.util.FlakyTest;
 import org.chromium.chrome.test.pagecontroller.rules.ChromeUiApplicationTestRule;
 import org.chromium.chrome.test.pagecontroller.rules.ChromeUiAutomatorTestRule;
 import org.chromium.chrome.test.pagecontroller.utils.IUi2Locator;
@@ -71,21 +72,25 @@
     }
 
     @Test
+    @FlakyTest(message = "https://crbug.com/1236987, https://crbug.com/1236986")
     public void testModuleJavaCodeExecution() {
         runTestActivity(0); // Test case EXECUTE_JAVA.
     }
 
     @Test
+    @FlakyTest(message = "https://crbug.com/1236987, https://crbug.com/1236986")
     public void testModuleNativeCodeExecution() {
         runTestActivity(1); // Test case EXECUTE_NATIVE.
     }
 
     @Test
+    @FlakyTest(message = "https://crbug.com/1236987, https://crbug.com/1236986")
     public void testModuleJavaResourceLoading() {
         runTestActivity(2); // Test case LOAD_JAVA_RESOURCE.
     }
 
     @Test
+    @FlakyTest(message = "https://crbug.com/1236987, https://crbug.com/1236986")
     public void testModuleNativeResourceLoading() {
         runTestActivity(3); // Test case LOAD_NATIVE_RESOURCE.
     }
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/ui/AppLaunchDrawBlockerUnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/ui/AppLaunchDrawBlockerUnitTest.java
index 822cfbd..b8b35ee 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/ui/AppLaunchDrawBlockerUnitTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/ui/AppLaunchDrawBlockerUnitTest.java
@@ -75,6 +75,8 @@
     public JniMocker mJniMocker = new JniMocker();
     @Rule
     public TestRule mProcessor = new Features.JUnitProcessor();
+    @Rule
+    public TestRule mCommandLineFlagsRule = CommandLineFlags.getTestRule();
 
     @Mock
     private ActivityLifecycleDispatcher mActivityLifecycleDispatcher;
diff --git a/chrome/android/profiles/newest.txt b/chrome/android/profiles/newest.txt
index 1b81701..18aa9cb4 100644
--- a/chrome/android/profiles/newest.txt
+++ b/chrome/android/profiles/newest.txt
@@ -1 +1 @@
-chromeos-chrome-amd64-93.0.4577.25_rc-r1-merged.afdo.bz2
+chromeos-chrome-amd64-93.0.4577.27_rc-r1-merged.afdo.bz2
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index 86cf864..002b0267 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -2479,7 +2479,7 @@
     sources += [ "net/net_error_diagnostics_dialog_stub.cc" ]
   }
 
-  if (is_posix) {
+  if (is_posix || is_fuchsia) {
     sources += [
       "download/trusted_sources_manager_posix.cc",
       "google/google_update_settings_posix.cc",
@@ -5354,7 +5354,7 @@
     ]
   }
 
-  if (is_linux || is_win || is_mac) {
+  if (is_linux || is_win || is_mac || is_fuchsia) {
     sources += [
       "enterprise/connectors/device_trust/attestation_service.cc",
       "enterprise/connectors/device_trust/attestation_service.h",
@@ -5467,10 +5467,17 @@
       "first_run/first_run_internal_fuchsia.cc",
       "first_run/upgrade_util_fuchsia.cc",
       "icon_loader_fuchsia.cc",
+      "importer/firefox_profile_lock_fuchsia.cc",
       "media/webrtc/window_icon_util_fuchsia.cc",
       "memory_details_fuchsia.cc",
       "obsolete_system/obsolete_system_stub.cc",
+      "platform_util_fuchsia.cc",
+      "policy/browser_dm_token_storage_fuchsia.cc",
+      "policy/browser_dm_token_storage_fuchsia.h",
+      "process_singleton_fuchsia.cc",
       "shell_integration_fuchsia.cc",
+      "upgrade_detector/get_installed_version_fuchsia.cc",
+      "upgrade_detector/installed_version_monitor_fuchsia.cc",
     ]
   }
 
@@ -5500,12 +5507,14 @@
     sources += [ "hang_monitor/hang_crash_dump.cc" ]
   }
 
-  if (is_win || is_linux || is_chromeos) {
+  if (is_win || is_linux || is_chromeos || is_fuchsia) {
     sources += [
       "renderer_context_menu/spelling_options_submenu_observer.cc",
       "renderer_context_menu/spelling_options_submenu_observer.h",
     ]
+  }
 
+  if (is_win || is_linux || is_chromeos) {
     # TODO(crbug/1229334): Add Mac support for Lens Region Search feature.
     deps += [ "//chrome/browser/lens/region_search" ]
   }
@@ -5519,7 +5528,7 @@
     ]
   }
 
-  if (is_win || is_mac || (is_linux || is_chromeos_lacros)) {
+  if (is_win || is_mac || (is_linux || is_chromeos_lacros) || is_fuchsia) {
     sources += [
       "browser_switcher/alternative_browser_driver.h",
       "browser_switcher/browser_switcher_navigation_throttle.cc",
@@ -5645,7 +5654,7 @@
     ]
   }
 
-  if (is_win || is_mac || is_linux || is_chromeos) {
+  if (is_win || is_mac || is_linux || is_chromeos || is_fuchsia) {
     sources += [
       "media/cast_mirroring_service_host.cc",
       "media/cast_mirroring_service_host.h",
@@ -6884,6 +6893,7 @@
   ]
 
   if (enable_plugins) {
+    assert(!is_fuchsia)
     if (is_chromeos_ash) {
       inputs = [ "resources/plugin_metadata/plugins_chromeos.json" ]
     }
@@ -6898,7 +6908,7 @@
     }
   }
 
-  if (is_win || is_mac || is_linux || is_chromeos) {
+  if (is_win || is_mac || is_linux || is_chromeos || is_fuchsia) {
     deps += [
       "//chrome/browser/resources/discards:discards_resources_gen",
       "//chrome/browser/resources/gaia_auth_host:modulize",
@@ -7230,8 +7240,6 @@
       "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/enrollment/fake_device_cloud_policy_initializer.cc",
-      "ash/policy/enrollment/fake_device_cloud_policy_initializer.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",
       "chromeos/net/network_portal_detector_test_utils.cc",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index c35f6bf..401b764 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -7661,6 +7661,10 @@
      kOsAll,
      FEATURE_VALUE_TYPE(net::features::kSamePartyCookiesConsideredFirstParty)},
 
+    {"partitioned-cookies", flag_descriptions::kPartitionedCookiesName,
+     flag_descriptions::kPartitionedCookiesDescription, kOsDesktop | kOsAndroid,
+     FEATURE_VALUE_TYPE(net::features::kPartitionedCookies)},
+
 #if BUILDFLAG(IS_CHROMEOS_ASH)
     {kBorealisDiskManagementInternalName,
      flag_descriptions::kBorealisDiskManagementName,
diff --git a/chrome/browser/app_controller_mac.h b/chrome/browser/app_controller_mac.h
index 89b73ab..c7126aa 100644
--- a/chrome/browser/app_controller_mac.h
+++ b/chrome/browser/app_controller_mac.h
@@ -188,7 +188,7 @@
 // may have changed. This can cause a rebuild of the user-data menus. This is a
 // no-op if the new profile is the same as the current one. This can be either
 // the original or the incognito profile.
-- (void)windowChangedToProfile:(Profile*)profile;
+- (void)setLastProfile:(Profile*)profile;
 
 // Certain NSMenuItems [Close Tab and Close Window] have different
 // keyEquivalents depending on context. This must be invoked in two locations:
diff --git a/chrome/browser/app_controller_mac.mm b/chrome/browser/app_controller_mac.mm
index 29661d1..aa9a952c 100644
--- a/chrome/browser/app_controller_mac.mm
+++ b/chrome/browser/app_controller_mac.mm
@@ -382,7 +382,6 @@
 - (BOOL)shouldQuitWithInProgressDownloads;
 - (void)profileWasRemoved:(const base::FilePath&)profilePath
              forIncognito:(bool)isIncognito;
-- (void)setLastProfile:(Profile*)profile;
 
 // This class cannot open urls until startup has finished. The urls that cannot
 // be opened are cached in |startupUrls_|. This method must be called exactly
@@ -579,11 +578,6 @@
          selector:@selector(windowDidBecomeMain:)
              name:NSWindowDidBecomeMainNotification
            object:nil];
-  [notificationCenter
-      addObserver:self
-         selector:@selector(windowDidResignMain:)
-             name:NSWindowDidResignMainNotification
-           object:nil];
 
   // Register for space change notifications.
   [[[NSWorkspace sharedWorkspace] notificationCenter]
@@ -734,17 +728,14 @@
   // browsers get dealloc'd, it will stop the RunLoop and fall back into main().
   _keep_alive.reset();
 
-  // Reset all pref watching, as this object outlives the prefs system.
-  _profilePrefRegistrar.reset();
+  // Reset local state watching, as this object outlives the prefs system.
   _localPrefRegistrar.RemoveAll();
 
   // It's safe to delete |_lastProfile| now.
   [self setLastProfile:nullptr];
 
   [self unregisterEventHandlers];
-
   _appShimMenuController.reset();
-
   _profileBookmarkMenuBridgeMap.clear();
 }
 
@@ -825,14 +816,7 @@
           features::kUpdateHistoryEntryPointsInIncognito)) {
     profile = profile->GetOriginalProfile();
   }
-  [self windowChangedToProfile:profile];
-}
-
-- (void)windowDidResignMain:(NSNotification*)notify {
-  if (_lastProfile && chrome::GetTotalBrowserCount() == 0 &&
-      [self isProfileReady]) {
-    [self windowChangedToProfile:_lastProfile];
-  }
+  [self setLastProfile:profile];
 }
 
 - (void)activeSpaceDidChange:(NSNotification*)notify {
@@ -1113,17 +1097,13 @@
   // |lastProfile_| might be null.
   if (!_lastProfile || (profilePath == _lastProfile->GetPath() &&
                         isOffTheRecord == _lastProfile->IsOffTheRecord())) {
-    // Force windowChangedToProfile: to set the lastProfile_ and also update the
-    // relevant menuBridge objects.
-    [self setLastProfile:nullptr];
+    Profile* last_used_profile = nullptr;
     auto* profile_manager = g_browser_process->profile_manager();
     if (profile_manager) {
       // |profile_manager| is null in browser tests during shutdown.
-      Profile* last_used_profile =
-          profile_manager->GetLastUsedProfileIfLoaded();
-      if (last_used_profile)
-        [self windowChangedToProfile:last_used_profile];
+      last_used_profile = profile_manager->GetLastUsedProfileIfLoaded();
     }
+    [self setLastProfile:last_used_profile];
   }
 
   _profileBookmarkMenuBridgeMap.erase(profilePath);
@@ -1734,33 +1714,14 @@
   if (profile == _lastProfile)
     return;
 
-  if (profile == nullptr) {
-    _lastProfile = nullptr;
-    _lastProfileKeepAlive.reset();
-    return;
-  }
-
-  _lastProfile = profile;
-  if (profile->IsOffTheRecord()) {
-    _lastProfileKeepAlive.reset();
-  } else {
-    _lastProfileKeepAlive = std::make_unique<ScopedProfileKeepAlive>(
-        _lastProfile, ProfileKeepAliveOrigin::kAppControllerMac);
-  }
-}
-
-- (void)windowChangedToProfile:(Profile*)profile {
-  if (_lastProfile == profile)
-    return;
-
   // Before tearing down the menu controller bridges, return the history menu to
   // its initial state.
   if (_historyMenuBridge)
     _historyMenuBridge->ResetMenu();
+  _historyMenuBridge.reset();
 
-  // Clear the profile pref registrar before tearing down.
-  if (_profilePrefRegistrar)
-    _profilePrefRegistrar->RemoveAll();
+  _profilePrefRegistrar.reset();
+  _lastProfileKeepAlive.reset();
 
   // Rebuild the menus with the new profile. The bookmarks submenu is cached to
   // avoid slowdowns when switching between profiles with large numbers of
@@ -1772,7 +1733,16 @@
   NSMenuItem* bookmarkItem = [[NSApp mainMenu] itemWithTag:IDC_BOOKMARKS_MENU];
   BOOL hidden = [bookmarkItem isHidden];
   [bookmarkItem setHidden:NO];
-  [self setLastProfile:profile];
+
+  _lastProfile = profile;
+
+  if (_lastProfile == nullptr)
+    return;
+
+  if (!profile->IsOffTheRecord()) {
+    _lastProfileKeepAlive = std::make_unique<ScopedProfileKeepAlive>(
+        _lastProfile, ProfileKeepAliveOrigin::kAppControllerMac);
+  }
 
   auto& entry = _profileBookmarkMenuBridgeMap[profile->GetPath()];
   if (!entry) {
@@ -2011,7 +1981,7 @@
   if (status == Profile::CREATE_STATUS_INITIALIZED) {
     AppController* controller =
         base::mac::ObjCCastStrict<AppController>([NSApp delegate]);
-    [controller windowChangedToProfile:profile];
+    [controller setLastProfile:profile];
   }
 }
 
diff --git a/chrome/browser/app_controller_mac_browsertest.mm b/chrome/browser/app_controller_mac_browsertest.mm
index f7179bd..600bc8c 100644
--- a/chrome/browser/app_controller_mac_browsertest.mm
+++ b/chrome/browser/app_controller_mac_browsertest.mm
@@ -244,6 +244,66 @@
   // Let the run loop get flushed, during process cleanup and try not to crash.
 }
 
+// Regression test for https://crbug.com/1236073
+IN_PROC_BROWSER_TEST_F(AppControllerBrowserTest, DeleteEphemeralProfile) {
+  EXPECT_EQ(1u, chrome::GetTotalBrowserCount());
+  Profile* profile = browser()->profile();
+  // Activate the first profile.
+  [[NSNotificationCenter defaultCenter]
+      postNotificationName:NSWindowDidBecomeMainNotification
+                    object:browser()
+                               ->window()
+                               ->GetNativeWindow()
+                               .GetNativeNSWindow()];
+  AppController* ac = base::mac::ObjCCast<AppController>(
+      [[NSApplication sharedApplication] delegate]);
+  ASSERT_TRUE(ac);
+  ASSERT_EQ(profile, [ac lastProfile]);
+
+  // Mark the profile as ephemeral.
+  profile->GetPrefs()->SetBoolean(prefs::kForceEphemeralProfiles, true);
+  ProfileManager* profile_manager = g_browser_process->profile_manager();
+  ProfileAttributesStorage& storage =
+      profile_manager->GetProfileAttributesStorage();
+  ProfileAttributesEntry* entry =
+      storage.GetProfileAttributesWithPath(profile->GetPath());
+  EXPECT_TRUE(entry->IsEphemeral());
+
+  // Add sentinel data to observe profile destruction. Ephemeral profiles are
+  // destroyed immediately upon browser close.
+  class ProfileDestroyedData : public base::SupportsUserData::Data {
+   public:
+    ProfileDestroyedData(base::OnceClosure callback)
+        : callback_(std::move(callback)) {}
+
+    ~ProfileDestroyedData() override { std::move(callback_).Run(); }
+
+   private:
+    base::OnceClosure callback_;
+  };
+  base::RunLoop loop;
+  const char kUserDataKey = 0;
+  profile->SetUserData(&kUserDataKey, std::make_unique<ProfileDestroyedData>(
+                                          loop.QuitClosure()));
+
+  // Close browser and wait for the profile to be deleted.
+  CloseBrowserSynchronously(browser());
+  loop.Run();
+  EXPECT_EQ(0u, chrome::GetTotalBrowserCount());
+
+  // Create a new profile and activate it.
+  Profile* profile2 = CreateAndWaitForProfile(
+      profile_manager->user_data_dir().AppendASCII("Profile 2"));
+  Browser* browser2 = CreateBrowser(profile2);
+  // This should not crash.
+  [[NSNotificationCenter defaultCenter]
+      postNotificationName:NSWindowDidBecomeMainNotification
+                    object:browser2->window()
+                               ->GetNativeWindow()
+                               .GetNativeNSWindow()];
+  ASSERT_EQ(profile2, [ac lastProfile]);
+}
+
 class AppControllerKeepAliveBrowserTest : public InProcessBrowserTest {
  protected:
   AppControllerKeepAliveBrowserTest() {
@@ -270,7 +330,7 @@
   Profile* profile1 = browser()->profile();
   Profile* profile2 = CreateAndWaitForProfile(
       profile_manager->user_data_dir().AppendASCII("Profile 2"));
-  [ac windowChangedToProfile:profile1];
+  [ac setLastProfile:profile1];
   ASSERT_EQ(profile1, [ac lastProfile]);
 
   // |profile1| is active.
@@ -281,7 +341,7 @@
       profile2, ProfileKeepAliveOrigin::kAppControllerMac));
 
   // Make |profile2| active.
-  [ac windowChangedToProfile:profile2];
+  [ac setLastProfile:profile2];
   ASSERT_EQ(profile2, [ac lastProfile]);
   base::RunLoop().RunUntilIdle();
   EXPECT_FALSE(profile_manager->HasKeepAliveForTesting(
@@ -813,12 +873,12 @@
   ASSERT_TRUE(profile2);
 
   // Load profile1's History Service backend so it will be assigned to the
-  // HistoryMenuBridge when windowChangedToProfile is called, or else this test
-  // will fail flaky.
+  // HistoryMenuBridge when setLastProfile is called, or else this test will
+  // fail flaky.
   ui_test_utils::WaitForHistoryToLoad(HistoryServiceFactory::GetForProfile(
       profile1, ServiceAccessType::EXPLICIT_ACCESS));
   // Switch the controller to profile1.
-  [ac windowChangedToProfile:profile1];
+  [ac setLastProfile:profile1];
   base::RunLoop().RunUntilIdle();
 
   // Verify the controller's History Menu corresponds to profile1.
@@ -828,13 +888,13 @@
                                            ServiceAccessType::EXPLICIT_ACCESS));
 
   // Load profile2's History Service backend so it will be assigned to the
-  // HistoryMenuBridge when windowChangedToProfile is called, or else this test
-  // will fail flaky.
+  // HistoryMenuBridge when setLastProfile is called, or else this test will
+  // fail flaky.
   ui_test_utils::WaitForHistoryToLoad(
       HistoryServiceFactory::GetForProfile(profile2,
                                            ServiceAccessType::EXPLICIT_ACCESS));
   // Switch the controller to profile2.
-  [ac windowChangedToProfile:profile2];
+  [ac setLastProfile:profile2];
   base::RunLoop().RunUntilIdle();
 
   // Verify the controller's History Menu has changed.
@@ -891,7 +951,7 @@
       BookmarkModelFactory::GetForBrowserContext(profile2_ptr));
 
   // Switch to profile 1, create bookmark 1 and force the menu to build.
-  [ac windowChangedToProfile:profile1];
+  [ac setLastProfile:profile1];
   [ac bookmarkMenuBridge]->GetBookmarkModel()->AddURL(
       [ac bookmarkMenuBridge]->GetBookmarkModel()->bookmark_bar_node(),
       0, title1, url1);
@@ -899,7 +959,7 @@
   [[profile1_submenu delegate] menuNeedsUpdate:profile1_submenu];
 
   // Switch to profile 2, create bookmark 2 and force the menu to build.
-  [ac windowChangedToProfile:profile2_ptr];
+  [ac setLastProfile:profile2_ptr];
   [ac bookmarkMenuBridge]->GetBookmarkModel()->AddURL(
       [ac bookmarkMenuBridge]->GetBookmarkModel()->bookmark_bar_node(),
       0, title2, url2);
@@ -914,7 +974,7 @@
       SysUTF16ToNSString(title2)]);
 
   // Switch *back* to profile 1 and *don't* force the menu to build.
-  [ac windowChangedToProfile:profile1];
+  [ac setLastProfile:profile1];
 
   // Test that only bookmark 1 is shown in the restored menu.
   EXPECT_TRUE([[ac bookmarkMenuBridge]->BookmarkMenu() itemWithTitle:
diff --git a/chrome/browser/ash/DEPS b/chrome/browser/ash/DEPS
index f3adabc..b2aff39 100644
--- a/chrome/browser/ash/DEPS
+++ b/chrome/browser/ash/DEPS
@@ -23,6 +23,7 @@
   "+media/base/media_switches.h",  # For media command line switches.
   "+media/mojo/mojom",  # For platform verification mojom interface.
   "+remoting/host/it2me",  # For CRD host in remote command
+  "+remoting/protocol",  # For CRD host in remote command
   "+services/device/public",
   "+services/metrics/public",
   "+services/network",
diff --git a/chrome/browser/ash/file_manager/file_manager_browsertest.cc b/chrome/browser/ash/file_manager/file_manager_browsertest.cc
index 93e2691..820362c 100644
--- a/chrome/browser/ash/file_manager/file_manager_browsertest.cc
+++ b/chrome/browser/ash/file_manager/file_manager_browsertest.cc
@@ -895,12 +895,10 @@
         TestCase("tabindexOpenDialogDownloads").WithBrowser(),
         TestCase("tabindexOpenDialogDownloads").WithBrowser().InGuestMode()
 // TODO(crbug.com/1236842): Remove flakiness and enable this test.
-#if !defined(ADDRESS_SANITIZER) && defined(NDEBUG)
-            ,
-        TestCase("tabindexSaveFileDialogDrive").WithBrowser(),
-        TestCase("tabindexSaveFileDialogDownloads").WithBrowser(),
-        TestCase("tabindexSaveFileDialogDownloads").WithBrowser().InGuestMode()
-#endif
+//      ,
+//      TestCase("tabindexSaveFileDialogDrive").WithBrowser(),
+//      TestCase("tabindexSaveFileDialogDownloads").WithBrowser(),
+//      TestCase("tabindexSaveFileDialogDownloads").WithBrowser().InGuestMode()
             ));
 
 WRAPPED_INSTANTIATE_TEST_SUITE_P(
diff --git a/chrome/browser/ash/input_method/ui/candidate_window_view.cc b/chrome/browser/ash/input_method/ui/candidate_window_view.cc
index 17277b9..c56d791 100644
--- a/chrome/browser/ash/input_method/ui/candidate_window_view.cc
+++ b/chrome/browser/ash/input_method/ui/candidate_window_view.cc
@@ -388,7 +388,7 @@
 
   // Reset all candidate_views_ when orientation changes.
   if (orientation != candidate_window_.orientation()) {
-    candidate_area_->RemoveAllChildViews(true);
+    candidate_area_->RemoveAllChildViews();
     candidate_views_.clear();
   }
 
diff --git a/chrome/browser/ash/login/demo_mode/demo_setup_test_utils.cc b/chrome/browser/ash/login/demo_mode/demo_setup_test_utils.cc
index 6a4f34a3..fa50e544 100644
--- a/chrome/browser/ash/login/demo_mode/demo_setup_test_utils.cc
+++ b/chrome/browser/ash/login/demo_mode/demo_setup_test_utils.cc
@@ -6,6 +6,7 @@
 
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/logging.h"
 #include "base/threading/thread_restrictions.h"
 #include "components/policy/proto/device_management_backend.pb.h"
 
diff --git a/chrome/browser/ash/login/enrollment/enterprise_enrollment_helper.h b/chrome/browser/ash/login/enrollment/enterprise_enrollment_helper.h
index 81fb706..de87e49 100644
--- a/chrome/browser/ash/login/enrollment/enterprise_enrollment_helper.h
+++ b/chrome/browser/ash/login/enrollment/enterprise_enrollment_helper.h
@@ -11,7 +11,6 @@
 
 #include "base/callback_forward.h"
 #include "base/macros.h"
-#include "chrome/browser/ash/policy/enrollment/device_cloud_policy_initializer.h"
 #include "components/policy/core/common/cloud/cloud_policy_constants.h"
 
 class GoogleServiceAuthError;
@@ -30,9 +29,6 @@
 // that are not longer needed.
 class EnterpriseEnrollmentHelper {
  public:
-  using EnrollmentCallback =
-      policy::DeviceCloudPolicyInitializer::EnrollmentCallback;
-
   // Enumeration of the possible errors that can occur during enrollment which
   // are not covered by GoogleServiceAuthError or EnrollmentStatus.
   enum OtherError {
diff --git a/chrome/browser/ash/login/enrollment/enterprise_enrollment_helper_mock.h b/chrome/browser/ash/login/enrollment/enterprise_enrollment_helper_mock.h
index 198192cd..4765de0 100644
--- a/chrome/browser/ash/login/enrollment/enterprise_enrollment_helper_mock.h
+++ b/chrome/browser/ash/login/enrollment/enterprise_enrollment_helper_mock.h
@@ -7,6 +7,8 @@
 
 #include <string>
 
+#include "base/callback.h"
+#include "base/callback_forward.h"
 #include "chrome/browser/ash/login/enrollment/enterprise_enrollment_helper.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/ash/policy/core/browser_policy_connector_ash.cc b/chrome/browser/ash/policy/core/browser_policy_connector_ash.cc
index 5e3afc8..d5b0abb4 100644
--- a/chrome/browser/ash/policy/core/browser_policy_connector_ash.cc
+++ b/chrome/browser/ash/policy/core/browser_policy_connector_ash.cc
@@ -484,11 +484,6 @@
   return global_user_cloud_policy_provider_;
 }
 
-void BrowserPolicyConnectorAsh::SetDeviceCloudPolicyInitializerForTesting(
-    std::unique_ptr<DeviceCloudPolicyInitializer> initializer) {
-  device_cloud_policy_initializer_ = std::move(initializer);
-}
-
 // static
 void BrowserPolicyConnectorAsh::RegisterPrefs(PrefRegistrySimple* registry) {
   registry->RegisterIntegerPref(
diff --git a/chrome/browser/ash/policy/core/browser_policy_connector_ash.h b/chrome/browser/ash/policy/core/browser_policy_connector_ash.h
index cdfad69..4cf2de5b 100644
--- a/chrome/browser/ash/policy/core/browser_policy_connector_ash.h
+++ b/chrome/browser/ash/policy/core/browser_policy_connector_ash.h
@@ -225,10 +225,6 @@
   // [2] i.e. g_browser_process->local_state()
   ProxyPolicyProvider* GetGlobalUserCloudPolicyProvider();
 
-  // Sets the device cloud policy initializer for testing.
-  void SetDeviceCloudPolicyInitializerForTesting(
-      std::unique_ptr<DeviceCloudPolicyInitializer> initializer);
-
   // Registers device refresh rate pref.
   static void RegisterPrefs(PrefRegistrySimple* registry);
 
diff --git a/chrome/browser/ash/policy/core/device_cloud_policy_client_factory_ash.cc b/chrome/browser/ash/policy/core/device_cloud_policy_client_factory_ash.cc
index 00798fe8..59f68e51 100644
--- a/chrome/browser/ash/policy/core/device_cloud_policy_client_factory_ash.cc
+++ b/chrome/browser/ash/policy/core/device_cloud_policy_client_factory_ash.cc
@@ -11,7 +11,6 @@
 #include "base/memory/weak_ptr.h"
 #include "base/strings/string_util.h"
 #include "chromeos/system/statistics_provider.h"
-#include "components/policy/core/common/cloud/signing_service.h"
 #include "services/network/public/cpp/shared_url_loader_factory.h"
 
 namespace {
@@ -83,7 +82,6 @@
 // static
 std::unique_ptr<CloudPolicyClient> CreateDeviceCloudPolicyClientAsh(
     chromeos::system::StatisticsProvider* statistics_provider,
-    SigningService* signing_service,
     DeviceManagementService* service,
     scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory,
     CloudPolicyClient::DeviceDMTokenCallback device_dm_token_callback) {
@@ -93,8 +91,8 @@
       GetAttestedDeviceId(statistics_provider),
       GetEthernetMacAddress(statistics_provider),
       GetDockMacAddress(statistics_provider),
-      GetManufactureDate(statistics_provider), signing_service, service,
-      url_loader_factory, std::move(device_dm_token_callback));
+      GetManufactureDate(statistics_provider), service, url_loader_factory,
+      std::move(device_dm_token_callback));
 }
 
 }  // namespace policy
diff --git a/chrome/browser/ash/policy/core/device_cloud_policy_client_factory_ash.h b/chrome/browser/ash/policy/core/device_cloud_policy_client_factory_ash.h
index bcd105e..ac91300 100644
--- a/chrome/browser/ash/policy/core/device_cloud_policy_client_factory_ash.h
+++ b/chrome/browser/ash/policy/core/device_cloud_policy_client_factory_ash.h
@@ -23,16 +23,14 @@
 namespace policy {
 
 class DeviceManagementService;
-class SigningService;
 
 // Creates a CloudPolicyClient specific to the device level policies in Ash.
 // Returned client can be used to connect |DeviceCloudPolicyManagerAsh|.
 // |statistics_provider| is used to retrieve machine identity (machine id,
-// model, brand code etc.). |signing_service|, |service|, |url_loader_factory|
-// and |device_dm_token_callback| are passed to the client as are.
+// model, brand code etc.). |service|, |url_loader_factory| and
+// |device_dm_token_callback| are passed to the client as are.
 std::unique_ptr<CloudPolicyClient> CreateDeviceCloudPolicyClientAsh(
     chromeos::system::StatisticsProvider* statistics_provider,
-    SigningService* signing_service,
     DeviceManagementService* service,
     scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory,
     CloudPolicyClient::DeviceDMTokenCallback device_dm_token_callback);
diff --git a/chrome/browser/ash/policy/enrollment/device_cloud_policy_initializer.cc b/chrome/browser/ash/policy/enrollment/device_cloud_policy_initializer.cc
index 1a5e6b6..95686bb 100644
--- a/chrome/browser/ash/policy/enrollment/device_cloud_policy_initializer.cc
+++ b/chrome/browser/ash/policy/enrollment/device_cloud_policy_initializer.cc
@@ -114,9 +114,10 @@
 
   enrollment_handler_ = std::make_unique<EnrollmentHandler>(
       policy_store_, install_attributes_, state_keys_broker_,
-      attestation_flow_.get(), CreateClient(device_management_service),
-      background_task_runner_, ad_join_delegate, enrollment_config,
-      std::move(dm_auth), install_attributes_->GetDeviceId(),
+      attestation_flow_.get(), signing_service_.get(),
+      CreateClient(device_management_service), background_task_runner_,
+      ad_join_delegate, enrollment_config, std::move(dm_auth),
+      install_attributes_->GetDeviceId(),
       EnrollmentRequisitionManager::GetDeviceRequisition(),
       EnrollmentRequisitionManager::GetSubOrganization(),
       base::BindOnce(&DeviceCloudPolicyInitializer::EnrollmentCompleted,
@@ -310,7 +311,7 @@
   // DeviceDMToken callback is empty here because for device policies this
   // DMToken is already provided in the policy fetch requests.
   return CreateDeviceCloudPolicyClientAsh(
-      statistics_provider_, signing_service_.get(), device_management_service,
+      statistics_provider_, device_management_service,
       system_url_loader_factory_for_testing_
           ? system_url_loader_factory_for_testing_
           : g_browser_process->shared_url_loader_factory(),
diff --git a/chrome/browser/ash/policy/enrollment/enrollment_handler.cc b/chrome/browser/ash/policy/enrollment/enrollment_handler.cc
index 6c25ba7..37814f9 100644
--- a/chrome/browser/ash/policy/enrollment/enrollment_handler.cc
+++ b/chrome/browser/ash/policy/enrollment/enrollment_handler.cc
@@ -34,6 +34,7 @@
 #include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/upstart/upstart_client.h"
 #include "components/policy/core/common/cloud/dm_auth.h"
+#include "components/policy/core/common/cloud/signing_service.h"
 #include "components/policy/proto/chrome_device_policy.pb.h"
 #include "components/policy/proto/device_management_backend.pb.h"
 #include "components/prefs/pref_service.h"
@@ -221,6 +222,7 @@
     chromeos::InstallAttributes* install_attributes,
     ServerBackedStateKeysBroker* state_keys_broker,
     chromeos::attestation::AttestationFlow* attestation_flow,
+    SigningService* signing_service,
     std::unique_ptr<CloudPolicyClient> client,
     scoped_refptr<base::SequencedTaskRunner> background_task_runner,
     ActiveDirectoryJoinDelegate* ad_join_delegate,
@@ -234,6 +236,7 @@
       install_attributes_(install_attributes),
       state_keys_broker_(state_keys_broker),
       attestation_flow_(attestation_flow),
+      signing_service_(signing_service),
       client_(std::move(client)),
       background_task_runner_(background_task_runner),
       ad_join_delegate_(ad_join_delegate),
@@ -485,7 +488,7 @@
   if (status == chromeos::attestation::ATTESTATION_SUCCESS) {
     client_->RegisterWithCertificate(*register_params_, client_id_,
                                      dm_auth_.Clone(), pem_certificate_chain,
-                                     sub_organization_);
+                                     sub_organization_, signing_service_);
   } else {
     ReportResult(EnrollmentStatus::ForStatus(
         EnrollmentStatus::REGISTRATION_CERT_FETCH_FAILED));
diff --git a/chrome/browser/ash/policy/enrollment/enrollment_handler.h b/chrome/browser/ash/policy/enrollment/enrollment_handler.h
index 9b1e4d6..ed6842d 100644
--- a/chrome/browser/ash/policy/enrollment/enrollment_handler.h
+++ b/chrome/browser/ash/policy/enrollment/enrollment_handler.h
@@ -8,12 +8,13 @@
 #include <memory>
 #include <string>
 
+#include "base/callback.h"
+#include "base/callback_forward.h"
 #include "base/compiler_specific.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
 #include "chrome/browser/ash/policy/core/device_cloud_policy_validator.h"
-#include "chrome/browser/ash/policy/enrollment/device_cloud_policy_initializer.h"
 #include "chrome/browser/ash/policy/enrollment/enrollment_config.h"
 #include "chrome/browser/policy/device_account_initializer.h"
 #include "chromeos/dbus/authpolicy/authpolicy_client.h"
@@ -42,7 +43,9 @@
 class ActiveDirectoryJoinDelegate;
 class DeviceCloudPolicyStoreAsh;
 class DMTokenStorage;
+class EnrollmentStatus;
 class ServerBackedStateKeysBroker;
+class SigningService;
 
 // Implements the logic that establishes enterprise enrollment for Chromium OS
 // devices. The process is as follows:
@@ -59,7 +62,7 @@
                           public CloudPolicyStore::Observer,
                           public DeviceAccountInitializer::Delegate {
  public:
-  using EnrollmentCallback = DeviceCloudPolicyInitializer::EnrollmentCallback;
+  using EnrollmentCallback = base::OnceCallback<void(EnrollmentStatus)>;
 
   // |store| and |install_attributes| must remain valid for the life time of the
   // enrollment handler.
@@ -68,6 +71,7 @@
       chromeos::InstallAttributes* install_attributes,
       ServerBackedStateKeysBroker* state_keys_broker,
       chromeos::attestation::AttestationFlow* attestation_flow,
+      SigningService* signing_service,
       std::unique_ptr<CloudPolicyClient> client,
       scoped_refptr<base::SequencedTaskRunner> background_task_runner,
       ActiveDirectoryJoinDelegate* ad_join_delegate,
@@ -210,6 +214,7 @@
   chromeos::InstallAttributes* install_attributes_;
   ServerBackedStateKeysBroker* state_keys_broker_;
   chromeos::attestation::AttestationFlow* attestation_flow_;
+  SigningService* signing_service_;
   std::unique_ptr<CloudPolicyClient> client_;
   scoped_refptr<base::SequencedTaskRunner> background_task_runner_;
   ActiveDirectoryJoinDelegate* ad_join_delegate_ = nullptr;
diff --git a/chrome/browser/ash/policy/enrollment/fake_device_cloud_policy_initializer.cc b/chrome/browser/ash/policy/enrollment/fake_device_cloud_policy_initializer.cc
deleted file mode 100644
index 30785759..0000000
--- a/chrome/browser/ash/policy/enrollment/fake_device_cloud_policy_initializer.cc
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/ash/policy/enrollment/fake_device_cloud_policy_initializer.h"
-
-#include <memory>
-
-#include "base/memory/ref_counted.h"
-#include "base/sequenced_task_runner.h"
-#include "chromeos/attestation/mock_attestation_flow.h"
-#include "components/policy/core/common/cloud/device_management_service.h"
-#include "components/policy/core/common/cloud/dm_auth.h"
-
-namespace policy {
-
-FakeDeviceCloudPolicyInitializer::FakeDeviceCloudPolicyInitializer()
-    : DeviceCloudPolicyInitializer(
-          nullptr,  // local_state
-          nullptr,  // enterprise_service
-          // background_task_runner
-          scoped_refptr<base::SequencedTaskRunner>(nullptr),
-          nullptr,  // install_attributes
-          nullptr,  // state_keys_broker
-          nullptr,  // device_store
-          nullptr,  // policy_manager
-          std::make_unique<chromeos::attestation::MockAttestationFlow>(),
-          nullptr),  // statistics_provider
-      was_start_enrollment_called_(false),
-      enrollment_status_(
-          EnrollmentStatus::ForStatus(EnrollmentStatus::SUCCESS)) {}
-
-FakeDeviceCloudPolicyInitializer::~FakeDeviceCloudPolicyInitializer() = default;
-
-void FakeDeviceCloudPolicyInitializer::Init() {}
-
-void FakeDeviceCloudPolicyInitializer::Shutdown() {}
-
-void FakeDeviceCloudPolicyInitializer::PrepareEnrollment(
-    DeviceManagementService* device_management_service,
-    ActiveDirectoryJoinDelegate* ad_join_delegate,
-    const EnrollmentConfig& enrollment_config,
-    DMAuth auth,
-    EnrollmentCallback enrollment_callback) {
-  enrollment_callback_ = std::move(enrollment_callback);
-}
-
-void FakeDeviceCloudPolicyInitializer::StartEnrollment() {
-  if (enrollment_callback_)
-    std::move(enrollment_callback_).Run(enrollment_status_);
-  was_start_enrollment_called_ = true;
-}
-
-}  // namespace policy
diff --git a/chrome/browser/ash/policy/enrollment/fake_device_cloud_policy_initializer.h b/chrome/browser/ash/policy/enrollment/fake_device_cloud_policy_initializer.h
deleted file mode 100644
index f073122c..0000000
--- a/chrome/browser/ash/policy/enrollment/fake_device_cloud_policy_initializer.h
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2014 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.
-
-#ifndef CHROME_BROWSER_ASH_POLICY_ENROLLMENT_FAKE_DEVICE_CLOUD_POLICY_INITIALIZER_H_
-#define CHROME_BROWSER_ASH_POLICY_ENROLLMENT_FAKE_DEVICE_CLOUD_POLICY_INITIALIZER_H_
-
-#include "base/compiler_specific.h"
-#include "base/macros.h"
-#include "chrome/browser/ash/policy/enrollment/device_cloud_policy_initializer.h"
-#include "chrome/browser/policy/enrollment_status.h"
-#include "components/policy/core/common/cloud/cloud_policy_constants.h"
-#include "components/policy/core/common/cloud/dm_auth.h"
-
-namespace policy {
-
-class DeviceManagementService;
-
-class FakeDeviceCloudPolicyInitializer : public DeviceCloudPolicyInitializer {
- public:
-  FakeDeviceCloudPolicyInitializer();
-  ~FakeDeviceCloudPolicyInitializer() override;
-
-  void Init() override;
-  void Shutdown() override;
-
-  void PrepareEnrollment(DeviceManagementService* device_management_service,
-                         ActiveDirectoryJoinDelegate* ad_join_delegate,
-                         const EnrollmentConfig& enrollment_config,
-                         DMAuth auth,
-                         EnrollmentCallback enrollment_callback) override;
-
-  void StartEnrollment() override;
-
-  bool was_start_enrollment_called() const {
-    return was_start_enrollment_called_;
-  }
-
-  void set_enrollment_status(EnrollmentStatus status) {
-    enrollment_status_ = status;
-  }
-
- private:
-  bool was_start_enrollment_called_;
-  EnrollmentStatus enrollment_status_;
-  EnrollmentCallback enrollment_callback_;
-
-  DISALLOW_COPY_AND_ASSIGN(FakeDeviceCloudPolicyInitializer);
-};
-
-}  // namespace policy
-
-#endif  // CHROME_BROWSER_ASH_POLICY_ENROLLMENT_FAKE_DEVICE_CLOUD_POLICY_INITIALIZER_H_
diff --git a/chrome/browser/ash/policy/remote_commands/crd_connection_observer.h b/chrome/browser/ash/policy/remote_commands/crd_connection_observer.h
new file mode 100644
index 0000000..1868c9c
--- /dev/null
+++ b/chrome/browser/ash/policy/remote_commands/crd_connection_observer.h
@@ -0,0 +1,27 @@
+// Copyright 2021 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.
+
+#ifndef CHROME_BROWSER_ASH_POLICY_REMOTE_COMMANDS_CRD_CONNECTION_OBSERVER_H_
+#define CHROME_BROWSER_ASH_POLICY_REMOTE_COMMANDS_CRD_CONNECTION_OBSERVER_H_
+
+#include "base/observer_list_types.h"
+namespace policy {
+
+// Observer that will be informed when a CRD connection is established, or
+// fails to be established.
+class CrdConnectionObserver : public base::CheckedObserver {
+ public:
+  CrdConnectionObserver() = default;
+  ~CrdConnectionObserver() override = default;
+
+  // Called when the host user rejects the CRD connection.
+  virtual void OnConnectionRejected() = 0;
+
+  // Called when the CRD connection was successfully opened.
+  virtual void OnConnectionEstablished() = 0;
+};
+
+}  // namespace policy
+
+#endif  // CHROME_BROWSER_ASH_POLICY_REMOTE_COMMANDS_CRD_CONNECTION_OBSERVER_H_
diff --git a/chrome/browser/ash/policy/remote_commands/crd_host_delegate.cc b/chrome/browser/ash/policy/remote_commands/crd_host_delegate.cc
index 970aeed..601166f7 100644
--- a/chrome/browser/ash/policy/remote_commands/crd_host_delegate.cc
+++ b/chrome/browser/ash/policy/remote_commands/crd_host_delegate.cc
@@ -4,10 +4,13 @@
 
 #include "chrome/browser/ash/policy/remote_commands/crd_host_delegate.h"
 
+#include <string>
+
 #include "base/bind.h"
 #include "base/json/json_reader.h"
 #include "base/json/json_writer.h"
 #include "base/threading/thread_task_runner_handle.h"
+#include "chrome/browser/ash/policy/remote_commands/crd_connection_observer.h"
 #include "chrome/browser/ash/policy/remote_commands/crd_logging.h"
 #include "chrome/browser/browser_process.h"
 #include "content/public/browser/browser_task_traits.h"
@@ -16,6 +19,7 @@
 #include "google_apis/gaia/gaia_constants.h"
 #include "remoting/host/it2me/it2me_constants.h"
 #include "remoting/host/it2me/it2me_native_messaging_host_chromeos.h"
+#include "remoting/protocol/errors.h"
 
 namespace policy {
 
@@ -40,18 +44,18 @@
   }
 };
 
-std::string FormatErrorMessage(const std::string& error_state,
-                               const base::Value& message) {
-  if (error_state == remoting::kHostStateDomainError) {
-    return "Invalid domain";
-  } else {
-    const std::string* error_code =
-        message.FindStringKey(remoting::kErrorMessageCode);
-    if (error_code)
-      return *error_code;
-    else
-      return "Unknown Error";
-  }
+bool IsConnectionRejected(const std::string& disconnect_reason) {
+  return (disconnect_reason ==
+          remoting::protocol::ErrorCodeToString(
+              remoting::protocol::ErrorCode::SESSION_REJECTED));
+}
+
+std::string FindStringKeyOrDefault(
+    const base::Value& dictionary,
+    const std::string& key_name,
+    const std::string& default_value = "<missing-key>") {
+  const std::string* result = dictionary.FindStringKey(key_name);
+  return result ? *result : default_value;
 }
 
 }  // namespace
@@ -67,6 +71,10 @@
 
 CRDHostDelegate::~CRDHostDelegate() = default;
 
+void CRDHostDelegate::AddConnectionObserver(CrdConnectionObserver* observer) {
+  connection_observers_.AddObserver(observer);
+}
+
 bool CRDHostDelegate::HasActiveSession() const {
   return host_ != nullptr;
 }
@@ -130,51 +138,57 @@
     return;
   }
 
-  const std::string* type_pointer =
-      message->FindStringKey(remoting::kMessageType);
-  if (!type_pointer) {
+  const std::string* type = message->FindStringKey(remoting::kMessageType);
+  if (!type) {
     OnProtocolBroken("Message without type");
     return;
   }
-  const std::string& type = *type_pointer;
 
+  HandleNativeHostMessage(*type, *message);
+}
+
+void CRDHostDelegate::HandleNativeHostMessage(const std::string& type,
+                                              const base::Value& message) {
   if (type == remoting::kHelloResponse) {
     OnHelloResponse();
-    return;
   } else if (type == remoting::kConnectResponse) {
     //  Ok, just ignore.
-    return;
   } else if (type == remoting::kDisconnectResponse) {
     OnDisconnectResponse();
-    return;
-  } else if (type == remoting::kHostStateChangedMessage ||
-             type == remoting::kErrorMessage) {
+  } else if (type == remoting::kErrorMessage) {
+    OnConnectionError(
+        FindStringKeyOrDefault(message, remoting::kErrorMessageCode));
+  } else if (type == remoting::kHostStateChangedMessage) {
     //  Handle CRD host state changes
-    const std::string* state_pointer = message->FindStringKey(remoting::kState);
-    if (!state_pointer) {
+    const std::string* state = message.FindStringKey(remoting::kState);
+    if (!state) {
       OnProtocolBroken("No state in message");
       return;
     }
-    const std::string& state = *state_pointer;
-
-    if (state == remoting::kHostStateReceivedAccessCode) {
-      OnStateReceivedAccessCode(*message);
-    } else if (state == remoting::kHostStateConnected) {
-      OnStateRemoteConnected(*message);
-    } else if (state == remoting::kHostStateDisconnected) {
-      OnStateRemoteDisconnected();
-    } else if (state == remoting::kHostStateError ||
-               state == remoting::kHostStateDomainError) {
-      OnStateError(state, *message);
-    } else if (state == remoting::kHostStateStarting ||
-               state == remoting::kHostStateRequestedAccessCode) {
-      //  Just ignore these states.
-    } else {
-      CRD_LOG(WARNING) << "Unhandled state :" << type;
-    }
-    return;
+    HandleNativeHostStateChangeMessage(*state, message);
+  } else {
+    CRD_LOG(WARNING) << "Unknown message type: " << type;
   }
-  CRD_LOG(WARNING) << "Unknown message type: " << type;
+}
+
+void CRDHostDelegate::HandleNativeHostStateChangeMessage(
+    const std::string& state,
+    const base::Value& message) {
+  if (state == remoting::kHostStateReceivedAccessCode) {
+    OnStateReceivedAccessCode(message);
+  } else if (state == remoting::kHostStateConnected) {
+    OnStateRemoteConnected(message);
+  } else if (state == remoting::kHostStateDisconnected) {
+    OnStateRemoteDisconnected(
+        FindStringKeyOrDefault(message, remoting::kDisconnectReason));
+  } else if (state == remoting::kHostStateDomainError) {
+    OnConnectionError(state);
+  } else if (state == remoting::kHostStateStarting ||
+             state == remoting::kHostStateRequestedAccessCode) {
+    //  Just ignore these states.
+  } else {
+    CRD_LOG(WARNING) << "Unhandled state: " << state;
+  }
 }
 
 void CRDHostDelegate::OnHelloResponse() {
@@ -191,14 +205,13 @@
   ShutdownHost();
 }
 
-void CRDHostDelegate::OnStateError(const std::string& error_state,
-                                   const base::Value& message) {
+void CRDHostDelegate::OnConnectionError(const std::string& error_reason) {
   // Notify callback if command is still running.
   if (command_awaiting_crd_access_code_) {
     command_awaiting_crd_access_code_ = false;
     std::move(error_callback_)
         .Run(DeviceCommandStartCRDSessionJob::FAILURE_CRD_HOST_ERROR,
-             "CRD State Error: " + FormatErrorMessage(error_state, message));
+             "CRD Connection Error: " + error_reason);
     code_success_callback_.Reset();
   }
   // Shut down host, if any.
@@ -206,21 +219,33 @@
 }
 
 void CRDHostDelegate::OnStateRemoteConnected(const base::Value& message) {
+  for (auto& observer : connection_observers_)
+    observer.OnConnectionEstablished();
+
   remote_connected_ = true;
+
   // TODO(antrim): set up watchdog timer (session duration).
   const std::string* client = message.FindStringKey(remoting::kClient);
   if (client)
     CRD_DVLOG(1) << "Remote connection by " << *client;
 }
 
-void CRDHostDelegate::OnStateRemoteDisconnected() {
+void CRDHostDelegate::OnStateRemoteDisconnected(
+    const std::string& disconnect_reason) {
   // There could be a connection attempt that was not successful, we will
   // receive "disconnected" message without actually receiving "connected".
   if (!remote_connected_) {
-    CRD_DVLOG(1) << "Received disconnect out-of-order before connect";
+    CRD_DVLOG(1) << "Connection failed with reason: " << disconnect_reason;
+
+    if (IsConnectionRejected(disconnect_reason)) {
+      for (auto& observer : connection_observers_)
+        observer.OnConnectionRejected();
+    }
     return;
   }
   remote_connected_ = false;
+
+  CRD_DVLOG(1) << "Remote host has disconnected";
   // Remote has disconnected, time to send "disconnect" that would result
   // in shutting down the host.
   base::Value params(base::Value::Type::DICTIONARY);
@@ -230,10 +255,10 @@
 void CRDHostDelegate::OnStateReceivedAccessCode(const base::Value& message) {
   if (!command_awaiting_crd_access_code_) {
     if (!remote_connected_) {
-      // We have already sent the access code back to the server which initiated
-      // this CRD session through a remote command, and we can not send a new
-      // access code. Assuming that the old access code is no longer valid, we
-      // can only terminate the current CRD session.
+      // We have already sent the access code back to the server which
+      // initiated this CRD session through a remote command, and we can not
+      // send a new access code. Assuming that the old access code is no
+      // longer valid, we can only terminate the current CRD session.
       base::Value params(base::Value::Type::DICTIONARY);
       SendMessageToHost(remoting::kDisconnectMessage, params);
     }
diff --git a/chrome/browser/ash/policy/remote_commands/crd_host_delegate.h b/chrome/browser/ash/policy/remote_commands/crd_host_delegate.h
index d09364fd..f0d3071 100644
--- a/chrome/browser/ash/policy/remote_commands/crd_host_delegate.h
+++ b/chrome/browser/ash/policy/remote_commands/crd_host_delegate.h
@@ -10,6 +10,7 @@
 
 #include "base/callback_forward.h"
 #include "base/macros.h"
+#include "base/observer_list.h"
 #include "base/time/time.h"
 #include "base/values.h"
 #include "chrome/browser/ash/policy/remote_commands/device_command_start_crd_session_job.h"
@@ -17,6 +18,8 @@
 
 namespace policy {
 
+class CrdConnectionObserver;
+
 // Delegate that will start a session with the CRD native host.
 // Will keep the session alive and active as long as this class lives.
 // Deleting this class object will forcefully interrupt the active CRD session.
@@ -43,12 +46,22 @@
       DeviceCommandStartCRDSessionJob::AccessCodeCallback success_callback,
       DeviceCommandStartCRDSessionJob::ErrorCallback error_callback) override;
 
+  // Set a connection observer, which will be informed when either:
+  //   - The CRD connection is successfully established, or
+  //   - The CRD connection failed to be established.
+  void AddConnectionObserver(CrdConnectionObserver* observer);
+
  private:
   // extensions::NativeMessageHost::Client:
   // Invoked when native host sends a message
   void PostMessageFromNativeHost(const std::string& message) override;
   void CloseChannel(const std::string& error_message) override;
 
+  void HandleNativeHostMessage(const std::string& type,
+                               const base::Value& message);
+  void HandleNativeHostStateChangeMessage(const std::string& state,
+                                          const base::Value& message);
+
   // Sends message to host in separate task.
   void SendMessageToHost(const std::string& type, base::Value& params);
   // Actually sends message to host.
@@ -63,9 +76,9 @@
   void OnHelloResponse();
   void OnDisconnectResponse();
 
-  void OnStateError(const std::string& error_state, const base::Value& message);
+  void OnConnectionError(const std::string& error_reason);
   void OnStateRemoteConnected(const base::Value& message);
-  void OnStateRemoteDisconnected();
+  void OnStateRemoteDisconnected(const std::string& disconnect_reason);
   void OnStateReceivedAccessCode(const base::Value& message);
 
   std::unique_ptr<NativeMessageHostFactory> factory_;
@@ -85,6 +98,9 @@
   // True if remote session was established.
   bool remote_connected_;
 
+  // Owned by the same |DeviceCommandsFactoryChromeOS| as |this|.
+  base::ObserverList<CrdConnectionObserver> connection_observers_;
+
   base::WeakPtrFactory<CRDHostDelegate> weak_factory_{this};
 
   DISALLOW_COPY_AND_ASSIGN(CRDHostDelegate);
diff --git a/chrome/browser/ash/policy/remote_commands/crd_host_delegate_unittest.cc b/chrome/browser/ash/policy/remote_commands/crd_host_delegate_unittest.cc
index 9bab954..14b001e0 100644
--- a/chrome/browser/ash/policy/remote_commands/crd_host_delegate_unittest.cc
+++ b/chrome/browser/ash/policy/remote_commands/crd_host_delegate_unittest.cc
@@ -15,6 +15,7 @@
 #include "base/test/task_environment.h"
 #include "base/test/test_future.h"
 #include "base/threading/thread_task_runner_handle.h"
+#include "chrome/browser/ash/policy/remote_commands/crd_connection_observer.h"
 #include "remoting/host/it2me/it2me_constants.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -53,6 +54,8 @@
 #define EXPECT_TYPE(dictionary, value) \
   EXPECT_STRING_KEY(dictionary, remoting::kMessageType, value)
 
+#define EXPECT_NO_CALLS(args...) EXPECT_CALL(args).Times(0);
+
 // Builder class that constructs a message to send to the native host.
 class Message {
  public:
@@ -62,18 +65,18 @@
   ~Message() = default;
 
   Message& WithType(const std::string& type) {
-    return AddString(remoting::kMessageType, type);
+    return WithString(remoting::kMessageType, type);
   }
 
   Message& WithState(const std::string& state) {
-    return AddString(remoting::kState, state);
+    return WithString(remoting::kState, state);
   }
 
-  Message& AddString(const std::string& key, const std::string& value) {
+  Message& WithString(const std::string& key, const std::string& value) {
     result.SetStringKey(key, value);
     return *this;
   }
-  Message& AddInt(const std::string& key, int value) {
+  Message& WithInt(const std::string& key, int value) {
     result.SetIntKey(key, value);
     return *this;
   }
@@ -286,6 +289,18 @@
   base::WeakPtrFactory<Response> weak_factory_{this};
 };
 
+class ConnectionObserverMock : public CrdConnectionObserver {
+ public:
+  ConnectionObserverMock() = default;
+  ConnectionObserverMock(const ConnectionObserverMock&) = delete;
+  ConnectionObserverMock& operator=(const ConnectionObserverMock&) = delete;
+  ~ConnectionObserverMock() override = default;
+
+  // CRDConnectionObserver  implementation:
+  MOCK_METHOD(void, OnConnectionRejected, ());
+  MOCK_METHOD(void, OnConnectionEstablished, ());
+};
+
 }  // namespace
 
 class CRDHostDelegateTest : public ::testing::Test {
@@ -311,10 +326,16 @@
   CRDHostDelegate& delegate() { return delegate_; }
   NativeMessageHostStub& host() { return host_; }
 
+  ConnectionObserverMock& InstallConnectionObserverMock() {
+    delegate_.AddConnectionObserver(&connection_observer_);
+    return connection_observer_;
+  }
+
  private:
   base::test::SingleThreadTaskEnvironment environment_;
 
   NativeMessageHostStub host_;
+  ::testing::StrictMock<ConnectionObserverMock> connection_observer_;
   CRDHostDelegate delegate_{
       std::make_unique<NativeMessageHostFactoryStub>(&host_)};
 
@@ -460,8 +481,8 @@
   host().PostMessage(Message()
                          .WithType(remoting::kHostStateChangedMessage)
                          .WithState(remoting::kHostStateReceivedAccessCode)
-                         .AddString(remoting::kAccessCode, "<the-access-code>")
-                         .AddInt(remoting::kAccessCodeLifetime, 123));
+                         .WithString(remoting::kAccessCode, "<the-access-code>")
+                         .WithInt(remoting::kAccessCodeLifetime, 123));
   RunUntilIdle();
 
   EXPECT_EQ(response().access_code(), "<the-access-code>");
@@ -475,8 +496,8 @@
       Message()
           .WithType(remoting::kHostStateChangedMessage)
           .WithState(remoting::kHostStateReceivedAccessCode)
-          .AddString(remoting::kAccessCode, "<the-first-access-code>")
-          .AddInt(remoting::kAccessCodeLifetime, 123));
+          .WithString(remoting::kAccessCode, "<the-first-access-code>")
+          .WithInt(remoting::kAccessCodeLifetime, 123));
   RunUntilIdle();
 
   EXPECT_EQ(response().access_code(), "<the-first-access-code>");
@@ -485,8 +506,8 @@
       Message()
           .WithType(remoting::kHostStateChangedMessage)
           .WithState(remoting::kHostStateReceivedAccessCode)
-          .AddString(remoting::kAccessCode, "<the-second-access-code>")
-          .AddInt(remoting::kAccessCodeLifetime, 123));
+          .WithString(remoting::kAccessCode, "<the-second-access-code>")
+          .WithInt(remoting::kAccessCodeLifetime, 123));
 
   host().WaitForMessageOfType(remoting::kDisconnectMessage);
 }
@@ -508,9 +529,11 @@
                          .WithType(remoting::kHostStateChangedMessage)
                          .WithState(remoting::kHostStateConnected));
 
-  host().PostMessage(Message()
-                         .WithType(remoting::kHostStateChangedMessage)
-                         .WithState(remoting::kHostStateDisconnected));
+  host().PostMessage(
+      Message()
+          .WithType(remoting::kHostStateChangedMessage)
+          .WithState(remoting::kHostStateDisconnected)
+          .WithString(remoting::kDisconnectReason, "<the-disconnect-reason>"));
 
   host().WaitForMessageOfType(remoting::kDisconnectMessage);
 }
@@ -519,9 +542,11 @@
   StartCRDHostAndGetCode();
   host().HandleHandshake();
 
-  host().PostMessage(Message()
-                         .WithType(remoting::kHostStateChangedMessage)
-                         .WithState(remoting::kHostStateDisconnected));
+  host().PostMessage(
+      Message()
+          .WithType(remoting::kHostStateChangedMessage)
+          .WithState(remoting::kHostStateDisconnected)
+          .WithString(remoting::kDisconnectReason, "<the-disconnect-reason>"));
   RunUntilIdle();
 
   // The disconnect should be ignored and the host should just keep running.
@@ -537,10 +562,13 @@
   host().PostMessage(Message()
                          .WithType(remoting::kHostStateChangedMessage)
                          .WithState(remoting::kHostStateReceivedAccessCode)
-                         .AddString(remoting::kAccessCode, "<the-access-code>")
-                         .AddInt(remoting::kAccessCodeLifetime, 123));
+                         .WithString(remoting::kAccessCode, "<the-access-code>")
+                         .WithInt(remoting::kAccessCodeLifetime, 123));
 
-  host().PostMessage(Message().WithType(remoting::kDisconnectResponse));
+  host().PostMessage(
+      Message()
+          .WithType(remoting::kDisconnectResponse)
+          .WithString(remoting::kDisconnectReason, "<the-disconnect-reason>"));
   RunUntilIdle();
 
   EXPECT_TRUE(host().is_destroyed());
@@ -552,13 +580,12 @@
 
   host().PostMessage(
       Message()
-          .WithType(remoting::kHostStateChangedMessage)
-          .WithState(remoting::kHostStateError)
-          .AddString(remoting::kErrorMessageCode, "<the-error-code>"));
+          .WithType(remoting::kErrorMessage)
+          .WithString(remoting::kErrorMessageCode, "<the-error-code>"));
   RunUntilIdle();
 
   EXPECT_THAT(response().error_message(),
-              HasSubstr("CRD State Error: <the-error-code>"));
+              HasSubstr("CRD Connection Error: <the-error-code>"));
 
   EXPECT_TRUE(host().is_destroyed());
 }
@@ -573,7 +600,7 @@
   RunUntilIdle();
 
   EXPECT_THAT(response().error_message(),
-              HasSubstr("CRD State Error: Invalid domain"));
+              HasSubstr("CRD Connection Error: INVALID_DOMAIN_ERROR"));
 
   EXPECT_TRUE(host().is_destroyed());
 }
@@ -598,4 +625,51 @@
   }
 }
 
+TEST_F(CRDHostDelegateTest, ShouldReportSuccessfullAttemptsToLockoutStrategy) {
+  ConnectionObserverMock& connection_observer = InstallConnectionObserverMock();
+
+  StartCRDHostAndGetCode();
+  host().HandleHandshake();
+
+  EXPECT_CALL(connection_observer, OnConnectionEstablished);
+
+  host().PostMessage(Message()
+                         .WithType(remoting::kHostStateChangedMessage)
+                         .WithState(remoting::kHostStateConnected));
+  RunUntilIdle();
+}
+
+TEST_F(CRDHostDelegateTest, ShouldReportRejectedAttemptsToLockoutStrategy) {
+  ConnectionObserverMock& connection_observer = InstallConnectionObserverMock();
+
+  StartCRDHostAndGetCode();
+  host().HandleHandshake();
+
+  EXPECT_CALL(connection_observer, OnConnectionRejected());
+
+  host().PostMessage(
+      Message()
+          .WithType(remoting::kHostStateChangedMessage)
+          .WithState(remoting::kHostStateDisconnected)
+          .WithString(remoting::kDisconnectReason, "SESSION_REJECTED"));
+  RunUntilIdle();
+}
+
+TEST_F(CRDHostDelegateTest,
+       ShouldNotReportOtherConnectionFailedReasonsToLockoutStrategy) {
+  ConnectionObserverMock& connection_observer = InstallConnectionObserverMock();
+
+  StartCRDHostAndGetCode();
+  host().HandleHandshake();
+
+  EXPECT_NO_CALLS(connection_observer, OnConnectionRejected());
+
+  host().PostMessage(
+      Message()
+          .WithType(remoting::kHostStateChangedMessage)
+          .WithState(remoting::kHostStateDisconnected)
+          .WithString(remoting::kDisconnectReason, "other disconnect reason"));
+  RunUntilIdle();
+}
+
 }  // namespace policy
diff --git a/chrome/browser/ash/policy/remote_commands/crd_lockout_strategy.cc b/chrome/browser/ash/policy/remote_commands/crd_lockout_strategy.cc
new file mode 100644
index 0000000..26ac623
--- /dev/null
+++ b/chrome/browser/ash/policy/remote_commands/crd_lockout_strategy.cc
@@ -0,0 +1,40 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ash/policy/remote_commands/crd_lockout_strategy.h"
+#include "chrome/browser/ash/policy/remote_commands/crd_logging.h"
+
+namespace policy {
+
+// constexpr static
+const base::TimeDelta CrdFixedTimeoutLockoutStrategy::kLockoutDuration;
+const int CrdFixedTimeoutLockoutStrategy::kNumRejectedAttemptsAllowed;
+
+void CrdFixedTimeoutLockoutStrategy::OnConnectionRejected() {
+  num_rejected_connections_++;
+
+  CRD_DVLOG(3) << "There are " << num_rejected_connections_
+               << " consecutive rejected attempts";
+
+  DCHECK(num_rejected_connections_ <= kNumRejectedAttemptsAllowed);
+
+  if (num_rejected_connections_ == kNumRejectedAttemptsAllowed) {
+    time_until_which_attempts_are_blocked_ =
+        base::Time::Now() + kLockoutDuration;
+    num_rejected_connections_ = 0;
+
+    CRD_DVLOG(3) << "All further attempts are locked until "
+                 << time_until_which_attempts_are_blocked_;
+  }
+}
+
+void CrdFixedTimeoutLockoutStrategy::OnConnectionEstablished() {
+  num_rejected_connections_ = 0;
+}
+
+bool CrdFixedTimeoutLockoutStrategy::CanAttemptConnection() const {
+  return base::Time::Now() > time_until_which_attempts_are_blocked_;
+}
+
+}  // namespace policy
diff --git a/chrome/browser/ash/policy/remote_commands/crd_lockout_strategy.h b/chrome/browser/ash/policy/remote_commands/crd_lockout_strategy.h
new file mode 100644
index 0000000..1e87ef7
--- /dev/null
+++ b/chrome/browser/ash/policy/remote_commands/crd_lockout_strategy.h
@@ -0,0 +1,57 @@
+// Copyright 2021 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.
+
+#ifndef CHROME_BROWSER_ASH_POLICY_REMOTE_COMMANDS_CRD_LOCKOUT_STRATEGY_H_
+#define CHROME_BROWSER_ASH_POLICY_REMOTE_COMMANDS_CRD_LOCKOUT_STRATEGY_H_
+
+#include "base/time/time.h"
+#include "chrome/browser/ash/policy/remote_commands/crd_connection_observer.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
+
+namespace policy {
+
+// Helper class that decides when the admin is locked out from attempting to
+// start a remote CRD session.
+// This prevents the admin from spamming the host user.
+class CrdLockoutStrategy : public CrdConnectionObserver {
+ public:
+  CrdLockoutStrategy() = default;
+  CrdLockoutStrategy(const CrdLockoutStrategy&) = delete;
+  CrdLockoutStrategy& operator=(const CrdLockoutStrategy&) = delete;
+  ~CrdLockoutStrategy() override = default;
+
+  // Returns true if the admin can attempt a CRD command, or false if a timeout
+  // is in effect.
+  virtual bool CanAttemptConnection() const = 0;
+};
+
+// Simple lockout strategy that blocks attempts for a fixed time after a
+// given number of rejected attempts.
+class CrdFixedTimeoutLockoutStrategy : public CrdLockoutStrategy {
+ public:
+  constexpr static base::TimeDelta kLockoutDuration =
+      base::TimeDelta::FromMinutes(5);
+  constexpr static int kNumRejectedAttemptsAllowed = 3;
+
+  CrdFixedTimeoutLockoutStrategy() = default;
+  CrdFixedTimeoutLockoutStrategy(const CrdFixedTimeoutLockoutStrategy&) =
+      delete;
+  CrdFixedTimeoutLockoutStrategy& operator=(
+      const CrdFixedTimeoutLockoutStrategy&) = delete;
+  ~CrdFixedTimeoutLockoutStrategy() override = default;
+
+  // CrdLockoutStrategy implementation:
+  void OnConnectionRejected() override;
+  void OnConnectionEstablished() override;
+  bool CanAttemptConnection() const override;
+
+ private:
+  int num_rejected_connections_ = 0;
+
+  base::Time time_until_which_attempts_are_blocked_ = base::Time::Min();
+};
+
+}  // namespace policy
+
+#endif  // CHROME_BROWSER_ASH_POLICY_REMOTE_COMMANDS_CRD_LOCKOUT_STRATEGY_H_
diff --git a/chrome/browser/ash/policy/remote_commands/crd_lockout_strategy_unittest.cc b/chrome/browser/ash/policy/remote_commands/crd_lockout_strategy_unittest.cc
new file mode 100644
index 0000000..72949ca
--- /dev/null
+++ b/chrome/browser/ash/policy/remote_commands/crd_lockout_strategy_unittest.cc
@@ -0,0 +1,119 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ash/policy/remote_commands/crd_lockout_strategy.h"
+
+#include "base/test/task_environment.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace policy {
+
+using base::TimeDelta;
+
+class CrdFixedTimeoutLockoutStrategyTest : public ::testing::Test {
+ public:
+  CrdFixedTimeoutLockoutStrategyTest() = default;
+  CrdFixedTimeoutLockoutStrategyTest(
+      const CrdFixedTimeoutLockoutStrategyTest&) = delete;
+  CrdFixedTimeoutLockoutStrategyTest& operator=(
+      const CrdFixedTimeoutLockoutStrategyTest&) = delete;
+  ~CrdFixedTimeoutLockoutStrategyTest() override = default;
+
+  CrdFixedTimeoutLockoutStrategy& strategy() { return strategy_; }
+
+  void FastForwardBy(TimeDelta delta) { environment_.FastForwardBy(delta); }
+
+ private:
+  CrdFixedTimeoutLockoutStrategy strategy_;
+
+  base::test::SingleThreadTaskEnvironment environment_{
+      base::test::TaskEnvironment::TimeSource::MOCK_TIME};
+};
+
+TEST_F(CrdFixedTimeoutLockoutStrategyTest, ShouldAllowConnectionInitially) {
+  EXPECT_TRUE(strategy().CanAttemptConnection());
+}
+
+TEST_F(CrdFixedTimeoutLockoutStrategyTest,
+       ShouldAllowConnectionsAfterLessThan3RejectedAttempts) {
+  EXPECT_TRUE(strategy().CanAttemptConnection());
+
+  strategy().OnConnectionRejected();
+  EXPECT_TRUE(strategy().CanAttemptConnection());
+
+  strategy().OnConnectionRejected();
+  EXPECT_TRUE(strategy().CanAttemptConnection());
+}
+
+TEST_F(CrdFixedTimeoutLockoutStrategyTest,
+       ShouldBlockConnectionsAfter3RejectedAttempts) {
+  strategy().OnConnectionRejected();
+  strategy().OnConnectionRejected();
+  strategy().OnConnectionRejected();
+
+  EXPECT_FALSE(strategy().CanAttemptConnection());
+}
+
+TEST_F(CrdFixedTimeoutLockoutStrategyTest,
+       ShouldBlockConnectionsFor5MinutesAfter3RejectedAttempts) {
+  strategy().OnConnectionRejected();
+  strategy().OnConnectionRejected();
+  strategy().OnConnectionRejected();
+  EXPECT_FALSE(strategy().CanAttemptConnection());
+
+  // 4:59 later
+  FastForwardBy(TimeDelta::FromMinutes(5) - TimeDelta::FromSeconds(1));
+  EXPECT_FALSE(strategy().CanAttemptConnection());
+
+  // 5:01 later
+  FastForwardBy(TimeDelta::FromSeconds(2));
+  EXPECT_TRUE(strategy().CanAttemptConnection());
+}
+
+TEST_F(CrdFixedTimeoutLockoutStrategyTest,
+       SuccesfullConnectionShouldResetFailedConnectionCount) {
+  strategy().OnConnectionRejected();
+  strategy().OnConnectionRejected();
+  strategy().OnConnectionEstablished();
+  strategy().OnConnectionRejected();
+  strategy().OnConnectionRejected();
+
+  EXPECT_TRUE(strategy().CanAttemptConnection());
+}
+
+TEST_F(CrdFixedTimeoutLockoutStrategyTest, ShouldAlsoCountOldRejectedAttempts) {
+  strategy().OnConnectionRejected();
+  FastForwardBy(TimeDelta::FromHours(1));
+
+  strategy().OnConnectionRejected();
+  FastForwardBy(TimeDelta::FromHours(1));
+
+  strategy().OnConnectionRejected();
+
+  EXPECT_FALSE(strategy().CanAttemptConnection());
+}
+
+TEST_F(CrdFixedTimeoutLockoutStrategyTest,
+       ShouldResetRejectedAttemptCountAfterLockoutExpires) {
+  // Fail 3 times
+  strategy().OnConnectionRejected();
+  strategy().OnConnectionRejected();
+  strategy().OnConnectionRejected();
+
+  // Wait for timeout
+  FastForwardBy(TimeDelta::FromMinutes(5) + TimeDelta::FromSeconds(1));
+  EXPECT_TRUE(strategy().CanAttemptConnection());
+
+  // Fail 2 more times
+  strategy().OnConnectionRejected();
+  strategy().OnConnectionRejected();
+
+  EXPECT_TRUE(strategy().CanAttemptConnection());
+
+  // Fail 1 more time
+  strategy().OnConnectionRejected();
+  EXPECT_FALSE(strategy().CanAttemptConnection());
+}
+
+}  // namespace policy
diff --git a/chrome/browser/ash/policy/remote_commands/device_command_start_crd_session_job.cc b/chrome/browser/ash/policy/remote_commands/device_command_start_crd_session_job.cc
index 19eb920..17822d8 100644
--- a/chrome/browser/ash/policy/remote_commands/device_command_start_crd_session_job.cc
+++ b/chrome/browser/ash/policy/remote_commands/device_command_start_crd_session_job.cc
@@ -16,6 +16,7 @@
 #include "chrome/browser/ash/app_mode/arc/arc_kiosk_app_manager.h"
 #include "chrome/browser/ash/app_mode/kiosk_app_manager.h"
 #include "chrome/browser/ash/app_mode/web_app/web_kiosk_app_manager.h"
+#include "chrome/browser/ash/policy/remote_commands/crd_lockout_strategy.h"
 #include "chrome/browser/ash/policy/remote_commands/crd_logging.h"
 #include "chrome/browser/device_identity/device_oauth2_token_service.h"
 #include "chrome/browser/device_identity/device_oauth2_token_service_factory.h"
@@ -215,8 +216,12 @@
 }
 
 DeviceCommandStartCRDSessionJob::DeviceCommandStartCRDSessionJob(
-    Delegate* crd_host_delegate)
-    : delegate_(crd_host_delegate) {}
+    Delegate* crd_host_delegate,
+    CrdLockoutStrategy* lockout_strategy)
+    : delegate_(crd_host_delegate), lockout_strategy_(lockout_strategy) {
+  DCHECK(crd_host_delegate);
+  DCHECK(lockout_strategy);
+}
 
 DeviceCommandStartCRDSessionJob::~DeviceCommandStartCRDSessionJob() = default;
 
@@ -383,6 +388,11 @@
     return;
   }
 
+  if (!lockout_strategy_->CanAttemptConnection()) {
+    FinishWithError(ResultCode::FAILURE_TOO_MANY_REJECTED_ATTEMPTS, "");
+    return;
+  }
+
   if (!IsDeviceIdle()) {
     FinishWithNotIdleError();
     return;
diff --git a/chrome/browser/ash/policy/remote_commands/device_command_start_crd_session_job.h b/chrome/browser/ash/policy/remote_commands/device_command_start_crd_session_job.h
index ded52cc..47517498 100644
--- a/chrome/browser/ash/policy/remote_commands/device_command_start_crd_session_job.h
+++ b/chrome/browser/ash/policy/remote_commands/device_command_start_crd_session_job.h
@@ -17,6 +17,8 @@
 
 namespace policy {
 
+class CrdLockoutStrategy;
+
 // Remote command that would start Chrome Remote Desktop host and return auth
 // code. This command is usable only for devices running Kiosk sessions.
 class DeviceCommandStartCRDSessionJob : public RemoteCommandJob {
@@ -42,6 +44,10 @@
 
     // Failure during attempt to start CRD host and obtain CRD token.
     FAILURE_CRD_HOST_ERROR = 6,
+
+    // Failed as the host user declined the connection too many times in a row.
+    // The |CrdLockoutStrategy| controls when this happens.
+    FAILURE_TOO_MANY_REJECTED_ATTEMPTS = 7,
   };
 
   using OAuthTokenCallback = base::OnceCallback<void(const std::string&)>;
@@ -74,7 +80,8 @@
                                         ErrorCallback error_callback) = 0;
   };
 
-  explicit DeviceCommandStartCRDSessionJob(Delegate* crd_host_delegate);
+  DeviceCommandStartCRDSessionJob(Delegate* crd_host_delegate,
+                                  CrdLockoutStrategy* lockout_strategy);
   ~DeviceCommandStartCRDSessionJob() override;
 
   // RemoteCommandJob:
@@ -153,7 +160,9 @@
 
   // The Delegate is used to interact with chrome services and CRD host.
   // Owned by DeviceCommandsFactoryAsh.
-  Delegate* delegate_;
+  Delegate* const delegate_;
+  // Owned by DeviceCommandsFactoryChromeOS.
+  CrdLockoutStrategy* const lockout_strategy_;
 
   bool terminate_session_attempted_ = false;
 
diff --git a/chrome/browser/ash/policy/remote_commands/device_command_start_crd_session_unittest.cc b/chrome/browser/ash/policy/remote_commands/device_command_start_crd_session_unittest.cc
index 7e33b30..a4cc78e 100644
--- a/chrome/browser/ash/policy/remote_commands/device_command_start_crd_session_unittest.cc
+++ b/chrome/browser/ash/policy/remote_commands/device_command_start_crd_session_unittest.cc
@@ -2,6 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "chrome/browser/ash/app_mode/kiosk_app_manager.h"
 #include "chrome/browser/ash/policy/remote_commands/device_command_start_crd_session_job.h"
 
 #include <map>
@@ -20,8 +21,9 @@
 #include "base/time/time.h"
 #include "base/values.h"
 #include "chrome/browser/ash/app_mode/arc/arc_kiosk_app_manager.h"
-#include "chrome/browser/ash/app_mode/kiosk_app_manager.h"
 #include "chrome/browser/ash/app_mode/web_app/web_kiosk_app_manager.h"
+#include "chrome/browser/ash/policy/remote_commands/crd_connection_observer.h"
+#include "chrome/browser/ash/policy/remote_commands/crd_lockout_strategy.h"
 #include "chrome/browser/ash/settings/device_settings_test_helper.h"
 #include "chrome/browser/device_identity/device_oauth2_token_service.h"
 #include "chrome/browser/device_identity/device_oauth2_token_service_factory.h"
@@ -141,6 +143,24 @@
   std::move(callback).Run();
 }
 
+class StubCrdLockoutStrategy : public CrdLockoutStrategy {
+ public:
+  explicit StubCrdLockoutStrategy() = default;
+  StubCrdLockoutStrategy(const StubCrdLockoutStrategy&) = delete;
+  StubCrdLockoutStrategy& operator=(const StubCrdLockoutStrategy&) = delete;
+  ~StubCrdLockoutStrategy() override = default;
+
+  void SetCanAttemptConnection(bool value) { can_attempt_connection_ = value; }
+
+  // CrdLockoutStrategy implementation:
+  bool CanAttemptConnection() const override { return can_attempt_connection_; }
+  void OnConnectionRejected() override {}
+  void OnConnectionEstablished() override {}
+
+ private:
+  bool can_attempt_connection_ = true;
+};
+
 void StubCRDHostDelegate::StartCRDHostAndGetCode(
     const SessionParameters& parameters,
     DeviceCommandStartCRDSessionJob::AccessCodeCallback success_callback,
@@ -285,6 +305,8 @@
   StubCRDHostDelegate& crd_host_delegate() { return crd_host_delegate_; }
   DeviceCommandStartCRDSessionJob& job() { return job_; }
 
+  StubCrdLockoutStrategy& lockout_strategy() { return lockout_strategy_; }
+
  private:
   ash::FakeChromeUserManager& user_manager() { return *user_manager_; }
 
@@ -336,8 +358,9 @@
   network::TestURLLoaderFactory test_url_loader_factory_;
   TestingPrefServiceSimple local_state_;
 
+  StubCrdLockoutStrategy lockout_strategy_;
   StubCRDHostDelegate crd_host_delegate_;
-  DeviceCommandStartCRDSessionJob job_{&crd_host_delegate_};
+  DeviceCommandStartCRDSessionJob job_{&crd_host_delegate_, &lockout_strategy_};
 
   // Future value that will be populated with the result once the remote command
   // job is completed.
@@ -586,6 +609,32 @@
 }
 
 TEST_F(DeviceCommandStartCRDSessionJobTest,
+       ShouldFailIfLockoutStrategyDeclinesAttempt) {
+  LogInAsAutoLaunchedKioskAppUser();
+  SetOAuthToken(kTestOAuthToken);
+
+  lockout_strategy().SetCanAttemptConnection(false);
+
+  Result result = RunJobAndWaitForResult();
+
+  EXPECT_ERROR(
+      result,
+      DeviceCommandStartCRDSessionJob::FAILURE_TOO_MANY_REJECTED_ATTEMPTS, "");
+}
+
+TEST_F(DeviceCommandStartCRDSessionJobTest,
+       ShouldSucceedIfLockoutStrategyAcceptsAttempt) {
+  LogInAsAutoLaunchedKioskAppUser();
+  SetOAuthToken(kTestOAuthToken);
+
+  lockout_strategy().SetCanAttemptConnection(true);
+
+  Result result = RunJobAndWaitForResult();
+
+  EXPECT_SUCCESS(result);
+}
+
+TEST_F(DeviceCommandStartCRDSessionJobTest,
        ShouldFailIfWeCantFetchTheOAuthToken) {
   LogInAsAutoLaunchedKioskAppUser();
   ClearOAuthToken();
diff --git a/chrome/browser/ash/policy/remote_commands/device_commands_factory_ash.cc b/chrome/browser/ash/policy/remote_commands/device_commands_factory_ash.cc
index 27424d1..5216b5f 100644
--- a/chrome/browser/ash/policy/remote_commands/device_commands_factory_ash.cc
+++ b/chrome/browser/ash/policy/remote_commands/device_commands_factory_ash.cc
@@ -7,6 +7,7 @@
 #include "base/notreached.h"
 #include "chrome/browser/ash/policy/core/device_cloud_policy_manager_ash.h"
 #include "chrome/browser/ash/policy/remote_commands/crd_host_delegate.h"
+#include "chrome/browser/ash/policy/remote_commands/crd_lockout_strategy.h"
 #include "chrome/browser/ash/policy/remote_commands/device_command_fetch_status_job.h"
 #include "chrome/browser/ash/policy/remote_commands/device_command_get_available_routines_job.h"
 #include "chrome/browser/ash/policy/remote_commands/device_command_get_routine_update_job.h"
@@ -47,7 +48,7 @@
       return std::make_unique<DeviceCommandSetVolumeJob>();
     case em::RemoteCommand_Type_DEVICE_START_CRD_SESSION:
       return std::make_unique<DeviceCommandStartCRDSessionJob>(
-          GetCRDHostDelegate());
+          GetCRDHostDelegate(), GetCrdLockoutStrategy());
     case em::RemoteCommand_Type_DEVICE_FETCH_STATUS:
       return std::make_unique<DeviceCommandFetchStatusJob>();
     case em::RemoteCommand_Type_DEVICE_WIPE_USERS:
@@ -74,8 +75,16 @@
 CRDHostDelegate* DeviceCommandsFactoryAsh::GetCRDHostDelegate() {
   if (!crd_host_delegate_) {
     crd_host_delegate_ = std::make_unique<CRDHostDelegate>();
+    crd_host_delegate_->AddConnectionObserver(GetCrdLockoutStrategy());
   }
   return crd_host_delegate_.get();
 }
 
+CrdLockoutStrategy* DeviceCommandsFactoryAsh::GetCrdLockoutStrategy() {
+  if (!crd_lockout_strategy_)
+    crd_lockout_strategy_ = std::make_unique<CrdFixedTimeoutLockoutStrategy>();
+
+  return crd_lockout_strategy_.get();
+}
+
 }  // namespace policy
diff --git a/chrome/browser/ash/policy/remote_commands/device_commands_factory_ash.h b/chrome/browser/ash/policy/remote_commands/device_commands_factory_ash.h
index bd2ec93..b582f60 100644
--- a/chrome/browser/ash/policy/remote_commands/device_commands_factory_ash.h
+++ b/chrome/browser/ash/policy/remote_commands/device_commands_factory_ash.h
@@ -13,6 +13,7 @@
 namespace policy {
 
 class CRDHostDelegate;
+class CrdLockoutStrategy;
 class DeviceCloudPolicyManagerAsh;
 
 class DeviceCommandsFactoryAsh : public RemoteCommandsFactory {
@@ -28,9 +29,13 @@
 
  private:
   DeviceCloudPolicyManagerAsh* policy_manager_;
+  // Note: This is used by |crd_host_delegate_| so it must always outlive
+  // |crd_host_delegate_|.
+  std::unique_ptr<CrdLockoutStrategy> crd_lockout_strategy_;
   std::unique_ptr<CRDHostDelegate> crd_host_delegate_;
 
   CRDHostDelegate* GetCRDHostDelegate();
+  CrdLockoutStrategy* GetCrdLockoutStrategy();
 
   DISALLOW_COPY_AND_ASSIGN(DeviceCommandsFactoryAsh);
 };
diff --git a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc
index f0abf1b..c2bfbfb 100644
--- a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc
+++ b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc
@@ -113,6 +113,7 @@
 #include "components/password_manager/core/browser/password_manager_features_util.h"
 #include "components/password_manager/core/browser/password_store.h"
 #include "components/password_manager/core/common/password_manager_features.h"
+#include "components/payments/content/payment_manifest_web_data_service.h"
 #include "components/permissions/permission_decision_auto_blocker.h"
 #include "components/prefs/pref_service.h"
 #include "components/search_engines/template_url_service.h"
@@ -841,6 +842,18 @@
             delete_end_.is_null() ? base::Time::Max() : delete_end_,
             CreateTaskCompletionClosureForMojo(
                 TracingDataType::kHttpAuthCache));
+
+    scoped_refptr<payments::PaymentManifestWebDataService> web_data_service =
+        webdata_services::WebDataServiceWrapperFactory::
+            GetPaymentManifestWebDataServiceForBrowserContext(
+                profile_, ServiceAccessType::EXPLICIT_ACCESS);
+    if (web_data_service) {
+      web_data_service->ClearSecurePaymentConfirmationInstruments(
+          delete_begin_, delete_end_,
+          CreateTaskCompletionClosure(
+              TracingDataType::kSecurePaymentConfirmationInstruments));
+    }
+
 #if BUILDFLAG(IS_CHROMEOS_ASH)
     if (chromeos::SystemProxyManager::Get()) {
       // Sends a request to the System-proxy daemon to clear the proxy user
diff --git a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h
index cdc2126..513a64c 100644
--- a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h
+++ b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h
@@ -129,7 +129,8 @@
     kAccountPasswordsSynced = 38,
     kAccountCompromisedCredentials = 39,
     kFaviconCacheExpiration = 40,
-    kMaxValue = kFaviconCacheExpiration,
+    kSecurePaymentConfirmationInstruments = 41,
+    kMaxValue = kSecurePaymentConfirmationInstruments,
   };
 
   // Called by CreateTaskCompletionClosure().
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn
index fb1b92b..97ba0222 100644
--- a/chrome/browser/chromeos/BUILD.gn
+++ b/chrome/browser/chromeos/BUILD.gn
@@ -440,6 +440,7 @@
     "//printing",
     "//printing/mojom",
     "//remoting/host/chromeos:remoting_service",
+    "//remoting/protocol:errors",
     "//services/audio/public/cpp",
     "//services/data_decoder/public/cpp",
     "//services/device/public/cpp/usb",
@@ -2272,8 +2273,11 @@
     "../ash/policy/off_hours/off_hours_proto_parser.h",
     "../ash/policy/remote_commands/affiliated_remote_commands_invalidator.cc",
     "../ash/policy/remote_commands/affiliated_remote_commands_invalidator.h",
+    "../ash/policy/remote_commands/crd_connection_observer.h",
     "../ash/policy/remote_commands/crd_host_delegate.cc",
     "../ash/policy/remote_commands/crd_host_delegate.h",
+    "../ash/policy/remote_commands/crd_lockout_strategy.cc",
+    "../ash/policy/remote_commands/crd_lockout_strategy.h",
     "../ash/policy/remote_commands/crd_logging.h",
     "../ash/policy/remote_commands/device_command_fetch_status_job.cc",
     "../ash/policy/remote_commands/device_command_fetch_status_job.h",
@@ -4051,6 +4055,7 @@
     "../ash/policy/off_hours/off_hours_policy_applier_unittest.cc",
     "../ash/policy/off_hours/off_hours_proto_parser_unittest.cc",
     "../ash/policy/remote_commands/crd_host_delegate_unittest.cc",
+    "../ash/policy/remote_commands/crd_lockout_strategy_unittest.cc",
     "../ash/policy/remote_commands/device_command_get_available_routines_job_unittest.cc",
     "../ash/policy/remote_commands/device_command_get_routine_update_job_unittest.cc",
     "../ash/policy/remote_commands/device_command_remote_powerwash_job_unittest.cc",
diff --git a/chrome/browser/chromeos/DEPS b/chrome/browser/chromeos/DEPS
index 159d282..ce71008e 100644
--- a/chrome/browser/chromeos/DEPS
+++ b/chrome/browser/chromeos/DEPS
@@ -23,7 +23,6 @@
   "+media/audio/sounds",  # For system sounds
   "+media/base/media_switches.h",  # For media command line switches.
   "+media/mojo/mojom",  # For platform verification mojom interface.
-  "+remoting/host/it2me",  # For CRD host in remote command
   "+services/device/public",
   "+services/metrics/public",
   "+services/network",
diff --git a/chrome/browser/content_settings/sound_content_setting_observer.cc b/chrome/browser/content_settings/sound_content_setting_observer.cc
index 03389fdd..0c5a817e 100644
--- a/chrome/browser/content_settings/sound_content_setting_observer.cc
+++ b/chrome/browser/content_settings/sound_content_setting_observer.cc
@@ -155,12 +155,10 @@
 
 void SoundContentSettingObserver::CheckSoundBlocked(bool is_audible) {
   if (is_audible && GetCurrentContentSetting() == CONTENT_SETTING_BLOCK) {
-    // Since this is a page-level event and only primary pages can play audio
-    // in prerendering, we get `settings` from the main frame of the primary
-    // page.
-    // TODO(https://crbug.com/1103176): For other types of FrameTrees(fenced
-    // frames, portals) than prerendering, we should figure a way of not having
-    // to use GetMainFrame here. (pass the source frame somehow)
+    // The tab has tried to play sound, but was muted.
+    // This is a page level event so it is OK to get the main frame here.
+    // TODO(https://crbug.com/1103176): We should figure a way of not having to
+    // use GetMainFrame here. (pass the source frame somehow)
     content_settings::PageSpecificContentSettings* settings =
         content_settings::PageSpecificContentSettings::GetForFrame(
             web_contents()->GetMainFrame());
diff --git a/chrome/browser/content_settings/sound_content_setting_observer_browsertest.cc b/chrome/browser/content_settings/sound_content_setting_observer_browsertest.cc
index ad0a798..9562333 100644
--- a/chrome/browser/content_settings/sound_content_setting_observer_browsertest.cc
+++ b/chrome/browser/content_settings/sound_content_setting_observer_browsertest.cc
@@ -12,7 +12,6 @@
 #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/content_settings/browser/page_specific_content_settings.h"
 #include "components/content_settings/core/browser/host_content_settings_map.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/common/content_features.h"
@@ -51,7 +50,6 @@
     audio_state_changed_ = true;
   }
 
-  void set_audio_state_changed(bool value) { audio_state_changed_ = value; }
   bool audio_state_changed() { return audio_state_changed_; }
 
  private:
@@ -330,7 +328,7 @@
   ASSERT_TRUE(test_server_handle =
                   embedded_test_server()->StartAndReturnHandle());
 
-  // Blocks to play a sound by default.
+  // Allows to play a sound by default.
   HostContentSettingsMap* content_settings =
       HostContentSettingsMapFactory::GetForProfile(browser()->profile());
   content_settings->SetDefaultContentSetting(ContentSettingsType::SOUND,
@@ -388,100 +386,3 @@
   // CONTENT_SETTING_BLOCK.
   EXPECT_TRUE(observer->HasLoggedSiteMutedUkmForTesting());
 }
-
-// Tests that the page-specific settings for `ContentSettingsType::SOUND` is not
-// updated in the prerendered page to make sure that it's fine that
-// SoundContentSettingObserver::CheckSoundBlocked() access to the main frame
-// from WebContents.
-IN_PROC_BROWSER_TEST_F(SoundContentSettingObserverBrowserTest,
-                       NotUpdateCheckSoundBlockedInPrerendering) {
-  net::test_server::EmbeddedTestServerHandle test_server_handle;
-  ASSERT_TRUE(test_server_handle =
-                  embedded_test_server()->StartAndReturnHandle());
-
-  // Load a simple page.
-  GURL url = embedded_test_server()->GetURL("/simple.html");
-  ui_test_utils::NavigateToURL(browser(), url);
-
-  const std::string kPlayingSoundScript(
-      "var context = new window.AudioContext();"
-      "var oscillator = context.createOscillator();"
-      "oscillator.connect(context.destination);"
-      "oscillator.start();");
-
-  base::RunLoop run_loop;
-  TestAudioStartObserver audio_start_observer(web_contents(),
-                                              run_loop.QuitClosure());
-  ASSERT_TRUE(
-      content::ExecJs(web_contents()->GetMainFrame(), kPlayingSoundScript));
-  run_loop.Run();
-  // The page should try to start the audio.
-  EXPECT_TRUE(audio_start_observer.audio_state_changed());
-
-  // Since the main frame is playing a sound, WebContents knows it is audible.
-  EXPECT_TRUE(web_contents()->IsCurrentlyAudible());
-
-  // Change the profile-wide settings to block sound by default.
-  HostContentSettingsMap* content_settings =
-      HostContentSettingsMapFactory::GetForProfile(browser()->profile());
-  content_settings->SetDefaultContentSetting(ContentSettingsType::SOUND,
-                                             CONTENT_SETTING_BLOCK);
-  // Check that the primary page's content settings know that sound is blocked.
-  auto* primary_page_settings =
-      content_settings::PageSpecificContentSettings::GetForFrame(
-          web_contents()->GetMainFrame());
-  EXPECT_TRUE(
-      primary_page_settings->IsContentBlocked(ContentSettingsType::SOUND));
-
-  // Start a prerendered page.
-  content::test::PrerenderHostRegistryObserver registry_observer(
-      *web_contents());
-  auto prerender_url = embedded_test_server()->GetURL("/empty.html");
-  int host_id = prerender_helper()->AddPrerender(prerender_url);
-  content::test::PrerenderHostObserver host_observer(*web_contents(), host_id);
-  content::RenderFrameHost* render_frame_host =
-      prerender_helper()->GetPrerenderedMainFrameHost(host_id);
-
-  // Reset the flag to test if audio state is changed by running the script to
-  // play a sound on the prerendered page.
-  audio_start_observer.set_audio_state_changed(false);
-  // Try to play a sound in the prerendering page.
-  content::ExecuteScriptAsync(render_frame_host, kPlayingSoundScript);
-  // The prerendering page should not start the audio.
-  EXPECT_FALSE(audio_start_observer.audio_state_changed());
-  // The main page is still audible as the prerendering doesn't affect playing a
-  // sound.
-  EXPECT_TRUE(web_contents()->IsCurrentlyAudible());
-
-  // Set the profile-wide contents settings to block sound again, to see if this
-  // updates the page-specific settings for the prerendered page or primary
-  // page.
-  content_settings->SetDefaultContentSetting(ContentSettingsType::SOUND,
-                                             CONTENT_SETTING_BLOCK);
-  auto* prerendered_frame_settings =
-      content_settings::PageSpecificContentSettings::GetForFrame(
-          render_frame_host);
-  // Audio is not blocked on the prerendered page since it doesn't play a sound.
-  EXPECT_FALSE(
-      prerendered_frame_settings->IsContentBlocked(ContentSettingsType::SOUND));
-  // Audio is blocked on the current page since it is playing a sound.
-  EXPECT_TRUE(
-      primary_page_settings->IsContentBlocked(ContentSettingsType::SOUND));
-
-  // Activate the prerendering page.
-  prerender_helper()->NavigatePrimaryPage(prerender_url);
-  EXPECT_TRUE(host_observer.was_activated());
-
-  // Since audio stream status is posted to UI thread, wait until it's idle.
-  base::RunLoop().RunUntilIdle();
-
-  auto* activated_page_settings =
-      content_settings::PageSpecificContentSettings::GetForFrame(
-          web_contents()->GetMainFrame());
-  // It should be false since the page is activated from the prerendering.
-  // TODO(crbug.com/1228567): If AudioContext activation is handled, the audio
-  // would be played and the status also would be updated.
-  EXPECT_FALSE(
-      activated_page_settings->IsContentBlocked(ContentSettingsType::SOUND));
-  EXPECT_FALSE(web_contents()->IsCurrentlyAudible());
-}
diff --git a/chrome/browser/devtools/devtools_browsertest.cc b/chrome/browser/devtools/devtools_browsertest.cc
index 92243120..e2b310ef 100644
--- a/chrome/browser/devtools/devtools_browsertest.cc
+++ b/chrome/browser/devtools/devtools_browsertest.cc
@@ -2744,7 +2744,9 @@
   OpenDevToolsWindow("about:blank", true);
 
   const auto result = FetchFromDevToolsWindow("http://www.google.com");
-  EXPECT_EQ("a JavaScript error:\nTypeError: Failed to fetch\n", result.error);
+  EXPECT_THAT(result.error,
+              ::testing::StartsWith(
+                  "a JavaScript error:\nTypeError: Failed to fetch\n"));
 
   CloseDevToolsWindow();
 }
@@ -2754,5 +2756,7 @@
 
   const auto result = Fetch(GetInspectedTab(),
                             "devtools://devtools/bundled/Images/whatsnew.avif");
-  EXPECT_EQ("a JavaScript error:\nTypeError: Failed to fetch\n", result.error);
+  EXPECT_THAT(result.error,
+              ::testing::StartsWith(
+                  "a JavaScript error:\nTypeError: Failed to fetch\n"));
 }
diff --git a/chrome/browser/enterprise/connectors/connectors_service.cc b/chrome/browser/enterprise/connectors/connectors_service.cc
index 30c4ef2..5842ff38 100644
--- a/chrome/browser/enterprise/connectors/connectors_service.cc
+++ b/chrome/browser/enterprise/connectors/connectors_service.cc
@@ -209,7 +209,7 @@
             "token_endpoint": "https://api.box.com/oauth2/token",
             "max_direct_size": 20971520,
             "scopes": [],
-            "disable": [ "box.com" ]
+            "disable": [ "box.com", "boxcloud.com" ]
           }
         }
       }
diff --git a/chrome/browser/enterprise/connectors/service_provider_config_unittest.cc b/chrome/browser/enterprise/connectors/service_provider_config_unittest.cc
index aacead5b..9f71760 100644
--- a/chrome/browser/enterprise/connectors/service_provider_config_unittest.cc
+++ b/chrome/browser/enterprise/connectors/service_provider_config_unittest.cc
@@ -97,8 +97,9 @@
             service_provider->fs_token_endpoint());
   ASSERT_EQ(20u * 1024 * 1024, service_provider->fs_max_direct_size());
   ASSERT_TRUE(service_provider->fs_scopes().empty());
-  ASSERT_EQ(1u, service_provider->fs_disable().size());
+  ASSERT_EQ(2u, service_provider->fs_disable().size());
   ASSERT_EQ("box.com", service_provider->fs_disable()[0]);
+  ASSERT_EQ("boxcloud.com", service_provider->fs_disable()[1]);
 }
 
 }  // namespace enterprise_connectors
diff --git a/chrome/browser/enterprise/signals/context_info_fetcher.cc b/chrome/browser/enterprise/signals/context_info_fetcher.cc
index ecb52a7..25f3ca9 100644
--- a/chrome/browser/enterprise/signals/context_info_fetcher.cc
+++ b/chrome/browser/enterprise/signals/context_info_fetcher.cc
@@ -6,7 +6,9 @@
 
 #include <memory>
 
-#include "base/threading/thread_task_runner_handle.h"
+#include "base/files/file_util.h"
+#include "base/strings/string_split.h"
+#include "base/task/thread_pool.h"
 #include "build/build_config.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/enterprise/connectors/connectors_service.h"
@@ -38,6 +40,37 @@
   return state == policy::URLBlocklist::URLBlocklistState::URL_IN_BLOCKLIST;
 }
 
+#if defined(OS_LINUX)
+const char** GetUfwConfigPath() {
+  static const char* path = "/etc/ufw/ufw.conf";
+  return &path;
+}
+
+SettingValue GetUfwStatus() {
+  base::FilePath path(*GetUfwConfigPath());
+  std::string file_content;
+  base::StringPairs values;
+
+  if (!base::PathExists(path) || !base::PathIsReadable(path) ||
+      !base::ReadFileToString(path, &file_content)) {
+    return SettingValue::UNKNOWN;
+  }
+  base::SplitStringIntoKeyValuePairs(file_content, '=', '\n', &values);
+  auto is_ufw_enabled = std::find_if(values.begin(), values.end(), [](auto v) {
+    return v.first == "ENABLED";
+  });
+  if (is_ufw_enabled == values.end())
+    return SettingValue::UNKNOWN;
+
+  if (is_ufw_enabled->second == "yes")
+    return SettingValue::ENABLED;
+  else if (is_ufw_enabled->second == "no")
+    return SettingValue::DISABLED;
+  else
+    return SettingValue::UNKNOWN;
+}
+#endif  // defined(OS_LINUX)
+
 }  // namespace
 
 ContextInfo::ContextInfo() = default;
@@ -64,6 +97,12 @@
                                               connectors_service);
 }
 
+ContextInfo ContextInfoFetcher::FetchAsyncSignals(ContextInfo info) {
+  // Add other async signals here
+  info.os_firewall = GetOSFirewall();
+  return info;
+}
+
 void ContextInfoFetcher::Fetch(ContextInfoCallback callback) {
   ContextInfo info;
 
@@ -87,9 +126,23 @@
   info.chrome_cleanup_enabled = GetChromeCleanupEnabled();
   info.chrome_remote_desktop_app_blocked = GetChromeRemoteDesktopAppBlocked();
   info.third_party_blocking_enabled = GetThirdPartyBLockingEnabled();
-  info.os_firewall = GetOSFirewall();
-  base::ThreadTaskRunnerHandle::Get()->PostTask(
-      FROM_HERE, base::BindOnce(std::move(callback), std::move(info)));
+#if defined(OS_WIN)
+  base::ThreadPool::CreateCOMSTATaskRunner({})
+      .get()
+      ->PostTaskAndReplyWithResult(
+          FROM_HERE,
+          base::BindOnce(&ContextInfoFetcher::FetchAsyncSignals,
+                         base::Unretained(this), std::move(info)),
+          std::move(callback));
+#else
+  base::ThreadPool::CreateTaskRunner({base::MayBlock()})
+      .get()
+      ->PostTaskAndReplyWithResult(
+          FROM_HERE,
+          base::BindOnce(&ContextInfoFetcher::FetchAsyncSignals,
+                         base::Unretained(this), std::move(info)),
+          std::move(callback));
+#endif
 }
 
 std::vector<std::string> ContextInfoFetcher::GetBrowserAffiliationIDs() {
@@ -181,7 +234,22 @@
 }
 
 SettingValue ContextInfoFetcher::GetOSFirewall() {
+#if defined(OS_LINUX)
+  return GetUfwStatus();
+#else
   return SettingValue::UNKNOWN;
+#endif
 }
 
+#if defined(OS_LINUX)
+ScopedUfwConfigPathForTesting::ScopedUfwConfigPathForTesting(const char* path)
+    : initial_path_(*GetUfwConfigPath()) {
+  *GetUfwConfigPath() = path;
+}
+
+ScopedUfwConfigPathForTesting::~ScopedUfwConfigPathForTesting() {
+  *GetUfwConfigPath() = initial_path_;
+}
+#endif  // defined(OS_LINUX)
+
 }  // namespace enterprise_signals
diff --git a/chrome/browser/enterprise/signals/context_info_fetcher.h b/chrome/browser/enterprise/signals/context_info_fetcher.h
index 5d00513..3850e4929 100644
--- a/chrome/browser/enterprise/signals/context_info_fetcher.h
+++ b/chrome/browser/enterprise/signals/context_info_fetcher.h
@@ -9,6 +9,7 @@
 #include <vector>
 
 #include "base/callback_forward.h"
+#include "build/build_config.h"
 #include "chrome/browser/enterprise/signals/signals_common.h"
 #include "components/safe_browsing/core/common/safe_browsing_prefs.h"
 
@@ -105,12 +106,29 @@
 
   SettingValue GetOSFirewall();
 
+  ContextInfo FetchAsyncSignals(ContextInfo info);
+
   content::BrowserContext* browser_context_;
 
   // |connectors_service| is used to obtain the value of each Connector policy.
   enterprise_connectors::ConnectorsService* connectors_service_;
 };
 
+#if defined(OS_LINUX)
+class ScopedUfwConfigPathForTesting {
+ public:
+  explicit ScopedUfwConfigPathForTesting(const char* path);
+  ~ScopedUfwConfigPathForTesting();
+
+  ScopedUfwConfigPathForTesting& operator=(
+      const ScopedUfwConfigPathForTesting&) = delete;
+  ScopedUfwConfigPathForTesting(const ScopedUfwConfigPathForTesting&) = delete;
+
+ private:
+  const char* initial_path_;
+};
+#endif  // defined(OS_LINUX)
+
 }  // namespace enterprise_signals
 
 #endif  // CHROME_BROWSER_ENTERPRISE_SIGNALS_CONTEXT_INFO_FETCHER_H_
diff --git a/chrome/browser/extensions/api/automation/automation_apitest.cc b/chrome/browser/extensions/api/automation/automation_apitest.cc
index 9450043a..15573122 100644
--- a/chrome/browser/extensions/api/automation/automation_apitest.cc
+++ b/chrome/browser/extensions/api/automation/automation_apitest.cc
@@ -239,7 +239,14 @@
       << message_;
 }
 
-IN_PROC_BROWSER_TEST_F(AutomationApiTest, TabsAutomationBooleanActions) {
+// Flaky on Mac: crbug.com/1235249
+#if defined(OS_MAC)
+#define MAYBE_TabsAutomationBooleanActions \
+  DISABLED_TabsAutomationBooleanActions
+#else
+#define MAYBE_TabsAutomationBooleanActions TabsAutomationBooleanActions
+#endif
+IN_PROC_BROWSER_TEST_F(AutomationApiTest, MAYBE_TabsAutomationBooleanActions) {
   StartEmbeddedTestServer();
   ASSERT_TRUE(RunExtensionTest("automation/tests/tabs_automation_boolean",
                                {.page_url = "actions.html"}))
diff --git a/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_unittest.cc b/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_unittest.cc
index 86d637b..b331d117 100644
--- a/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_unittest.cc
+++ b/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_unittest.cc
@@ -4,6 +4,7 @@
 
 #include <tuple>
 
+#include "base/files/file_util.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/enterprise/signals/device_info_fetcher.h"
 #include "chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_api.h"
@@ -623,6 +624,108 @@
                     enterprise_reporting_private::
                         PASSWORD_PROTECTION_TRIGGER_PHISHING_REUSE));
 
+#if defined(OS_LINUX)
+class EnterpriseReportingPrivateGetContextOSFirewallLinuxTest
+    : public EnterpriseReportingPrivateGetContextInfoTest,
+      public testing::WithParamInterface<
+          enterprise_reporting_private::SettingValue> {
+ public:
+  void SetUp() override {
+    ExtensionApiUnittest::SetUp();
+    ASSERT_TRUE(fake_appdata_dir_.CreateUniqueTempDir());
+    file_path_ = fake_appdata_dir_.GetPath().Append("ufw.conf");
+  }
+
+  void ExpectDefaultPolicies(
+      const enterprise_reporting_private::ContextInfo& info) {
+    EXPECT_TRUE(info.browser_affiliation_ids.empty());
+    EXPECT_TRUE(info.profile_affiliation_ids.empty());
+    EXPECT_TRUE(info.on_file_attached_providers.empty());
+    EXPECT_TRUE(info.on_file_downloaded_providers.empty());
+    EXPECT_TRUE(info.on_bulk_data_entry_providers.empty());
+    EXPECT_EQ(enterprise_reporting_private::REALTIME_URL_CHECK_MODE_DISABLED,
+              info.realtime_url_check_mode);
+    EXPECT_TRUE(info.on_security_event_providers.empty());
+    EXPECT_EQ(version_info::GetVersionNumber(), info.browser_version);
+    EXPECT_EQ(enterprise_reporting_private::SAFE_BROWSING_LEVEL_STANDARD,
+              info.safe_browsing_protection_level);
+    EXPECT_EQ(BuiltInDnsClientPlatformDefault(),
+              info.built_in_dns_client_enabled);
+    EXPECT_EQ(
+        enterprise_reporting_private::PASSWORD_PROTECTION_TRIGGER_POLICY_UNSET,
+        info.password_protection_warning_trigger);
+    ExpectDefaultChromeCleanupEnabled(info);
+    EXPECT_FALSE(info.chrome_remote_desktop_app_blocked);
+    ExpectDefaultThirdPartyBlockingEnabled(info);
+  }
+
+ protected:
+  base::ScopedTempDir fake_appdata_dir_;
+  base::FilePath file_path_;
+};
+
+TEST_F(EnterpriseReportingPrivateGetContextOSFirewallLinuxTest,
+       NoFirewallFile) {
+  // Refer to a non existent firewall config file
+  enterprise_signals::ScopedUfwConfigPathForTesting scoped_path(
+      file_path_.value().c_str());
+  enterprise_reporting_private::ContextInfo info = GetContextInfo();
+
+  ExpectDefaultPolicies(info);
+  EXPECT_EQ(info.os_firewall,
+            enterprise_reporting_private::SETTING_VALUE_UNKNOWN);
+}
+
+TEST_F(EnterpriseReportingPrivateGetContextOSFirewallLinuxTest, NoEnabledKey) {
+  // Refer to a config file without the ENABLED=value key-value pair
+  base::WriteFile(file_path_,
+                  "#comment1\n#comment2\nLOGLEVEL=yes\nTESTKEY=yes\n");
+  enterprise_signals::ScopedUfwConfigPathForTesting scoped_path(
+      file_path_.value().c_str());
+  enterprise_reporting_private::ContextInfo info = GetContextInfo();
+
+  ExpectDefaultPolicies(info);
+  EXPECT_EQ(info.os_firewall,
+            enterprise_reporting_private::SETTING_VALUE_UNKNOWN);
+}
+
+TEST_P(EnterpriseReportingPrivateGetContextOSFirewallLinuxTest, Test) {
+  enterprise_reporting_private::SettingValue os_firewall_value = GetParam();
+  switch (os_firewall_value) {
+    case enterprise_reporting_private::SETTING_VALUE_ENABLED:
+      // File format to test if comments, empty lines and strings containing the
+      // key are ignored
+      base::WriteFile(file_path_,
+                      "#ENABLED=no\nrandomtextENABLED=no\n  \nENABLED=yes\n");
+      break;
+    case enterprise_reporting_private::SETTING_VALUE_DISABLED:
+      base::WriteFile(file_path_,
+                      "#ENABLED=yes\nENABLEDrandomtext=yes\n  \nENABLED=no\n");
+      break;
+    case enterprise_reporting_private::SETTING_VALUE_UNKNOWN:
+      // File content to test a value that isn't yes or no
+      base::WriteFile(file_path_,
+                      "#ENABLED=yes\nLOGLEVEL=yes\nENABLED=yesno\n");
+      break;
+    default:
+      NOTREACHED();
+  }
+
+  enterprise_signals::ScopedUfwConfigPathForTesting scoped_path(
+      file_path_.value().c_str());
+  enterprise_reporting_private::ContextInfo info = GetContextInfo();
+  ExpectDefaultPolicies(info);
+  EXPECT_EQ(info.os_firewall, os_firewall_value);
+}
+
+INSTANTIATE_TEST_SUITE_P(
+    ,
+    EnterpriseReportingPrivateGetContextOSFirewallLinuxTest,
+    testing::Values(enterprise_reporting_private::SETTING_VALUE_ENABLED,
+                    enterprise_reporting_private::SETTING_VALUE_DISABLED,
+                    enterprise_reporting_private::SETTING_VALUE_UNKNOWN));
+#endif  // defined(OS_LINUX)
+
 #if defined(OS_WIN)
 class EnterpriseReportingPrivateGetContextInfoChromeCleanupTest
     : public EnterpriseReportingPrivateGetContextInfoTest,
diff --git a/chrome/browser/extensions/api/scripting/scripting_api.cc b/chrome/browser/extensions/api/scripting/scripting_api.cc
index 23c02a2..ba78e3b 100644
--- a/chrome/browser/extensions/api/scripting/scripting_api.cc
+++ b/chrome/browser/extensions/api/scripting/scripting_api.cc
@@ -888,7 +888,7 @@
       api::scripting::GetRegisteredContentScripts::Params::Create(*args_));
   EXTENSION_FUNCTION_VALIDATE(params);
 
-  std::unique_ptr<api::scripting::ContentScriptFilter>& filter = params->filter;
+  const api::scripting::ContentScriptFilter* filter = params->filter.get();
   std::set<std::string> id_filter;
   if (filter && filter->ids) {
     id_filter.insert(std::make_move_iterator(filter->ids->begin()),
@@ -912,4 +912,63 @@
           script_infos)));
 }
 
+ScriptingUnregisterContentScriptsFunction::
+    ScriptingUnregisterContentScriptsFunction() = default;
+ScriptingUnregisterContentScriptsFunction::
+    ~ScriptingUnregisterContentScriptsFunction() = default;
+
+ExtensionFunction::ResponseAction
+ScriptingUnregisterContentScriptsFunction::Run() {
+  auto params(api::scripting::UnregisterContentScripts::Params::Create(*args_));
+  EXTENSION_FUNCTION_VALIDATE(params);
+
+  std::unique_ptr<api::scripting::ContentScriptFilter>& filter = params->filter;
+  std::set<std::string> ids_to_remove;
+
+  ExtensionUserScriptLoader* loader =
+      ExtensionSystem::Get(browser_context())
+          ->user_script_manager()
+          ->GetUserScriptLoaderForExtension(extension()->id());
+  std::set<std::string> existing_script_ids = loader->GetDynamicScriptIDs();
+  if (filter && filter->ids) {
+    for (const auto& id : *filter->ids) {
+      if (UserScript::IsIDGenerated(id)) {
+        return RespondNow(Error(base::StringPrintf(
+            "Content script's ID '%s' must not start with '%c'", id.c_str(),
+            UserScript::kGeneratedIDPrefix)));
+      }
+
+      if (!base::Contains(existing_script_ids, id)) {
+        return RespondNow(Error(
+            base::StringPrintf("Nonexistent script ID '%s'", id.c_str())));
+      }
+
+      ids_to_remove.insert(id);
+    }
+  }
+
+  if (ids_to_remove.empty()) {
+    loader->ClearDynamicScripts(
+        base::BindOnce(&ScriptingUnregisterContentScriptsFunction::
+                           OnContentScriptsUnregistered,
+                       this));
+  } else {
+    loader->RemoveDynamicScripts(
+        std::move(ids_to_remove),
+        base::BindOnce(&ScriptingUnregisterContentScriptsFunction::
+                           OnContentScriptsUnregistered,
+                       this));
+  }
+
+  return RespondLater();
+}
+
+void ScriptingUnregisterContentScriptsFunction::OnContentScriptsUnregistered(
+    const absl::optional<std::string>& error) {
+  if (error.has_value())
+    Respond(Error(*error));
+  else
+    Respond(NoArguments());
+}
+
 }  // namespace extensions
diff --git a/chrome/browser/extensions/api/scripting/scripting_api.h b/chrome/browser/extensions/api/scripting/scripting_api.h
index ba93a23..73313827 100644
--- a/chrome/browser/extensions/api/scripting/scripting_api.h
+++ b/chrome/browser/extensions/api/scripting/scripting_api.h
@@ -153,6 +153,27 @@
   ~ScriptingGetRegisteredContentScriptsFunction() override;
 };
 
+class ScriptingUnregisterContentScriptsFunction : public ExtensionFunction {
+ public:
+  DECLARE_EXTENSION_FUNCTION("scripting.unregisterContentScripts",
+                             SCRIPTING_UNREGISTERCONTENTSCRIPTS)
+
+  ScriptingUnregisterContentScriptsFunction();
+  ScriptingUnregisterContentScriptsFunction(
+      const ScriptingUnregisterContentScriptsFunction&) = delete;
+  ScriptingUnregisterContentScriptsFunction& operator=(
+      const ScriptingUnregisterContentScriptsFunction&) = delete;
+
+  // ExtensionFunction:
+  ResponseAction Run() override;
+
+ private:
+  ~ScriptingUnregisterContentScriptsFunction() override;
+
+  // Called when content scripts have been unregistered.
+  void OnContentScriptsUnregistered(const absl::optional<std::string>& error);
+};
+
 }  // namespace extensions
 
 #endif  // CHROME_BROWSER_EXTENSIONS_API_SCRIPTING_SCRIPTING_API_H_
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index a7297fdf..92fd580 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -4483,6 +4483,11 @@
     "expiry_milestone": 94
   },
   {
+    "name": "partitioned-cookies",
+    "owners": [ "dylancutler" ],
+    "expiry_milestone": 100
+  },
+  {
     "name": "password-change-in-settings",
     "owners": [ "kolos" ],
     "expiry_milestone": 95
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index 61af972..ed677d0 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -2310,6 +2310,10 @@
     "If enabled, SameParty cookies will not be blocked even if third-party "
     "cookies are blocked.";
 
+const char kPartitionedCookiesName[] = "Partitioned cookies";
+const char kPartitionedCookiesDescription[] =
+    "Controls if the Partitioned cookie attribute is enabled.";
+
 const char kSchemefulSameSiteName[] = "Schemeful Same-Site";
 const char kSchemefulSameSiteDescription[] =
     "Modify the same-site computation such that origins with the same "
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index 231731c3..351f8306 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -1319,6 +1319,9 @@
 extern const char kSamePartyCookiesConsideredFirstPartyName[];
 extern const char kSamePartyCookiesConsideredFirstPartyDescription[];
 
+extern const char kPartitionedCookiesName[];
+extern const char kPartitionedCookiesDescription[];
+
 extern const char kSchemefulSameSiteName[];
 extern const char kSchemefulSameSiteDescription[];
 
diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc
index a4f8bbd..a2ee637f 100644
--- a/chrome/browser/flags/android/chrome_feature_list.cc
+++ b/chrome/browser/flags/android/chrome_feature_list.cc
@@ -371,7 +371,7 @@
     "FocusOmniboxInIncognitoTabIntents", base::FEATURE_ENABLED_BY_DEFAULT};
 
 const base::Feature kAllowRemoteContextForNotifications{
-    "AllowRemoteContextForNotifications", base::FEATURE_ENABLED_BY_DEFAULT};
+    "AllowRemoteContextForNotifications", base::FEATURE_DISABLED_BY_DEFAULT};
 
 const base::Feature kAndroidPartnerCustomizationPhenotype{
     "AndroidPartnerCustomizationPhenotype", base::FEATURE_ENABLED_BY_DEFAULT};
diff --git a/chrome/browser/importer/firefox_profile_lock_fuchsia.cc b/chrome/browser/importer/firefox_profile_lock_fuchsia.cc
new file mode 100644
index 0000000..df2d39b7
--- /dev/null
+++ b/chrome/browser/importer/firefox_profile_lock_fuchsia.cc
@@ -0,0 +1,20 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/importer/firefox_profile_lock.h"
+
+// The FirefoxProfileLock is empty on Fuchsia because the filesystem is not
+// shared across component, so settings file will have to be imported into the
+// Chrome process and will then be accessed read-only. No lock is needed in that
+// situation.
+
+void FirefoxProfileLock::Init() {}
+
+void FirefoxProfileLock::Lock() {}
+
+void FirefoxProfileLock::Unlock() {}
+
+bool FirefoxProfileLock::HasAcquired() {
+  return true;
+}
diff --git a/chrome/browser/metrics/chrome_metrics_service_client.cc b/chrome/browser/metrics/chrome_metrics_service_client.cc
index bde4ce2..2a077ec70a 100644
--- a/chrome/browser/metrics/chrome_metrics_service_client.cc
+++ b/chrome/browser/metrics/chrome_metrics_service_client.cc
@@ -371,6 +371,10 @@
   // with no signal being sent.
   if (kill(pid, 0) == 0 || errno != ESRCH)
     return true;
+#elif defined(OS_FUCHSIA)
+  // TODO(crbug.com/1235293)
+  NOTIMPLEMENTED_LOG_ONCE();
+  return false;
 #else
 #error Unsupported OS. Might be okay to just return false.
 #endif
diff --git a/chrome/browser/net/profile_network_context_service.cc b/chrome/browser/net/profile_network_context_service.cc
index c851880..11426ee2 100644
--- a/chrome/browser/net/profile_network_context_service.cc
+++ b/chrome/browser/net/profile_network_context_service.cc
@@ -593,6 +593,10 @@
   // cert matching is done by the OS as part of the call to show the cert
   // selection dialog.
   return nullptr;
+#elif defined(OS_FUCHSIA)
+  // TODO(crbug.com/1235293)
+  NOTIMPLEMENTED_LOG_ONCE();
+  return nullptr;
 #else
 #error Unknown platform.
 #endif
diff --git a/chrome/browser/performance_monitor/system_monitor.cc b/chrome/browser/performance_monitor/system_monitor.cc
index 4b50d80..55b8343 100644
--- a/chrome/browser/performance_monitor/system_monitor.cc
+++ b/chrome/browser/performance_monitor/system_monitor.cc
@@ -9,6 +9,7 @@
 
 #include "base/feature_list.h"
 #include "base/memory/ptr_util.h"
+#include "base/notreached.h"
 #include "base/task/post_task.h"
 #include "base/task/thread_pool.h"
 #include "base/task_runner_util.h"
@@ -242,13 +243,16 @@
 std::unique_ptr<MetricEvaluatorsHelper>
 SystemMonitor::CreateMetricEvaluatorsHelper() {
 #if defined(OS_WIN)
-  MetricEvaluatorsHelper* helper = new MetricEvaluatorsHelperWin();
+  return base::WrapUnique(new MetricEvaluatorsHelperWin());
 #elif defined(OS_POSIX)
-  MetricEvaluatorsHelper* helper = new MetricEvaluatorsHelperPosix();
+  return std::make_unique<MetricEvaluatorsHelperPosix>();
+#elif defined(OS_FUCHSIA)
+  // TODO(crbug.com/1235293)
+  NOTIMPLEMENTED_LOG_ONCE();
+  return nullptr;
 #else
 #error Unsupported platform
 #endif
-  return base::WrapUnique(helper);
 }
 
 SystemMonitor::MetricEvaluator::MetricEvaluator(Type type) : type_(type) {}
diff --git a/chrome/browser/platform_util_fuchsia.cc b/chrome/browser/platform_util_fuchsia.cc
new file mode 100644
index 0000000..3b59da0
--- /dev/null
+++ b/chrome/browser/platform_util_fuchsia.cc
@@ -0,0 +1,29 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/platform_util.h"
+
+#include "base/notreached.h"
+namespace platform_util {
+
+void ShowItemInFolder(Profile* profile, const base::FilePath& full_path) {
+  // TODO(crbug.com/1235293)
+  NOTIMPLEMENTED_LOG_ONCE();
+}
+
+namespace internal {
+
+void PlatformOpenVerifiedItem(const base::FilePath& path, OpenItemType type) {
+  // TODO(crbug.com/1235293)
+  NOTIMPLEMENTED_LOG_ONCE();
+}
+
+}  // namespace internal
+
+void OpenExternal(Profile* profile, const GURL& url) {
+  // TODO(crbug.com/1235293)
+  NOTIMPLEMENTED_LOG_ONCE();
+}
+
+}  // namespace platform_util
diff --git a/chrome/browser/policy/browser_dm_token_storage_fuchsia.cc b/chrome/browser/policy/browser_dm_token_storage_fuchsia.cc
new file mode 100644
index 0000000..8ae1d17
--- /dev/null
+++ b/chrome/browser/policy/browser_dm_token_storage_fuchsia.cc
@@ -0,0 +1,62 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/policy/browser_dm_token_storage_fuchsia.h"
+
+#include <string>
+
+#include "base/notreached.h"
+#include "base/task/thread_pool.h"
+
+namespace policy {
+namespace {
+bool LogAndDoNothing() {
+  // TODO(crbug.com/1236996)
+  NOTIMPLEMENTED_LOG_ONCE();
+  return false;
+}
+}  // namespace
+
+BrowserDMTokenStorageFuchsia::BrowserDMTokenStorageFuchsia()
+    : task_runner_(base::ThreadPool::CreateTaskRunner({base::MayBlock()})) {}
+
+BrowserDMTokenStorageFuchsia::~BrowserDMTokenStorageFuchsia() {}
+
+std::string BrowserDMTokenStorageFuchsia::InitClientId() {
+  // TODO(crbug.com/1236996)
+  NOTIMPLEMENTED_LOG_ONCE();
+  return std::string();
+}
+
+std::string BrowserDMTokenStorageFuchsia::InitEnrollmentToken() {
+  // TODO(crbug.com/1236996)
+  NOTIMPLEMENTED_LOG_ONCE();
+  return std::string();
+}
+
+std::string BrowserDMTokenStorageFuchsia::InitDMToken() {
+  // TODO(crbug.com/1236996)
+  NOTIMPLEMENTED_LOG_ONCE();
+  return std::string();
+}
+
+bool BrowserDMTokenStorageFuchsia::InitEnrollmentErrorOption() {
+  // TODO(crbug.com/1236996)
+  NOTIMPLEMENTED_LOG_ONCE();
+  return false;
+}
+
+BrowserDMTokenStorage::StoreTask BrowserDMTokenStorageFuchsia::SaveDMTokenTask(
+    const std::string& token,
+    const std::string& client_id) {
+  // TODO(crbug.com/1236996)
+  return base::BindOnce(&LogAndDoNothing);
+}
+
+scoped_refptr<base::TaskRunner>
+BrowserDMTokenStorageFuchsia::SaveDMTokenTaskRunner() {
+  return task_runner_;
+}
+
+}  // namespace policy
diff --git a/chrome/browser/policy/browser_dm_token_storage_fuchsia.h b/chrome/browser/policy/browser_dm_token_storage_fuchsia.h
new file mode 100644
index 0000000..70b79141
--- /dev/null
+++ b/chrome/browser/policy/browser_dm_token_storage_fuchsia.h
@@ -0,0 +1,38 @@
+// Copyright 2021 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.
+
+#ifndef CHROME_BROWSER_POLICY_BROWSER_DM_TOKEN_STORAGE_FUCHSIA_H_
+#define CHROME_BROWSER_POLICY_BROWSER_DM_TOKEN_STORAGE_FUCHSIA_H_
+
+#include "components/enterprise/browser/controller/browser_dm_token_storage.h"
+
+#include <string>
+
+namespace policy {
+
+// Implementation of BrowserDMTokenStorage delegate for Fuchsia.
+class BrowserDMTokenStorageFuchsia : public BrowserDMTokenStorage::Delegate {
+ public:
+  BrowserDMTokenStorageFuchsia();
+  BrowserDMTokenStorageFuchsia(const BrowserDMTokenStorageFuchsia&) = delete;
+  BrowserDMTokenStorageFuchsia& operator=(const BrowserDMTokenStorageFuchsia&) =
+      delete;
+  ~BrowserDMTokenStorageFuchsia() override;
+
+ private:
+  // override BrowserDMTokenStorage::Delegate
+  std::string InitClientId() override;
+  std::string InitEnrollmentToken() override;
+  std::string InitDMToken() override;
+  bool InitEnrollmentErrorOption() override;
+  BrowserDMTokenStorage::StoreTask SaveDMTokenTask(
+      const std::string& token,
+      const std::string& client_id) override;
+  scoped_refptr<base::TaskRunner> SaveDMTokenTaskRunner() override;
+
+  scoped_refptr<base::TaskRunner> task_runner_;
+};
+
+}  // namespace policy
+#endif  // CHROME_BROWSER_POLICY_BROWSER_DM_TOKEN_STORAGE_FUCHSIA_H_
diff --git a/chrome/browser/policy/chrome_browser_cloud_management_controller_desktop.cc b/chrome/browser/policy/chrome_browser_cloud_management_controller_desktop.cc
index 4047f4a..8fea0ead 100644
--- a/chrome/browser/policy/chrome_browser_cloud_management_controller_desktop.cc
+++ b/chrome/browser/policy/chrome_browser_cloud_management_controller_desktop.cc
@@ -54,9 +54,8 @@
 #endif  // defined(OS_WIN)
 
 #if defined(OS_FUCHSIA)
-#include "base/notreached.h"
-#include "components/enterprise/browser/controller/browser_dm_token_storage.h"
-#endif
+#include "chrome/browser/policy/browser_dm_token_storage_fuchsia.h"
+#endif  // defined(OS_FUCHSIA)
 
 namespace policy {
 
@@ -85,6 +84,8 @@
   storage_delegate = std::make_unique<BrowserDMTokenStorageLinux>();
 #elif defined(OS_WIN)
   storage_delegate = std::make_unique<BrowserDMTokenStorageWin>();
+#elif defined(OS_FUCHSIA)
+  storage_delegate = std::make_unique<BrowserDMTokenStorageFuchsia>();
 #else
   NOTREACHED();
 #endif
diff --git a/chrome/browser/policy/policy_path_parser_fuchsia.cc b/chrome/browser/policy/policy_path_parser_fuchsia.cc
index 1b55658..139a417 100644
--- a/chrome/browser/policy/policy_path_parser_fuchsia.cc
+++ b/chrome/browser/policy/policy_path_parser_fuchsia.cc
@@ -6,6 +6,7 @@
 
 #include <string>
 
+#include "base/logging.h"
 #include "base/notreached.h"
 
 namespace policy {
diff --git a/chrome/browser/process_singleton_fuchsia.cc b/chrome/browser/process_singleton_fuchsia.cc
new file mode 100644
index 0000000..9ab1745
--- /dev/null
+++ b/chrome/browser/process_singleton_fuchsia.cc
@@ -0,0 +1,44 @@
+// Copyright 2021 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.
+
+// On Fuchsia, we assume that the Component Framework ensures that only a single
+// Chrome component instance will run against a particular data-directory.
+// This file contains a stubbed-out ProcessSingleton implementation. :)
+//
+// In future we will need to support a mechanism for URL launch attempts to
+// be handled by a running Chrome instance, e.g. by registering the instance as
+// the Runner for HTTP[S] component URLs.
+
+#include "chrome/browser/process_singleton.h"
+
+ProcessSingleton::ProcessSingleton(
+    const base::FilePath& user_data_dir,
+    const NotificationCallback& notification_callback) {}
+
+ProcessSingleton::~ProcessSingleton() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+}
+
+ProcessSingleton::NotifyResult ProcessSingleton::NotifyOtherProcess() {
+  // TODO(crbug.com/1235293)
+  NOTIMPLEMENTED_LOG_ONCE();
+  return PROCESS_NONE;
+}
+
+ProcessSingleton::NotifyResult ProcessSingleton::NotifyOtherProcessOrCreate() {
+  // TODO(crbug.com/1235293)
+  NOTIMPLEMENTED_LOG_ONCE();
+  return PROCESS_NONE;
+}
+
+bool ProcessSingleton::Create() {
+  // TODO(crbug.com/1235293)
+  NOTIMPLEMENTED_LOG_ONCE();
+  return true;
+}
+
+void ProcessSingleton::Cleanup() {
+  // TODO(crbug.com/1235293)
+  NOTIMPLEMENTED_LOG_ONCE();
+}
diff --git a/chrome/browser/resources/bookmarks/item.html b/chrome/browser/resources/bookmarks/item.html
index f8deef96..f068183 100644
--- a/chrome/browser/resources/bookmarks/item.html
+++ b/chrome/browser/resources/bookmarks/item.html
@@ -100,8 +100,8 @@
   <div id="website-title" class="elided-text" title="[[item_.title]]">
     [[item_.title]]
   </div>
-  <div id="website-url" class="elided-text" title="[[item_.url]]">
-    [[item_.url]]
+  <div id="website-url" class="elided-text" title="[[getItemUrl_(item_)]]">
+    [[getItemUrl_(item_)]]
   </div>
 </div>
 <div role="gridcell">
@@ -113,4 +113,4 @@
           isMultiSelect_)]]"
       on-click="onMenuButtonClick_"
       aria-haspopup="menu"></cr-icon-button>
-</div>
\ No newline at end of file
+</div>
diff --git a/chrome/browser/resources/bookmarks/item.ts b/chrome/browser/resources/bookmarks/item.ts
index e82c8633..61a20dc 100644
--- a/chrome/browser/resources/bookmarks/item.ts
+++ b/chrome/browser/resources/bookmarks/item.ts
@@ -178,6 +178,10 @@
     }));
   }
 
+  private getItemUrl_(): string {
+    return this.item_.url || '';
+  }
+
   private onItemIdChanged_() {
     // TODO(tsergeant): Add a histogram to measure whether this assertion fails
     // for real users.
diff --git a/chrome/browser/resources/chromeos/crostini_upgrader/index.html b/chrome/browser/resources/chromeos/crostini_upgrader/index.html
index 50d60ef..f670e6b 100644
--- a/chrome/browser/resources/chromeos/crostini_upgrader/index.html
+++ b/chrome/browser/resources/chromeos/crostini_upgrader/index.html
@@ -8,7 +8,7 @@
     }
   </style>
   <link rel="stylesheet" href="chrome://resources/css/text_defaults_md.css">
-  <link rel="stylesheet" href="chrome://resources/chromeos/colors/cros_colors.generated.css">
+  <link rel="stylesheet" href="chrome://resources/chromeos/colors/cros_styles.css">
   <script type="module" src="app.js"></script>
 </head>
 <body>
diff --git a/chrome/browser/resources/chromeos/emoji_picker/index.html b/chrome/browser/resources/chromeos/emoji_picker/index.html
index 3709ab1..21dfdcfb 100644
--- a/chrome/browser/resources/chromeos/emoji_picker/index.html
+++ b/chrome/browser/resources/chromeos/emoji_picker/index.html
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML>
 <html>
 <head>
-  <link rel="stylesheet" href="chrome://resources/chromeos/colors/cros_colors.generated.css">
+  <link rel="stylesheet" href="chrome://resources/chromeos/colors/cros_styles.css">
   <meta charset="utf-8">
   <title>Emoji Picker</title>
   <script type="module" src="emoji_picker.js"></script>
diff --git a/chrome/browser/resources/chromeos/zip_archiver/html/passphrase-dialog.html b/chrome/browser/resources/chromeos/zip_archiver/html/passphrase-dialog.html
index 63221385..3807409 100644
--- a/chrome/browser/resources/chromeos/zip_archiver/html/passphrase-dialog.html
+++ b/chrome/browser/resources/chromeos/zip_archiver/html/passphrase-dialog.html
@@ -1,7 +1,7 @@
 <link rel="import" href="chrome://resources/html/polymer.html">
 
 
-<link rel="stylesheet" href="chrome://resources/chromeos/colors/cros_colors.generated.css">
+<link rel="stylesheet" href="chrome://resources/chromeos/colors/cros_styles.css">
 
 <link rel="import" href="chrome://resources/cr_elements/cr_button/cr_button.html">
 <link rel="import" href="chrome://resources/cr_elements/cr_input/cr_input.html">
diff --git a/chrome/browser/resources/settings/chromeos/BUILD.gn b/chrome/browser/resources/settings/chromeos/BUILD.gn
index 9560e31..1b980b0 100644
--- a/chrome/browser/resources/settings/chromeos/BUILD.gn
+++ b/chrome/browser/resources/settings/chromeos/BUILD.gn
@@ -59,7 +59,7 @@
       "chrome://resources/cr_components/chromeos/cellular_setup/mojo_interface_provider.m.js",
       "chrome://resources/cr_components/chromeos/network/mojo_interface_provider.m.js",
       "chrome://resources/js/cr.m.js",
-      "chrome://resources/chromeos/colors/cros_colors.generated.css",
+      "chrome://resources/chromeos/colors/cros_styles.css",
       "chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js",
       "chrome://resources/mojo/url/mojom/url.mojom-lite.js",
       "chrome://resources/mojo/skia/public/mojom/bitmap.mojom-lite.js",
diff --git a/chrome/browser/resources/settings/chromeos/os_bluetooth_page/BUILD.gn b/chrome/browser/resources/settings/chromeos/os_bluetooth_page/BUILD.gn
index 3d560bb6..a34f989 100644
--- a/chrome/browser/resources/settings/chromeos/os_bluetooth_page/BUILD.gn
+++ b/chrome/browser/resources/settings/chromeos/os_bluetooth_page/BUILD.gn
@@ -52,7 +52,6 @@
     ":os_paired_bluetooth_list_item",
     "//third_party/polymer/v3_0/components-chromium/iron-list:iron-list",
     "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
-    "//ui/webui/resources/cr_elements:cr_scrollable_behavior.m",
   ]
 }
 
diff --git a/chrome/browser/resources/settings/chromeos/os_bluetooth_page/os_paired_bluetooth_list.html b/chrome/browser/resources/settings/chromeos/os_bluetooth_page/os_paired_bluetooth_list.html
index 374815b..de4e45a9 100644
--- a/chrome/browser/resources/settings/chromeos/os_bluetooth_page/os_paired_bluetooth_list.html
+++ b/chrome/browser/resources/settings/chromeos/os_bluetooth_page/os_paired_bluetooth_list.html
@@ -6,11 +6,11 @@
 <!-- TODO(crbug.com/1010321): Populate with real data. -->
 <div id="container" class="layout vertical flex" scrollable
     no-bottom-scroll-border>
-  <iron-list items="[[devices]]" scroll-target="container" preserve-focus>
+  <iron-list items="[[devices_]]" scroll-target="container" preserve-focus>
     <template>
-      <!-- TODO(crbug.com/1010321): Fix focus behavior. -->
-      <os-settings-paired-bluetooth-list-item
-          tabindex="[[tabIndex]]">
+      <!-- TODO(crbug.com/1010321): Add focus behavior,
+           fix not all elements rendering in large lists. -->
+      <os-settings-paired-bluetooth-list-item>
       </os-settings-paired-bluetooth-list-item>
     </template>
   </iron-list>
diff --git a/chrome/browser/resources/settings/chromeos/os_bluetooth_page/os_paired_bluetooth_list.js b/chrome/browser/resources/settings/chromeos/os_bluetooth_page/os_paired_bluetooth_list.js
index 3a1b55e..086cb74d 100644
--- a/chrome/browser/resources/settings/chromeos/os_bluetooth_page/os_paired_bluetooth_list.js
+++ b/chrome/browser/resources/settings/chromeos/os_bluetooth_page/os_paired_bluetooth_list.js
@@ -11,20 +11,10 @@
 import './os_paired_bluetooth_list_item.js';
 
 import '//resources/polymer/v3_0/iron-list/iron-list.js';
-import {CrScrollableBehavior, CrScrollableBehaviorInterface} from '//resources/cr_elements/cr_scrollable_behavior.m.js';
-import {html, mixinBehaviors, PolymerElement} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js';
-
-/**
- * @constructor
- * @extends {PolymerElement}
- * @implements {CrScrollableBehaviorInterface}
- */
-const SettingsPairedBluetoothListElementBase =
-    mixinBehaviors([CrScrollableBehavior], PolymerElement);
+import {html, PolymerElement} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
 /** @polymer */
-class SettingsPairedBluetoothListElement extends
-    SettingsPairedBluetoothListElementBase {
+class SettingsPairedBluetoothListElement extends PolymerElement {
   static get is() {
     return 'os-settings-paired-bluetooth-list';
   }
@@ -39,20 +29,14 @@
        * TODO(crbug.com/1010321): Use actual Device objects.
        * @private {Array<Object>}
        */
-      devices: {
+      devices_: {
         type: Array,
-        observer: 'onDevicesChanged_',
-        value: [],
+        value() {
+          return [{}, {}, {}];
+        }
       }
     };
   }
-
-  /** @private */
-  onDevicesChanged_() {
-    // CrScrollableBehaviorInterface method required for list items to be
-    // properly rendered when devices updates.
-    this.updateScrollableContents();
-  }
 }
 
 customElements.define(
diff --git a/chrome/browser/resources/settings/chromeos/os_settings_v3.html b/chrome/browser/resources/settings/chromeos/os_settings_v3.html
index 82cab7f6d..d66992e 100644
--- a/chrome/browser/resources/settings/chromeos/os_settings_v3.html
+++ b/chrome/browser/resources/settings/chromeos/os_settings_v3.html
@@ -4,7 +4,7 @@
   <meta charset="utf-8">
   <title>$i18n{settings}</title>
   <base href="chrome://os-settings">
-  <link rel="stylesheet" href="chrome://resources/chromeos/colors/cros_colors.generated.css">
+  <link rel="stylesheet" href="chrome://resources/chromeos/colors/cros_styles.css">
   <style>
     /* The :not(body) selector allows the variable definitions below to 'win'
        against the shared ones. */
diff --git a/chrome/browser/send_tab_to_self/receiving_ui_handler_registry.cc b/chrome/browser/send_tab_to_self/receiving_ui_handler_registry.cc
index f5115d0..b0b4324 100644
--- a/chrome/browser/send_tab_to_self/receiving_ui_handler_registry.cc
+++ b/chrome/browser/send_tab_to_self/receiving_ui_handler_registry.cc
@@ -7,6 +7,7 @@
 #include <vector>
 
 #include "base/memory/singleton.h"
+#include "base/notreached.h"
 #include "build/build_config.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/send_tab_to_self/receiving_ui_handler.h"
@@ -72,6 +73,10 @@
   return button_controller;
 #elif defined(OS_ANDROID)
   return nullptr;
+#elif defined(OS_FUCHSIA)
+  // TODO(crbug.com/1235293)
+  NOTIMPLEMENTED_LOG_ONCE();
+  return nullptr;
 #endif
 }
 
diff --git a/chrome/browser/sessions/tab_restore_service_factory.cc b/chrome/browser/sessions/tab_restore_service_factory.cc
index ca0c8677..fac93868 100644
--- a/chrome/browser/sessions/tab_restore_service_factory.cc
+++ b/chrome/browser/sessions/tab_restore_service_factory.cc
@@ -11,6 +11,19 @@
 #include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/sessions/core/tab_restore_service_impl.h"
 
+namespace {
+
+std::unique_ptr<KeyedService> BuildTemplateService(
+    content::BrowserContext* browser_context) {
+  Profile* profile = Profile::FromBrowserContext(browser_context);
+  DCHECK(!profile->IsOffTheRecord());
+  auto client = std::make_unique<ChromeTabRestoreServiceClient>(profile);
+  return std::make_unique<sessions::TabRestoreServiceImpl>(
+      std::move(client), profile->GetPrefs(), nullptr);
+}
+
+}  // namespace
+
 // static
 sessions::TabRestoreService* TabRestoreServiceFactory::GetForProfile(
     Profile* profile) {
@@ -36,13 +49,18 @@
   return base::Singleton<TabRestoreServiceFactory>::get();
 }
 
+// static
+BrowserContextKeyedServiceFactory::TestingFactory
+TabRestoreServiceFactory::GetDefaultFactory() {
+  return base::BindRepeating(&BuildTemplateService);
+}
+
 TabRestoreServiceFactory::TabRestoreServiceFactory()
     : BrowserContextKeyedServiceFactory(
           "sessions::TabRestoreService",
           BrowserContextDependencyManager::GetInstance()) {}
 
-TabRestoreServiceFactory::~TabRestoreServiceFactory() {
-}
+TabRestoreServiceFactory::~TabRestoreServiceFactory() = default;
 
 bool TabRestoreServiceFactory::ServiceIsNULLWhileTesting() const {
   return true;
@@ -50,11 +68,5 @@
 
 KeyedService* TabRestoreServiceFactory::BuildServiceInstanceFor(
     content::BrowserContext* browser_context) const {
-  Profile* profile = Profile::FromBrowserContext(browser_context);
-  DCHECK(!profile->IsOffTheRecord());
-  std::unique_ptr<sessions::TabRestoreServiceClient> client(
-      new ChromeTabRestoreServiceClient(profile));
-
-  return new sessions::TabRestoreServiceImpl(std::move(client),
-                                             profile->GetPrefs(), nullptr);
+  return BuildTemplateService(browser_context).release();
 }
diff --git a/chrome/browser/sessions/tab_restore_service_factory.h b/chrome/browser/sessions/tab_restore_service_factory.h
index 20b82cc..180d325 100644
--- a/chrome/browser/sessions/tab_restore_service_factory.h
+++ b/chrome/browser/sessions/tab_restore_service_factory.h
@@ -29,6 +29,9 @@
 
   static TabRestoreServiceFactory* GetInstance();
 
+  // Returns the default factory, useful in tests where it's null by default.
+  static TestingFactory GetDefaultFactory();
+
  private:
   friend struct base::DefaultSingletonTraits<TabRestoreServiceFactory>;
 
diff --git a/chrome/browser/site_isolation/chrome_site_per_process_browsertest.cc b/chrome/browser/site_isolation/chrome_site_per_process_browsertest.cc
index ec60a931..73ae3d20 100644
--- a/chrome/browser/site_isolation/chrome_site_per_process_browsertest.cc
+++ b/chrome/browser/site_isolation/chrome_site_per_process_browsertest.cc
@@ -1252,16 +1252,9 @@
 // Tests that a same-site iframe runs its beforeunload handler when closing a
 // tab.  Same as the test above, but for a same-site rather than cross-site
 // iframe.  See https://crbug.com/1010456.
-// Flaky on Linux, ChromeOS and Windows (crbug.com/1033002)
-#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_WIN)
-#define MAYBE_TabCloseWithSameSiteBeforeUnloadIframe \
-  DISABLED_TabCloseWithSameSiteBeforeUnloadIframe
-#else
-#define MAYBE_TabCloseWithSameSiteBeforeUnloadIframe \
-  TabCloseWithSameSiteBeforeUnloadIframe
-#endif
+// Flaky (timeout) on Linux, ChromeOS, MacOS, and Windows (crbug.com/1033002)
 IN_PROC_BROWSER_TEST_F(ChromeSitePerProcessTest,
-                       MAYBE_TabCloseWithSameSiteBeforeUnloadIframe) {
+                       DISABLED_TabCloseWithSameSiteBeforeUnloadIframe) {
   TabStripModel* tab_strip_model = browser()->tab_strip_model();
   content::WebContents* first_web_contents =
       tab_strip_model->GetActiveWebContents();
diff --git a/chrome/browser/sync/test/integration/enable_disable_test.cc b/chrome/browser/sync/test/integration/enable_disable_test.cc
index af94b83c5..1f510be 100644
--- a/chrome/browser/sync/test/integration/enable_disable_test.cc
+++ b/chrome/browser/sync/test/integration/enable_disable_test.cc
@@ -127,9 +127,7 @@
   DISALLOW_COPY_AND_ASSIGN(EnableDisableSingleClientTest);
 };
 
-// Flaky. See crbug.com/1235856.
-IN_PROC_BROWSER_TEST_F(EnableDisableSingleClientTest,
-                       DISABLED_EnableOneAtATime) {
+IN_PROC_BROWSER_TEST_F(EnableDisableSingleClientTest, EnableOneAtATime) {
   // Setup sync with no enabled types.
   SetupTest(/*all_types_enabled=*/false);
 
diff --git a/chrome/browser/sync/test/integration/single_client_nigori_sync_test.cc b/chrome/browser/sync/test/integration/single_client_nigori_sync_test.cc
index ec568823..4a15b365 100644
--- a/chrome/browser/sync/test/integration/single_client_nigori_sync_test.cc
+++ b/chrome/browser/sync/test/integration/single_client_nigori_sync_test.cc
@@ -15,6 +15,7 @@
 #include "base/test/task_environment.h"
 #include "base/time/time.h"
 #include "build/chromeos_buildflags.h"
+#include "chrome/browser/signin/identity_manager_factory.h"
 #include "chrome/browser/sync/sync_ui_util.h"
 #include "chrome/browser/sync/test/integration/bookmarks_helper.h"
 #include "chrome/browser/sync/test/integration/cookie_helper.h"
@@ -30,6 +31,7 @@
 #include "chrome/grit/generated_resources.h"
 #include "components/password_manager/core/browser/password_manager_features_util.h"
 #include "components/password_manager/core/common/password_manager_features.h"
+#include "components/signin/public/identity_manager/identity_test_utils.h"
 #include "components/sync/base/sync_base_switches.h"
 #include "components/sync/base/time.h"
 #include "components/sync/driver/sync_driver_switches.h"
@@ -801,23 +803,23 @@
           .Wait());
   EXPECT_TRUE(keys_fetched_checker.Wait());
 
+  // TrustedVaultClient handles IdentityManager state changes after refresh
+  // tokens are loaded.
+  // TODO(crbug.com/1148328): |keys_cleared_checker| should be sufficient alone
+  // once test properly manipulates AccountsInCookieJarInfo (this likely
+  // involves using FakeGaia).
+  signin::WaitForRefreshTokensLoaded(
+      IdentityManagerFactory::GetForProfile(GetProfile(0)));
+
   // Mimic signin cookie clearing.
   TrustedVaultKeysChangedStateChecker keys_cleared_checker(GetSyncService(0));
   cookie_helper::DeleteSigninCookies(GetProfile(0));
   EXPECT_TRUE(keys_cleared_checker.Wait());
 }
 
-// Failing on Mac 10.11 (See http://crbug.com/1235658)
-#if defined(OS_MAC)
-#define MAYBE_ShouldClearEncryptionKeysFromTheWebWhenSigninCookiesCleared \
-    DISABLED_ShouldClearEncryptionKeysFromTheWebWhenSigninCookiesCleared
-#else
-#define MAYBE_ShouldClearEncryptionKeysFromTheWebWhenSigninCookiesCleared \
-    ShouldClearEncryptionKeysFromTheWebWhenSigninCookiesCleared
-#endif
 IN_PROC_BROWSER_TEST_F(
     SingleClientNigoriWithWebApiTest,
-    MAYBE_ShouldClearEncryptionKeysFromTheWebWhenSigninCookiesCleared) {
+    ShouldClearEncryptionKeysFromTheWebWhenSigninCookiesCleared) {
   const std::vector<uint8_t> kTestEncryptionKey = {1, 2, 3, 4};
 
   // Mimic the account being already using a trusted vault passphrase.
diff --git a/chrome/browser/tracing/crash_service_uploader.cc b/chrome/browser/tracing/crash_service_uploader.cc
index c349384..29f395f 100644
--- a/chrome/browser/tracing/crash_service_uploader.cc
+++ b/chrome/browser/tracing/crash_service_uploader.cc
@@ -162,6 +162,8 @@
   const char product[] = "Chrome_Linux";
 #elif defined(OS_ANDROID)
   const char product[] = "Chrome_Android";
+#elif defined(OS_FUCHSIA)
+  const char product[] = "Chrome_Fuchsia";
 #else
 #error Platform not supported.
 #endif
diff --git a/chrome/browser/ui/cocoa/history_menu_bridge.h b/chrome/browser/ui/cocoa/history_menu_bridge.h
index 3754c47..1a81df9 100644
--- a/chrome/browser/ui/cocoa/history_menu_bridge.h
+++ b/chrome/browser/ui/cocoa/history_menu_bridge.h
@@ -245,11 +245,18 @@
   void OnHistoryServiceLoaded(history::HistoryService* service) override;
   void HistoryServiceBeingDeleted(history::HistoryService* service) override;
 
+  // Changes the visibility of the menu items depend on the current profile
+  // type.
+  void SetVisibilityOfMenuItems();
+
+  // Returns if the given menu item should be visible for the current profile.
+  bool ShouldMenuItemBeVisible(NSMenuItem* item);
+
   base::scoped_nsobject<HistoryMenuCocoaController> controller_;  // strong
 
-  Profile* profile_;  // weak
-  history::HistoryService* history_service_;  // weak
-  sessions::TabRestoreService* tab_restore_service_;  // weak
+  Profile* const profile_;                                      // weak
+  history::HistoryService* history_service_ = nullptr;          // weak
+  sessions::TabRestoreService* tab_restore_service_ = nullptr;  // weak
 
   base::CancelableTaskTracker cancelable_task_tracker_;
 
@@ -260,8 +267,8 @@
   // when either waiting for the history service to return query results, or
   // when the menu is rebuilding. |need_recreate_| is true whenever a rebuild
   // has been scheduled but is waiting for the current one to finish.
-  bool create_in_progress_;
-  bool need_recreate_;
+  bool create_in_progress_ = false;
+  bool need_recreate_ = false;
 
   // In order to not jarringly refresh the menu while the user has it open,
   // updates are blocked while the menu is tracking.
@@ -273,13 +280,9 @@
   base::ScopedObservation<history::HistoryService,
                           history::HistoryServiceObserver>
       history_service_observation_{this};
-
-  // Changes the visibility of the menu items depend on the current profile
-  // type.
-  void SetVisibilityOfMenuItems();
-
-  // Returns if the given menu item should be visible for the current profile.
-  bool ShouldMenuItemBeVisible(NSMenuItem* item);
+  base::ScopedObservation<sessions::TabRestoreService,
+                          sessions::TabRestoreServiceObserver>
+      tab_restore_service_observation_{this};
 
   DISALLOW_COPY_AND_ASSIGN(HistoryMenuBridge);
 };
diff --git a/chrome/browser/ui/cocoa/history_menu_bridge.mm b/chrome/browser/ui/cocoa/history_menu_bridge.mm
index 1aeb648..26e3b23 100644
--- a/chrome/browser/ui/cocoa/history_menu_bridge.mm
+++ b/chrome/browser/ui/cocoa/history_menu_bridge.mm
@@ -66,11 +66,8 @@
 
 HistoryMenuBridge::HistoryMenuBridge(Profile* profile)
     : controller_([[HistoryMenuCocoaController alloc] initWithBridge:this]),
-      profile_(profile),
-      history_service_(NULL),
-      tab_restore_service_(NULL),
-      create_in_progress_(false),
-      need_recreate_(false) {
+      profile_(profile) {
+  DCHECK(profile_);
   // Set the static icons in the menu.
   ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
   NSMenuItem* full_history_item = [HistoryMenu() itemWithTag:IDC_SHOW_HISTORY];
@@ -81,44 +78,40 @@
   [incognito_disclaimer_item
       setImage:rb.GetNativeImageNamed(IDR_INFO_FAVICON).ToNSImage()];
 
-  // If we don't have a profile, do not bother initializing our data sources.
-  // This shouldn't happen except in unit tests.
-  if (profile_) {
-    // Set the visibility of menu items according to profile type.
-    // "Recently Visited", "Recently Closed" and "Show Full History" sections
-    // should be hidden for incognito mode, while incognito disclaimer should be
-    // visible.
-    SetVisibilityOfMenuItems();
+  // Set the visibility of menu items according to profile type.
+  // "Recently Visited", "Recently Closed" and "Show Full History" sections
+  // should be hidden for incognito mode, while incognito disclaimer should be
+  // visible.
+  SetVisibilityOfMenuItems();
 
-    // If the profile is incognito, no need to set history and tab restore
-    // services.
-    if (profile_->IsOffTheRecord())
-      return;
+  // If the profile is incognito, no need to set history and tab restore
+  // services.
+  if (profile_->IsOffTheRecord())
+    return;
 
-    // Check to see if the history service is ready. Because it loads async, it
-    // may not be ready when the Bridge is created. If this happens, register
-    // for a notification that tells us the HistoryService is ready.
-    history::HistoryService* hs = HistoryServiceFactory::GetForProfile(
-        profile_, ServiceAccessType::EXPLICIT_ACCESS);
-    if (hs) {
-      history_service_observation_.Observe(hs);
-      if (hs->BackendLoaded()) {
-        history_service_ = hs;
-        Init();
-      }
+  // Check to see if the history service is ready. Because it loads async, it
+  // may not be ready when the Bridge is created. If this happens, register for
+  // a notification that tells us the HistoryService is ready.
+  history::HistoryService* hs = HistoryServiceFactory::GetForProfile(
+      profile_, ServiceAccessType::EXPLICIT_ACCESS);
+  if (hs) {
+    history_service_observation_.Observe(hs);
+    if (hs->BackendLoaded()) {
+      history_service_ = hs;
+      Init();
     }
+  }
 
-    tab_restore_service_ = TabRestoreServiceFactory::GetForProfile(profile_);
-    if (tab_restore_service_) {
-      tab_restore_service_->AddObserver(this);
-      // If the tab entries are already loaded, invoke the observer method to
-      // build the "Recently Closed" section. Otherwise it will be when the
-      // backend loads.
-      if (!tab_restore_service_->IsLoaded())
-        tab_restore_service_->LoadTabsFromLastSession();
-      else
-        TabRestoreServiceChanged(tab_restore_service_);
-    }
+  tab_restore_service_ = TabRestoreServiceFactory::GetForProfile(profile_);
+  if (tab_restore_service_) {
+    tab_restore_service_observation_.Observe(tab_restore_service_);
+    // If the tab entries are already loaded, invoke the observer method to
+    // build the "Recently Closed" section. Otherwise it will be when the
+    // backend loads.
+    if (!tab_restore_service_->IsLoaded())
+      tab_restore_service_->LoadTabsFromLastSession();
+    else
+      TabRestoreServiceChanged(tab_restore_service_);
   }
 
   default_favicon_.reset(
@@ -130,13 +123,7 @@
 // Note that all requests sent to either the history service or the favicon
 // service will be automatically cancelled by their respective Consumers, so
 // task cancellation is not done manually here in the dtor.
-HistoryMenuBridge::~HistoryMenuBridge() {
-  // Unregister ourselves as observers and notifications.
-  DCHECK(profile_);
-
-  if (tab_restore_service_)
-    tab_restore_service_->RemoveObserver(this);
-}
+HistoryMenuBridge::~HistoryMenuBridge() = default;
 
 void HistoryMenuBridge::TabRestoreServiceChanged(
     sessions::TabRestoreService* service) {
@@ -182,7 +169,9 @@
 
 void HistoryMenuBridge::TabRestoreServiceDestroyed(
     sessions::TabRestoreService* service) {
-  // Intentionally left blank. We hold a weak reference to the service.
+  DCHECK_EQ(service, tab_restore_service_);
+  tab_restore_service_observation_.Reset();
+  tab_restore_service_ = nullptr;
 }
 
 void HistoryMenuBridge::ResetMenu() {
@@ -573,8 +562,8 @@
 
 void HistoryMenuBridge::HistoryServiceBeingDeleted(
     history::HistoryService* history_service) {
-  if (history_service_ == history_service)
-    history_service_ = nullptr;
+  history_service_observation_.Reset();
+  history_service_ = nullptr;
 }
 
 void HistoryMenuBridge::SetVisibilityOfMenuItems() {
diff --git a/chrome/browser/ui/cocoa/history_menu_bridge_unittest.mm b/chrome/browser/ui/cocoa/history_menu_bridge_unittest.mm
index 08ad7c2f..008dd9a2 100644
--- a/chrome/browser/ui/cocoa/history_menu_bridge_unittest.mm
+++ b/chrome/browser/ui/cocoa/history_menu_bridge_unittest.mm
@@ -18,6 +18,7 @@
 #include "chrome/browser/favicon/favicon_service_factory.h"
 #include "chrome/browser/history/history_service_factory.h"
 #include "chrome/browser/sessions/chrome_tab_restore_service_client.h"
+#include "chrome/browser/sessions/tab_restore_service_factory.h"
 #include "chrome/browser/ui/cocoa/test/cocoa_test_helper.h"
 #include "chrome/common/chrome_features.h"
 #include "chrome/test/base/browser_with_test_window_test.h"
@@ -39,7 +40,7 @@
  public:
   MockTRS(Profile* profile)
       : sessions::TabRestoreServiceImpl(
-            base::WrapUnique(new ChromeTabRestoreServiceClient(profile)),
+            std::make_unique<ChromeTabRestoreServiceClient>(profile),
             profile->GetPrefs(),
             nullptr) {}
   MOCK_CONST_METHOD0(entries, const sessions::TabRestoreService::Entries&());
@@ -551,4 +552,36 @@
   CheckMenuItemVisibility(this, true);
 }
 
+// Does a full setup and tear down of the bridge.
+TEST(HistoryMenuBridgeLifetimeTest, ShutdownAfterProfile) {
+  content::BrowserTaskEnvironment task_environment;
+  TestingProfile::Builder profile_builder;
+  profile_builder.AddTestingFactory(
+      TabRestoreServiceFactory::GetInstance(),
+      TabRestoreServiceFactory::GetDefaultFactory());
+  profile_builder.AddTestingFactory(HistoryServiceFactory::GetInstance(),
+                                    HistoryServiceFactory::GetDefaultFactory());
+  std::unique_ptr<TestingProfile> profile = profile_builder.Build();
+
+  auto bridge = std::make_unique<HistoryMenuBridge>(profile.get());
+  profile.reset();
+  // Should not crash.
+  bridge.reset();
+}
+
+// Does a full setup and tear down of the bridge.
+TEST(HistoryMenuBridgeLifetimeTest, ShutdownBeforeProfile) {
+  content::BrowserTaskEnvironment task_environment;
+  TestingProfile::Builder profile_builder;
+  profile_builder.AddTestingFactory(
+      TabRestoreServiceFactory::GetInstance(),
+      TabRestoreServiceFactory::GetDefaultFactory());
+  profile_builder.AddTestingFactory(HistoryServiceFactory::GetInstance(),
+                                    HistoryServiceFactory::GetDefaultFactory());
+  std::unique_ptr<TestingProfile> profile = profile_builder.Build();
+
+  auto bridge = std::make_unique<HistoryMenuBridge>(profile.get());
+  bridge.reset();
+}
+
 }  // namespace
diff --git a/chrome/browser/ui/views/apps/app_info_dialog/app_info_summary_panel.cc b/chrome/browser/ui/views/apps/app_info_dialog/app_info_summary_panel.cc
index 5cdeea4..43d1596 100644
--- a/chrome/browser/ui/views/apps/app_info_dialog/app_info_summary_panel.cc
+++ b/chrome/browser/ui/views/apps/app_info_dialog/app_info_summary_panel.cc
@@ -109,7 +109,7 @@
 
 AppInfoSummaryPanel::~AppInfoSummaryPanel() {
   // Destroy view children before their models.
-  RemoveAllChildViews(true);
+  RemoveAllChildViews();
 }
 
 void AppInfoSummaryPanel::AddDescriptionAndLinksControl(
diff --git a/chrome/browser/ui/views/autofill/address_editor_view.cc b/chrome/browser/ui/views/autofill/address_editor_view.cc
index e421535..c5af8f3 100644
--- a/chrome/browser/ui/views/autofill/address_editor_view.cc
+++ b/chrome/browser/ui/views/autofill/address_editor_view.cc
@@ -179,7 +179,7 @@
 }
 
 void AddressEditorView::UpdateEditorView() {
-  RemoveAllChildViews(true);
+  RemoveAllChildViews();
   CreateEditorView();
   PreferredSizeChanged();
 
diff --git a/chrome/browser/ui/views/autofill/autofill_popup_view_native_views.cc b/chrome/browser/ui/views/autofill/autofill_popup_view_native_views.cc
index 556ed85..ba561925 100644
--- a/chrome/browser/ui/views/autofill/autofill_popup_view_native_views.cc
+++ b/chrome/browser/ui/views/autofill/autofill_popup_view_native_views.cc
@@ -1229,7 +1229,7 @@
 }
 
 void AutofillPopupViewNativeViews::CreateChildViews() {
-  RemoveAllChildViews(true /* delete_children */);
+  RemoveAllChildViews();
   rows_.clear();
   scroll_view_ = nullptr;
   body_container_ = nullptr;
diff --git a/chrome/browser/ui/views/autofill/autofill_popup_view_native_views_unittest.cc b/chrome/browser/ui/views/autofill/autofill_popup_view_native_views_unittest.cc
index 2237e64..472eb70f1 100644
--- a/chrome/browser/ui/views/autofill/autofill_popup_view_native_views_unittest.cc
+++ b/chrome/browser/ui/views/autofill/autofill_popup_view_native_views_unittest.cc
@@ -247,7 +247,7 @@
 
   generator_->set_current_screen_location(center);
   generator_->ClickLeftButton();
-  view()->RemoveAllChildViews(true /* delete_children */);
+  view()->RemoveAllChildViews();
 }
 
 INSTANTIATE_TEST_SUITE_P(All,
diff --git a/chrome/browser/ui/views/autofill/payments/card_unmask_prompt_views.cc b/chrome/browser/ui/views/autofill/payments/card_unmask_prompt_views.cc
index bd903f8..d3b85d6 100644
--- a/chrome/browser/ui/views/autofill/payments/card_unmask_prompt_views.cc
+++ b/chrome/browser/ui/views/autofill/payments/card_unmask_prompt_views.cc
@@ -139,7 +139,7 @@
       SetRetriableErrorMessage(std::u16string());
 
       // Rows cannot be replaced in GridLayout, so we reset it.
-      overlay_->RemoveAllChildViews(/*delete_children=*/true);
+      overlay_->RemoveAllChildViews();
       views::GridLayout* layout = ResetOverlayLayout(overlay_);
 
       // The label of the overlay will now show the error in red.
diff --git a/chrome/browser/ui/views/autofill/payments/local_card_migration_dialog_view.cc b/chrome/browser/ui/views/autofill/payments/local_card_migration_dialog_view.cc
index 369b9a51..b08d2d508 100644
--- a/chrome/browser/ui/views/autofill/payments/local_card_migration_dialog_view.cc
+++ b/chrome/browser/ui/views/autofill/payments/local_card_migration_dialog_view.cc
@@ -489,7 +489,7 @@
              LocalCardMigrationDialogState::kOffered ||
          children().empty());
 
-  RemoveAllChildViews(/*delete_children=*/true);
+  RemoveAllChildViews();
 
   SetLayoutManager(std::make_unique<views::BoxLayout>(
       views::BoxLayout::Orientation::kVertical, gfx::Insets(),
diff --git a/chrome/browser/ui/views/autofill/payments/virtual_card_selection_dialog_view_impl.cc b/chrome/browser/ui/views/autofill/payments/virtual_card_selection_dialog_view_impl.cc
index c10bbc8..0a5f44d 100644
--- a/chrome/browser/ui/views/autofill/payments/virtual_card_selection_dialog_view_impl.cc
+++ b/chrome/browser/ui/views/autofill/payments/virtual_card_selection_dialog_view_impl.cc
@@ -84,7 +84,7 @@
 }
 
 views::View* VirtualCardSelectionDialogViewImpl::GetContentsView() {
-  RemoveAllChildViews(/*delete_children=*/true);
+  RemoveAllChildViews();
 
   SetLayoutManager(std::make_unique<views::BoxLayout>(
       views::BoxLayout::Orientation::kVertical, gfx::Insets(),
diff --git a/chrome/browser/ui/views/chrome_javascript_app_modal_view_factory_views.cc b/chrome/browser/ui/views/chrome_javascript_app_modal_view_factory_views.cc
index b731b50..dd3d65e 100644
--- a/chrome/browser/ui/views/chrome_javascript_app_modal_view_factory_views.cc
+++ b/chrome/browser/ui/views/chrome_javascript_app_modal_view_factory_views.cc
@@ -13,6 +13,7 @@
 #include "components/javascript_dialogs/views/app_modal_dialog_view_views.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/browser/web_contents_delegate.h"
+#include "ui/display/screen.h"
 #include "ui/gfx/native_widget_types.h"
 #include "ui/views/widget/widget.h"
 
@@ -79,6 +80,19 @@
   PopunderPreventer popunder_preventer_;
 };
 
+void AdjustWidgetBoundsIfOffscreen(views::Widget* widget) {
+  gfx::Rect widget_bounds = widget->GetWindowBoundsInScreen();
+  gfx::Rect screen_rect =
+      display::Screen::GetScreen()
+          ->GetDisplayNearestPoint(widget_bounds.CenterPoint())
+          .work_area();
+
+  if (!screen_rect.Contains(widget_bounds)) {
+    widget_bounds.AdjustToFit(screen_rect);
+    widget->SetBounds(widget_bounds);
+  }
+}
+
 javascript_dialogs::AppModalDialogView* CreateViewsJavaScriptDialog(
     javascript_dialogs::AppModalDialogController* controller) {
   javascript_dialogs::AppModalDialogViewViews* dialog =
@@ -94,7 +108,9 @@
     parent_window = nullptr;
   }
 #endif
-  constrained_window::CreateBrowserModalDialogViews(dialog, parent_window);
+  views::Widget* widget =
+      constrained_window::CreateBrowserModalDialogViews(dialog, parent_window);
+  AdjustWidgetBoundsIfOffscreen(widget);
   return dialog;
 }
 
diff --git a/chrome/browser/ui/views/content_setting_bubble_contents.cc b/chrome/browser/ui/views/content_setting_bubble_contents.cc
index b0d4adc..fff69b1 100644
--- a/chrome/browser/ui/views/content_setting_bubble_contents.cc
+++ b/chrome/browser/ui/views/content_setting_bubble_contents.cc
@@ -414,7 +414,7 @@
 ContentSettingBubbleContents::~ContentSettingBubbleContents() {
   // Must remove the children here so the comboboxes get destroyed before
   // their associated models.
-  RemoveAllChildViews(true);
+  RemoveAllChildViews();
 }
 
 void ContentSettingBubbleContents::WindowClosing() {
diff --git a/chrome/browser/ui/views/extensions/extensions_toolbar_container.cc b/chrome/browser/ui/views/extensions/extensions_toolbar_container.cc
index 0ab40e1..3fa85549 100644
--- a/chrome/browser/ui/views/extensions/extensions_toolbar_container.cc
+++ b/chrome/browser/ui/views/extensions/extensions_toolbar_container.cc
@@ -111,7 +111,7 @@
 ExtensionsToolbarContainer::~ExtensionsToolbarContainer() {
   // The child views hold pointers to the |actions_|, and thus need to be
   // destroyed before them.
-  RemoveAllChildViews(true);
+  RemoveAllChildViews();
 
   // Create a copy of the anchored widgets, since |anchored_widgets_| will
   // be modified by closing them.
diff --git a/chrome/browser/ui/views/extensions/media_galleries_dialog_views.cc b/chrome/browser/ui/views/extensions/media_galleries_dialog_views.cc
index 6eb5c0e..a74e299 100644
--- a/chrome/browser/ui/views/extensions/media_galleries_dialog_views.cc
+++ b/chrome/browser/ui/views/extensions/media_galleries_dialog_views.cc
@@ -126,7 +126,7 @@
 
 void MediaGalleriesDialogViews::InitChildViews() {
   // Outer dialog layout.
-  contents_->RemoveAllChildViews(true);
+  contents_->RemoveAllChildViews();
   checkbox_map_.clear();
 
   ChromeLayoutProvider* provider = ChromeLayoutProvider::Get();
diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc
index 1743dde..197914a 100644
--- a/chrome/browser/ui/views/frame/browser_view.cc
+++ b/chrome/browser/ui/views/frame/browser_view.cc
@@ -742,7 +742,7 @@
 
   // Child views maintain PrefMember attributes that point to
   // OffTheRecordProfile's PrefService which gets deleted by ~Browser.
-  RemoveAllChildViews(true);
+  RemoveAllChildViews();
 }
 
 // static
diff --git a/chrome/browser/ui/views/global_media_controls/media_notification_footer_view.cc b/chrome/browser/ui/views/global_media_controls/media_notification_footer_view.cc
index 14c21dbb..f180acc 100644
--- a/chrome/browser/ui/views/global_media_controls/media_notification_footer_view.cc
+++ b/chrome/browser/ui/views/global_media_controls/media_notification_footer_view.cc
@@ -108,7 +108,7 @@
 
 void MediaNotificationFooterView::OnMediaNotificationDeviceSelectorUpdated(
     const std::map<int, DeviceEntryUI*>& device_entries_map) {
-  RemoveAllChildViews(true);
+  RemoveAllChildViews();
 
   for (const auto& entry : device_entries_map) {
     int tag = entry.first;
diff --git a/chrome/browser/ui/views/page_info/page_info_bubble_view_dialog_browsertest.cc b/chrome/browser/ui/views/page_info/page_info_bubble_view_dialog_browsertest.cc
index b36888e..5eab404 100644
--- a/chrome/browser/ui/views/page_info/page_info_bubble_view_dialog_browsertest.cc
+++ b/chrome/browser/ui/views/page_info/page_info_bubble_view_dialog_browsertest.cc
@@ -245,13 +245,13 @@
       if (is_page_info_v2_enabled()) {
         auto* main_page = static_cast<PageInfoMainView*>(current_ui);
         main_page->selector_rows_.clear();
-        main_page->permissions_view_->RemoveAllChildViews(true);
+        main_page->permissions_view_->RemoveAllChildViews();
 
       } else {
         auto* page_info_bubble_view =
             static_cast<PageInfoBubbleView*>(bubble_view);
         page_info_bubble_view->selector_rows_.clear();
-        page_info_bubble_view->permissions_view_->RemoveAllChildViews(true);
+        page_info_bubble_view->permissions_view_->RemoveAllChildViews();
       }
 
       current_ui->SetPermissionInfo(permissions_list,
diff --git a/chrome/browser/ui/views/page_info/page_info_main_view.cc b/chrome/browser/ui/views/page_info/page_info_main_view.cc
index 57d68889..86f3f3b 100644
--- a/chrome/browser/ui/views/page_info/page_info_main_view.cc
+++ b/chrome/browser/ui/views/page_info/page_info_main_view.cc
@@ -160,7 +160,7 @@
     const PermissionInfoList& permission_info_list,
     ChosenObjectInfoList chosen_object_info_list) {
   if (permission_info_list.empty() && chosen_object_info_list.empty()) {
-    permissions_view_->RemoveAllChildViews(true);
+    permissions_view_->RemoveAllChildViews();
     return;
   }
 
@@ -300,7 +300,7 @@
 
   title_->SetText(base::UTF8ToUTF16(identity_info.site_identity));
 
-  security_container_view_->RemoveAllChildViews(true);
+  security_container_view_->RemoveAllChildViews();
   if (security_description->summary_style == SecuritySummaryColor::GREEN) {
     // base::Unretained(navigation_handler_) is safe because navigation_handler_
     // is the bubble view which is the owner of this view and therefore will
diff --git a/chrome/browser/ui/views/page_info/security_information_view.cc b/chrome/browser/ui/views/page_info/security_information_view.cc
index dc72171..d888c17 100644
--- a/chrome/browser/ui/views/page_info/security_information_view.cc
+++ b/chrome/browser/ui/views/page_info/security_information_view.cc
@@ -141,7 +141,7 @@
     base::RepeatingClosure reset_decisions_callback) {
   if (!reset_decisions_label_container_->children().empty()) {
     // Ensure all old content is removed from the container before re-adding it.
-    reset_decisions_label_container_->RemoveAllChildViews(true);
+    reset_decisions_label_container_->RemoveAllChildViews();
   }
 
   std::vector<std::u16string> subst;
@@ -192,7 +192,7 @@
     views::Button::PressedCallback password_reuse_callback) {
   if (!password_reuse_button_container_->children().empty()) {
     // Ensure all old content is removed from the container before re-adding it.
-    password_reuse_button_container_->RemoveAllChildViews(true /* delete */);
+    password_reuse_button_container_->RemoveAllChildViews();
   }
 
   int change_password_template = 0;
diff --git a/chrome/browser/ui/views/passwords/password_generation_popup_view_views.cc b/chrome/browser/ui/views/passwords/password_generation_popup_view_views.cc
index 1b000258..5271003 100644
--- a/chrome/browser/ui/views/passwords/password_generation_popup_view_views.cc
+++ b/chrome/browser/ui/views/passwords/password_generation_popup_view_views.cc
@@ -186,7 +186,7 @@
 }
 
 void PasswordGenerationPopupViewViews::UpdateState() {
-  RemoveAllChildViews(true);
+  RemoveAllChildViews();
   password_view_ = nullptr;
   help_label_ = nullptr;
   CreateLayoutAndChildren();
diff --git a/chrome/browser/ui/views/passwords/password_items_view.cc b/chrome/browser/ui/views/passwords/password_items_view.cc
index cf944b01..6b51bbf4 100644
--- a/chrome/browser/ui/views/passwords/password_items_view.cc
+++ b/chrome/browser/ui/views/passwords/password_items_view.cc
@@ -308,7 +308,7 @@
   // recreated.
   DCHECK(!controller_.local_credentials().empty());
 
-  RemoveAllChildViews(true);
+  RemoveAllChildViews();
 
   views::GridLayout* grid_layout =
       SetLayoutManager(std::make_unique<views::GridLayout>());
diff --git a/chrome/browser/ui/views/payments/editor_view_controller.cc b/chrome/browser/ui/views/payments/editor_view_controller.cc
index 8c3818e0..ab19723 100644
--- a/chrome/browser/ui/views/payments/editor_view_controller.cc
+++ b/chrome/browser/ui/views/payments/editor_view_controller.cc
@@ -496,7 +496,7 @@
   DCHECK(label_view_it != error_labels_.end());
 
   if (error_message.empty()) {
-    label_view_it->second->RemoveAllChildViews(/*delete_children=*/true);
+    label_view_it->second->RemoveAllChildViews();
   } else {
     if (label_view_it->second->children().empty()) {
       // If there was no error label view, add it.
diff --git a/chrome/browser/ui/views/payments/payment_credential_enrollment_dialog_view.cc b/chrome/browser/ui/views/payments/payment_credential_enrollment_dialog_view.cc
index e659b0b..705f95c 100644
--- a/chrome/browser/ui/views/payments/payment_credential_enrollment_dialog_view.cc
+++ b/chrome/browser/ui/views/payments/payment_credential_enrollment_dialog_view.cc
@@ -172,7 +172,7 @@
 }
 
 void PaymentCredentialEnrollmentDialogView::InitChildViews() {
-  RemoveAllChildViews(true);
+  RemoveAllChildViews();
 
   SetLayoutManager(std::make_unique<views::BoxLayout>(
       views::BoxLayout::Orientation::kVertical, gfx::Insets(), 0));
diff --git a/chrome/browser/ui/views/payments/payment_request_sheet_controller.cc b/chrome/browser/ui/views/payments/payment_request_sheet_controller.cc
index 7b0892f..d782c03 100644
--- a/chrome/browser/ui/views/payments/payment_request_sheet_controller.cc
+++ b/chrome/browser/ui/views/payments/payment_request_sheet_controller.cc
@@ -301,7 +301,7 @@
   if (!is_active_)
     return;
 
-  content_view_->RemoveAllChildViews(true);
+  content_view_->RemoveAllChildViews();
   FillContentView(content_view_);
   RelayoutPane();
 }
@@ -311,7 +311,7 @@
   if (!is_active_)
     return;
 
-  header_view_->RemoveAllChildViews(true);
+  header_view_->RemoveAllChildViews();
   PopulateSheetHeaderView(
       ShouldShowHeaderBackArrow(), CreateHeaderContentView(header_view_),
       base::BindRepeating(&PaymentRequestSheetController::BackButtonPressed,
diff --git a/chrome/browser/ui/views/payments/secure_payment_confirmation_dialog_view.cc b/chrome/browser/ui/views/payments/secure_payment_confirmation_dialog_view.cc
index 14c4b209..bacbd922 100644
--- a/chrome/browser/ui/views/payments/secure_payment_confirmation_dialog_view.cc
+++ b/chrome/browser/ui/views/payments/secure_payment_confirmation_dialog_view.cc
@@ -216,7 +216,7 @@
 }
 
 void SecurePaymentConfirmationDialogView::InitChildViews() {
-  RemoveAllChildViews(true);
+  RemoveAllChildViews();
 
   SetLayoutManager(std::make_unique<views::BoxLayout>(
       views::BoxLayout::Orientation::kVertical, gfx::Insets(), 0));
diff --git a/chrome/browser/ui/views/permission_bubble/permission_prompt_bubble_view_browsertest.cc b/chrome/browser/ui/views/permission_bubble/permission_prompt_bubble_view_browsertest.cc
index fa16724..fd77ba45 100644
--- a/chrome/browser/ui/views/permission_bubble/permission_prompt_bubble_view_browsertest.cc
+++ b/chrome/browser/ui/views/permission_bubble/permission_prompt_bubble_view_browsertest.cc
@@ -260,7 +260,8 @@
       ASSERT_TRUE(chip);
 
       EXPECT_TRUE(chip->should_expand_for_testing());
-      EXPECT_TRUE(chip->get_chip_button_for_testing()->is_animating());
+      // TODO(crbug.com/1232460): Verify that OmniboxChipButton::is_animating is
+      // true. Right now the value is flaky.
       EXPECT_EQ(OmniboxChipButton::Theme::kBlue,
                 chip->get_chip_button_for_testing()->get_theme_for_testing());
 
@@ -760,9 +761,8 @@
           : permissions::PermissionPromptDisposition::ANCHORED_BUBBLE);
 }
 
-// TODO(crbug.com/1232460): Flaky
 IN_PROC_BROWSER_TEST_P(QuietChipPermissionPromptBubbleViewBrowserTest,
-                       DISABLED_QuietChipIsShownForAbusiveRequests) {
+                       QuietChipIsShownForAbusiveRequests) {
   for (QuietUiReason reason : {QuietUiReason::kTriggeredByCrowdDeny,
                                QuietUiReason::kTriggeredDueToAbusiveRequests,
                                QuietUiReason::kTriggeredDueToAbusiveContent}) {
diff --git a/chrome/browser/ui/views/policy/enterprise_startup_dialog_view.cc b/chrome/browser/ui/views/policy/enterprise_startup_dialog_view.cc
index cd852fd..d0587ed 100644
--- a/chrome/browser/ui/views/policy/enterprise_startup_dialog_view.cc
+++ b/chrome/browser/ui/views/policy/enterprise_startup_dialog_view.cc
@@ -208,7 +208,7 @@
   DCHECK(GetOkButton());
 
   GetOkButton()->SetVisible(show_accept_button);
-  RemoveAllChildViews(true);
+  RemoveAllChildViews();
 }
 
 void EnterpriseStartupDialogView::SetupLayout(
diff --git a/chrome/browser/ui/views/profiles/profile_menu_view_base.cc b/chrome/browser/ui/views/profiles/profile_menu_view_base.cc
index 2d954e6..b885a34 100644
--- a/chrome/browser/ui/views/profiles/profile_menu_view_base.cc
+++ b/chrome/browser/ui/views/profiles/profile_menu_view_base.cc
@@ -587,7 +587,7 @@
     const ui::ThemedVectorIcon& avatar_header_art) {
   constexpr int kBottomMargin = kDefaultMargin;
 
-  identity_info_container_->RemoveAllChildViews(/*delete_children=*/true);
+  identity_info_container_->RemoveAllChildViews();
   // The colored background fully bleeds to the edges of the menu and to achieve
   // that margin is set to 0. Further margins will be added by children views.
   identity_info_container_->SetLayoutManager(
@@ -655,7 +655,7 @@
       ChromeLayoutProvider::Get()->GetDistanceMetric(
           views::DISTANCE_RELATED_LABEL_HORIZONTAL);
 
-  sync_info_container_->RemoveAllChildViews(/*delete_children=*/true);
+  sync_info_container_->RemoveAllChildViews();
   sync_info_container_->SetLayoutManager(std::make_unique<views::FlexLayout>())
       ->SetOrientation(views::LayoutOrientation::kVertical)
       .SetIgnoreDefaultMainAxisMargins(true)
@@ -727,7 +727,7 @@
 void ProfileMenuViewBase::BuildSyncInfoWithoutCallToAction(
     const std::u16string& text,
     const base::RepeatingClosure& action) {
-  sync_info_container_->RemoveAllChildViews(/*delete_children=*/true);
+  sync_info_container_->RemoveAllChildViews();
   sync_info_container_->SetLayoutManager(std::make_unique<views::FillLayout>());
   sync_info_container_->AddChildView(std::make_unique<SyncButton>(
       base::BindRepeating(&ProfileMenuViewBase::ButtonPressed,
@@ -919,7 +919,7 @@
 }
 
 void ProfileMenuViewBase::Reset() {
-  RemoveAllChildViews(/*delete_childen=*/true);
+  RemoveAllChildViews();
 
   auto components = std::make_unique<views::View>();
   components->SetLayoutManager(std::make_unique<views::FlexLayout>())
diff --git a/chrome/browser/ui/views/profiles/profile_picker_sign_in_flow_controller.cc b/chrome/browser/ui/views/profiles/profile_picker_sign_in_flow_controller.cc
index 82072c99..76f097f 100644
--- a/chrome/browser/ui/views/profiles/profile_picker_sign_in_flow_controller.cc
+++ b/chrome/browser/ui/views/profiles/profile_picker_sign_in_flow_controller.cc
@@ -8,6 +8,7 @@
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_attributes_entry.h"
 #include "chrome/browser/profiles/profile_attributes_storage.h"
+#include "chrome/browser/profiles/profile_avatar_icon_util.h"
 #include "chrome/browser/profiles/profile_keep_alive_types.h"
 #include "chrome/browser/profiles/profile_manager.h"
 #include "chrome/browser/profiles/profile_window.h"
@@ -133,16 +134,8 @@
 
 ProfilePickerSignInFlowController::ProfilePickerSignInFlowController(
     ProfilePickerWebContentsHost* host,
-    Profile* profile,
-    absl::optional<SkColor> profile_color,
     base::TimeDelta extended_account_info_timeout)
     : host_(host),
-      contents_(content::WebContents::Create(
-          content::WebContents::CreateParams(profile))),
-      profile_(profile),
-      profile_keep_alive_(profile_,
-                          ProfileKeepAliveOrigin::kProfileCreationFlow),
-      profile_color_(profile_color),
       extended_account_info_timeout_(extended_account_info_timeout) {}
 
 ProfilePickerSignInFlowController::~ProfilePickerSignInFlowController() {
@@ -166,7 +159,58 @@
   }
 }
 
-void ProfilePickerSignInFlowController::Init() {
+void ProfilePickerSignInFlowController::SwitchToSignIn(
+    absl::optional<SkColor> profile_color,
+    base::OnceCallback<void(bool)> switch_finished_callback) {
+  // Update the color even if the profile is already initialized (to respect
+  // potentially different choice now).
+  profile_color_ = profile_color;
+
+  if (IsInitialized()) {
+    std::move(switch_finished_callback).Run(true);
+    // Do not load any url because the desired sign-in screen is still loaded in
+    // `contents()`.
+    host_->ShowScreen(contents(), GURL(), /*show_toolbar=*/true);
+    return;
+  }
+
+  size_t icon_index = profiles::GetPlaceholderAvatarIndex();
+  // Silently create the new profile for browsing on GAIA (so that the sign-in
+  // cookies are stored in the right profile).
+  ProfileManager::CreateMultiProfileAsync(
+      g_browser_process->profile_manager()
+          ->GetProfileAttributesStorage()
+          .ChooseNameForNewProfile(icon_index),
+      icon_index, /*is_hidden=*/true,
+      base::BindRepeating(&ProfilePickerSignInFlowController::OnProfileCreated,
+                          weak_ptr_factory_.GetWeakPtr(),
+                          base::OwnedRef(std::move(switch_finished_callback))));
+}
+
+// TODO(crbug.com/1227029): Move the function to respect declaration order.
+void ProfilePickerSignInFlowController::OnProfileCreated(
+    base::OnceCallback<void(bool)>& switch_finished_callback,
+    Profile* new_profile,
+    Profile::CreateStatus status) {
+  if (status == Profile::CREATE_STATUS_LOCAL_FAIL) {
+    std::move(switch_finished_callback).Run(false);
+    return;
+  }
+  if (status != Profile::CREATE_STATUS_INITIALIZED) {
+    return;
+  }
+
+  DCHECK(new_profile);
+  DCHECK(!profile_);
+  DCHECK(!contents());
+  std::move(switch_finished_callback).Run(true);
+
+  profile_ = new_profile;
+  profile_keep_alive_ = std::make_unique<ScopedProfileKeepAlive>(
+      profile_, ProfileKeepAliveOrigin::kProfileCreationFlow);
+
+  contents_ = content::WebContents::Create(
+      content::WebContents::CreateParams(profile_));
   contents()->SetDelegate(this);
 
   // Create a manager that supports modal dialogs, such as for webauthn.
@@ -214,7 +258,9 @@
                     /*show_toolbar=*/true);
 }
 
+// TODO(crbug.com/1227029): Move the function to respect declaration order.
 void ProfilePickerSignInFlowController::Cancel() {
+  DCHECK(IsInitialized());
   if (is_finished_)
     return;
 
@@ -226,20 +272,18 @@
       profile_->GetPath(), base::DoNothing());
 }
 
+// TODO(crbug.com/1227029): Move the function to respect declaration order.
 void ProfilePickerSignInFlowController::ReloadSignInPage() {
-  if (contents() && IsSigningIn()) {
+  if (IsInitialized() && contents() && IsSigningIn()) {
     contents()->GetController().Reload(content::ReloadType::BYPASSING_CACHE,
                                        true);
   }
 }
 
-void ProfilePickerSignInFlowController::SetProfileColor(
-    absl::optional<SkColor> color) {
-  profile_color_ = color;
-}
-
+// TODO(crbug.com/1227029): Move the function down to respect declaration order.
 absl::optional<SkColor> ProfilePickerSignInFlowController::GetProfileColor()
     const {
+  DCHECK(IsInitialized());
   // The new profile theme may be overridden by an existing policy theme. This
   // check ensures the correct theme is applied to the sync confirmation window.
   auto* theme_service = ThemeServiceFactory::GetForProfile(profile_);
@@ -255,10 +299,13 @@
 
 const ui::ThemeProvider* ProfilePickerSignInFlowController::GetThemeProvider()
     const {
+  if (!IsInitialized())
+    return nullptr;
   return &ThemeService::GetThemeProviderForProfile(profile_);
 }
 
 void ProfilePickerSignInFlowController::SwitchToSyncConfirmation() {
+  DCHECK(IsInitialized());
   host_->ShowScreen(
       contents(), GURL(chrome::kChromeUISyncConfirmationURL),
       /*show_toolbar=*/false,
@@ -271,8 +318,10 @@
           base::Unretained(this)));
 }
 
+// TODO(crbug.com/1227029): Move the function to respect declaration order.
 void ProfilePickerSignInFlowController::SwitchToProfileSwitch(
     const base::FilePath& profile_path) {
+  DCHECK(IsInitialized());
   // The sign-in flow is finished, no profile window should be shown in the end.
   Cancel();
 
@@ -286,6 +335,7 @@
 void ProfilePickerSignInFlowController::SwitchToEnterpriseProfileWelcome(
     EnterpriseProfileWelcomeUI::ScreenType type,
     base::OnceCallback<void(bool)> proceed_callback) {
+  DCHECK(IsInitialized());
   host_->ShowScreen(contents(),
                     GURL(chrome::kChromeUIEnterpriseProfileWelcomeURL),
                     /*show_toolbar=*/false,
@@ -344,6 +394,7 @@
 
 void ProfilePickerSignInFlowController::OnRefreshTokenUpdatedForAccount(
     const CoreAccountInfo& account_info) {
+  DCHECK(IsInitialized());
   DCHECK(!account_info.IsEmpty());
   email_ = account_info.email;
 
@@ -382,6 +433,7 @@
 
 void ProfilePickerSignInFlowController::OnExtendedAccountInfoUpdated(
     const AccountInfo& account_info) {
+  DCHECK(IsInitialized());
   if (!account_info.IsValid())
     return;
   name_for_signed_in_profile_ =
@@ -393,12 +445,14 @@
 
 void ProfilePickerSignInFlowController::OnExtendedAccountInfoTimeout(
     const CoreAccountInfo& account) {
+  DCHECK(IsInitialized());
   name_for_signed_in_profile_ =
       profiles::GetDefaultNameForNewSignedInProfileWithIncompleteInfo(account);
   OnProfileNameAvailable();
 }
 
 void ProfilePickerSignInFlowController::OnProfileNameAvailable() {
+  DCHECK(IsInitialized());
   // Stop listening to further changes.
   DCHECK(identity_manager_observation_.IsObservingSource(
       IdentityManagerFactory::GetForProfile(profile_)));
@@ -409,6 +463,7 @@
 }
 
 void ProfilePickerSignInFlowController::SwitchToSyncConfirmationFinished() {
+  DCHECK(IsInitialized());
   // Initialize the WebUI page once we know it's committed.
   SyncConfirmationUI* sync_confirmation_ui =
       static_cast<SyncConfirmationUI*>(contents()->GetWebUI()->GetController());
@@ -421,6 +476,7 @@
     SwitchToEnterpriseProfileWelcomeFinished(
         EnterpriseProfileWelcomeUI::ScreenType type,
         base::OnceCallback<void(bool)> proceed_callback) {
+  DCHECK(IsInitialized());
   // Initialize the WebUI page once we know it's committed.
   EnterpriseProfileWelcomeUI* enterprise_profile_welcome_ui =
       contents()
@@ -435,9 +491,15 @@
       GetProfileColor(), std::move(proceed_callback));
 }
 
+bool ProfilePickerSignInFlowController::IsInitialized() const {
+  return profile_ != nullptr;
+}
+
+// TODO(crbug.com/1227029): Move the function to respect declaration order.
 void ProfilePickerSignInFlowController::FinishAndOpenBrowser(
     BrowserOpenedCallback callback,
     bool enterprise_sync_consent_needed) {
+  DCHECK(IsInitialized());
   // Do nothing if the sign-in flow is aborted or if this has already been
   // called. Note that this can get called first time from a special case
   // handling (such as the Settings link) and than second time when the
@@ -460,6 +522,7 @@
 void ProfilePickerSignInFlowController::FinishAndOpenBrowserImpl(
     BrowserOpenedCallback callback,
     bool enterprise_sync_consent_needed) {
+  DCHECK(IsInitialized());
   DCHECK(!name_for_signed_in_profile_.empty());
 
   ProfileAttributesEntry* entry =
@@ -512,6 +575,7 @@
 }
 
 void ProfilePickerSignInFlowController::FinishAndOpenBrowserForSAML() {
+  DCHECK(IsInitialized());
   // First, free up `contents()` to be moved to a new browser window.
   host_->ShowScreenInSystemContents(
       GURL(url::kAboutBlankURL),
@@ -525,6 +589,7 @@
 }
 
 void ProfilePickerSignInFlowController::OnSignInContentsFreedUp() {
+  DCHECK(IsInitialized());
   DCHECK(!is_finished_);
   is_finished_ = true;
 
@@ -541,6 +606,7 @@
     BrowserOpenedCallback finish_flow_callback,
     Profile* profile,
     Profile::CreateStatus profile_create_status) {
+  DCHECK(IsInitialized());
   CHECK_EQ(profile, profile_);
 
   // Hide the flow window. This posts a task on the message loop to destroy the
diff --git a/chrome/browser/ui/views/profiles/profile_picker_sign_in_flow_controller.h b/chrome/browser/ui/views/profiles/profile_picker_sign_in_flow_controller.h
index 71e7eab3..4fa10ec 100644
--- a/chrome/browser/ui/views/profiles/profile_picker_sign_in_flow_controller.h
+++ b/chrome/browser/ui/views/profiles/profile_picker_sign_in_flow_controller.h
@@ -44,8 +44,6 @@
 
   ProfilePickerSignInFlowController(
       ProfilePickerWebContentsHost* host,
-      Profile* profile,
-      absl::optional<SkColor> profile_color,
       base::TimeDelta extended_account_info_timeout);
   ~ProfilePickerSignInFlowController() override;
   ProfilePickerSignInFlowController(const ProfilePickerSignInFlowController&) =
@@ -53,36 +51,38 @@
   ProfilePickerSignInFlowController& operator=(
       const ProfilePickerSignInFlowController&) = delete;
 
-  // Must be called after constructor.
-  void Init();
+  // Initiates switching the flow to sign-in. When it is done,
+  // `switch_finished_callback` gets called. If a sign-in was in progress before
+  // in the lifetime of this class, it only switches the view to show the
+  // ongoing sign-in again (and updates color for the new profile to
+  // `profile_color`).
+  void SwitchToSignIn(absl::optional<SkColor> profile_color,
+                      base::OnceCallback<void(bool)> switch_finished_callback);
 
-  // Cancels the flow explicitly. This does not log any metrics, the caller
-  // must take care of logging the outcome of the flow on its own.
-  void Cancel();
+  // Returns true if the user is not yet authenticated.
+  bool IsSigningIn() const;
 
   // Reloads the sign-in page if applicable.
   void ReloadSignInPage();
 
-  // TODO(crbug.com/1227029): Make private as an implementation detail of the
-  // DICe flow.
-  content::WebContents* contents() const { return contents_.get(); }
-
-  // Updates the profile color provided in the constructor. absl::optional
-  // denotes the default theme.
-  void SetProfileColor(absl::optional<SkColor> color);
-  // Returns the profile color, taking into account current policies.
-  // Returns absl::nullopt for the default theme.
-  absl::optional<SkColor> GetProfileColor() const;
-
-  bool IsSigningIn() const;
-
-  // Returns theme provider based on `profile_`.
+  // Returns theme provider based on the sign-in profile or nullptr if the flow
+  // is not yet initialized.
   const ui::ThemeProvider* GetThemeProvider() const;
 
   // Getter of the path of profile which is displayed on the profile switch
   // screen. Returns an empty path if no such screen has been displayed.
   base::FilePath switch_profile_path() const { return switch_profile_path_; }
 
+  // Sign-in flow operations.
+  //
+  // All the following public functions can only be called after the flow gets
+  // initialized. The flow is initialized when the `switch_finished_callback`
+  // provided in SwitchToSignIn() gets called with success (true value).
+
+  // Cancels the flow explicitly. This does not log any metrics, the caller
+  // must take care of logging the outcome of the flow on its own.
+  void Cancel();
+
   // Finishes the creation flow by marking `profile_being_created_` as fully
   // created, opening a browser window for this profile and calling
   // `callback`.
@@ -139,6 +139,19 @@
       EnterpriseProfileWelcomeUI::ScreenType type,
       base::OnceCallback<void(bool)> proceed_callback);
 
+  // Initializes the flow with the newly created profile.
+  void OnProfileCreated(
+      base::OnceCallback<void(bool)>& switch_finished_callback,
+      Profile* new_profile,
+      Profile::CreateStatus status);
+
+  // Returns whether the flow is initialized (i.e. whether `profile_` has been
+  // created).
+  bool IsInitialized() const;
+
+  // Returns the profile color, taking into account current policies.
+  absl::optional<SkColor> GetProfileColor() const;
+
   void FinishAndOpenBrowserImpl(BrowserOpenedCallback callback,
                                 bool enterprise_sync_consent_needed);
 
@@ -153,17 +166,19 @@
                        Profile* profile,
                        Profile::CreateStatus profile_create_status);
 
+  content::WebContents* contents() const { return contents_.get(); }
+
   // The host object, must outlive this object.
   ProfilePickerWebContentsHost* host_;
 
-  // The web contents backed by `profile`. This is used for displaying the
-  // sign-in flow.
-  std::unique_ptr<content::WebContents> contents_;
-
   Profile* profile_ = nullptr;
 
   // Prevent |profile_| from being destroyed first.
-  ScopedProfileKeepAlive profile_keep_alive_;
+  std::unique_ptr<ScopedProfileKeepAlive> profile_keep_alive_;
+
+  // The web contents backed by `profile`. This is used for displaying the
+  // sign-in flow.
+  std::unique_ptr<content::WebContents> contents_;
 
   // Set for the profile at the very end to avoid coloring the simple toolbar
   // for GAIA sign-in (that uses the ThemeProvider of the current profile).
diff --git a/chrome/browser/ui/views/profiles/profile_picker_view.cc b/chrome/browser/ui/views/profiles/profile_picker_view.cc
index 5fca1de..5777e94 100644
--- a/chrome/browser/ui/views/profiles/profile_picker_view.cc
+++ b/chrome/browser/ui/views/profiles/profile_picker_view.cc
@@ -578,31 +578,29 @@
 void ProfilePickerView::SwitchToSignIn(
     absl::optional<SkColor> profile_color,
     base::OnceCallback<void(bool)> switch_finished_callback) {
-  if (sign_in_) {
-    // The profile is already created (the user went back and forth again). No
-    // need to create it again.
-    std::move(switch_finished_callback).Run(true);
-    // The color might be different for the second time (as the user could go to
-    // the local customization flow and change the color there) so update it.
-    sign_in_->SetProfileColor(profile_color);
-    // Do not load any url because the desired sign-in screen is still loaded in
-    // `sign_in_->contents`.
-    ShowScreen(sign_in_->contents(), GURL(),
-               /*show_toolbar=*/true);
+  // TODO(crbug.com/1227029): Consider having forced signin as another
+  // implementation of an abstract signin interface to move the code out of
+  // this class.
+  if (signin_util::IsForceSigninEnabled()) {
+    size_t icon_index = profiles::GetPlaceholderAvatarIndex();
+    ProfileManager::CreateMultiProfileAsync(
+        g_browser_process->profile_manager()
+            ->GetProfileAttributesStorage()
+            .ChooseNameForNewProfile(icon_index),
+        icon_index, /*is_hidden=*/true,
+        base::BindRepeating(
+            &ProfilePickerView::OnProfileForForcedSigninCreated,
+            weak_ptr_factory_.GetWeakPtr(),
+            base::OwnedRef(std::move(switch_finished_callback))));
     return;
   }
 
-  size_t icon_index = profiles::GetPlaceholderAvatarIndex();
-  // Silently create the new profile for browsing on GAIA (so that the sign-in
-  // cookies are stored in the right profile).
-  ProfileManager::CreateMultiProfileAsync(
-      g_browser_process->profile_manager()
-          ->GetProfileAttributesStorage()
-          .ChooseNameForNewProfile(icon_index),
-      icon_index, /*is_hidden=*/true,
-      base::BindRepeating(&ProfilePickerView::OnProfileForSigninCreated,
-                          weak_ptr_factory_.GetWeakPtr(), profile_color,
-                          base::OwnedRef(std::move(switch_finished_callback))));
+  if (!sign_in_) {
+    sign_in_ = std::make_unique<ProfilePickerSignInFlowController>(
+        this, extended_account_info_timeout_);
+  }
+
+  sign_in_->SwitchToSignIn(profile_color, std::move(switch_finished_callback));
 }
 
 void ProfilePickerView::CancelSignIn() {
@@ -624,7 +622,7 @@
       ShowScreenInSystemContents(GURL(), /*show_toolbar=*/false);
       // Reset the sign-in flow.
       sign_in_.reset();
-      toolbar_->RemoveAllChildViews(/*delete_children=*/true);
+      toolbar_->RemoveAllChildViews();
       return;
     }
     case ProfilePicker::EntryPoint::kProfileMenuAddNewProfile: {
@@ -635,11 +633,12 @@
   }
 }
 
-void ProfilePickerView::OnProfileForSigninCreated(
-    absl::optional<SkColor> profile_color,
+void ProfilePickerView::OnProfileForForcedSigninCreated(
     base::OnceCallback<void(bool)>& switch_finished_callback,
     Profile* profile,
     Profile::CreateStatus status) {
+  DCHECK(signin_util::IsForceSigninEnabled());
+
   if (status == Profile::CREATE_STATUS_LOCAL_FAIL) {
     std::move(switch_finished_callback).Run(false);
     return;
@@ -650,16 +649,8 @@
   DCHECK(profile);
   std::move(switch_finished_callback).Run(true);
 
-  if (signin_util::IsForceSigninEnabled()) {
-    // Show the embedded sign-in flow if the force signin is enabled.
-    ProfilePickerForceSigninDialog::ShowForceSigninDialog(
-        web_view_->GetWebContents()->GetBrowserContext(), profile->GetPath());
-    return;
-  }
-
-  sign_in_ = std::make_unique<ProfilePickerSignInFlowController>(
-      this, profile, profile_color, extended_account_info_timeout_);
-  sign_in_->Init();
+  ProfilePickerForceSigninDialog::ShowForceSigninDialog(
+      web_view_->GetWebContents()->GetBrowserContext(), profile->GetPath());
 }
 
 void ProfilePickerView::WindowClosing() {
diff --git a/chrome/browser/ui/views/profiles/profile_picker_view.h b/chrome/browser/ui/views/profiles/profile_picker_view.h
index 2854540..d177ffc 100644
--- a/chrome/browser/ui/views/profiles/profile_picker_view.h
+++ b/chrome/browser/ui/views/profiles/profile_picker_view.h
@@ -137,9 +137,9 @@
   // Cancel the sign-in flow and returns back to the main picker screen (if the
   // original EntryPoint was to open the picker).
   void CancelSignIn();
-  // On creation success for the sign-in profile, it rebuilds the view.
-  void OnProfileForSigninCreated(
-      absl::optional<SkColor> profile_color,
+
+  // Handles profile creation when forced sign-in is enabled.
+  void OnProfileForForcedSigninCreated(
       base::OnceCallback<void(bool)>& switch_finished_callback,
       Profile* new_profile,
       Profile::CreateStatus status);
diff --git a/chrome/browser/ui/views/tabs/color_picker_view.cc b/chrome/browser/ui/views/tabs/color_picker_view.cc
index 5a4b1040..d8d7ca8 100644
--- a/chrome/browser/ui/views/tabs/color_picker_view.cc
+++ b/chrome/browser/ui/views/tabs/color_picker_view.cc
@@ -253,7 +253,7 @@
 ColorPickerView::~ColorPickerView() {
   // Remove child views early since they have references to us through a
   // callback.
-  RemoveAllChildViews(true);
+  RemoveAllChildViews();
 }
 
 absl::optional<int> ColorPickerView::GetSelectedElement() const {
diff --git a/chrome/browser/ui/views/tabs/stacked_tab_strip_layout_unittest.cc b/chrome/browser/ui/views/tabs/stacked_tab_strip_layout_unittest.cc
index 07bbf09..2a23fef 100644
--- a/chrome/browser/ui/views/tabs/stacked_tab_strip_layout_unittest.cc
+++ b/chrome/browser/ui/views/tabs/stacked_tab_strip_layout_unittest.cc
@@ -84,7 +84,7 @@
 
   void PrepareChildViews(int count) {
     view_model_.Clear();
-    view_.RemoveAllChildViews(true);
+    view_.RemoveAllChildViews();
     for (int i = 0; i < count; ++i)
       AddViewToViewModel(i);
   }
diff --git a/chrome/browser/ui/views/tabs/tab_strip.cc b/chrome/browser/ui/views/tabs/tab_strip.cc
index 0c5be9d8..2c94eb0 100644
--- a/chrome/browser/ui/views/tabs/tab_strip.cc
+++ b/chrome/browser/ui/views/tabs/tab_strip.cc
@@ -1161,7 +1161,7 @@
 
   // The child tabs may call back to us from their destructors. Delete them so
   // that if they call back we aren't in a weird state.
-  RemoveAllChildViews(true);
+  RemoveAllChildViews();
 
   CHECK(!IsInObserverList());
 }
diff --git a/chrome/browser/ui/views/task_manager_view.cc b/chrome/browser/ui/views/task_manager_view.cc
index c85ab8a..eb7ca4f 100644
--- a/chrome/browser/ui/views/task_manager_view.cc
+++ b/chrome/browser/ui/views/task_manager_view.cc
@@ -63,7 +63,7 @@
 
 TaskManagerView::~TaskManagerView() {
   // Delete child views now, while our table model still exists.
-  RemoveAllChildViews(true);
+  RemoveAllChildViews();
 }
 
 // static
diff --git a/chrome/browser/ui/views/toolbar/toolbar_icon_container_view.cc b/chrome/browser/ui/views/toolbar/toolbar_icon_container_view.cc
index 5253acd..2490475 100644
--- a/chrome/browser/ui/views/toolbar/toolbar_icon_container_view.cc
+++ b/chrome/browser/ui/views/toolbar/toolbar_icon_container_view.cc
@@ -129,7 +129,7 @@
 ToolbarIconContainerView::~ToolbarIconContainerView() {
   // As childred might be Observers of |this|, we need to destroy them before
   // destroying |observers_|.
-  RemoveAllChildViews(true);
+  RemoveAllChildViews();
 }
 
 void ToolbarIconContainerView::AddMainButton(views::Button* main_button) {
diff --git a/chrome/browser/ui/views/touch_selection_menu_chromeos.cc b/chrome/browser/ui/views/touch_selection_menu_chromeos.cc
index adf1c3e..69622cd 100644
--- a/chrome/browser/ui/views/touch_selection_menu_chromeos.cc
+++ b/chrome/browser/ui/views/touch_selection_menu_chromeos.cc
@@ -44,7 +44,7 @@
   // default action buttons are already added, we should remove the existent
   // buttons if any, and then call CreateButtons, this will call the parent
   // method too.
-  RemoveAllChildViews(/*delete_children=*/true);
+  RemoveAllChildViews();
 
   CreateButtons();
 }
diff --git a/chrome/browser/ui/views/translate/translate_bubble_view.cc b/chrome/browser/ui/views/translate/translate_bubble_view.cc
index cb330a0..4944127 100644
--- a/chrome/browser/ui/views/translate/translate_bubble_view.cc
+++ b/chrome/browser/ui/views/translate/translate_bubble_view.cc
@@ -141,7 +141,7 @@
   // the child view is destructed. For example, |source_language_combobx_model_|
   // is referred by Combobox's destructor. Before destroying the models,
   // removing the child views is needed.
-  RemoveAllChildViews(true);
+  RemoveAllChildViews();
 }
 
 DEFINE_CLASS_ELEMENT_IDENTIFIER_VALUE(TranslateBubbleView, kIdentifier);
diff --git a/chrome/browser/ui/views/webauthn/authenticator_request_dialog_view.cc b/chrome/browser/ui/views/webauthn/authenticator_request_dialog_view.cc
index a147107d..f6aad06 100644
--- a/chrome/browser/ui/views/webauthn/authenticator_request_dialog_view.cc
+++ b/chrome/browser/ui/views/webauthn/authenticator_request_dialog_view.cc
@@ -63,7 +63,7 @@
   // ObservableAuthenticatorList is owned by AuthenticatorRequestDialogModel,
   // destroy all view components that might own models observing the list prior
   // to destroying AuthenticatorRequestDialogModel.
-  RemoveAllChildViews(true /* delete_children */);
+  RemoveAllChildViews();
 }
 
 void AuthenticatorRequestDialogView::ReplaceCurrentSheetWith(
diff --git a/chrome/browser/ui/views/webauthn/authenticator_request_sheet_view.cc b/chrome/browser/ui/views/webauthn/authenticator_request_sheet_view.cc
index 7c29f6c..3913b48 100644
--- a/chrome/browser/ui/views/webauthn/authenticator_request_sheet_view.cc
+++ b/chrome/browser/ui/views/webauthn/authenticator_request_sheet_view.cc
@@ -49,7 +49,7 @@
 AuthenticatorRequestSheetView::~AuthenticatorRequestSheetView() = default;
 
 void AuthenticatorRequestSheetView::ReInitChildViews() {
-  RemoveAllChildViews(true /* delete_children */);
+  RemoveAllChildViews();
 
   // No need to add further spacing between the upper and lower half. The image
   // is designed to fill the dialog's top half without any border/margins, and
diff --git a/chrome/browser/ui/views/webid/webid_signin_page_view.cc b/chrome/browser/ui/views/webid/webid_signin_page_view.cc
index f377e50..8c2e2fcd 100644
--- a/chrome/browser/ui/views/webid/webid_signin_page_view.cc
+++ b/chrome/browser/ui/views/webid/webid_signin_page_view.cc
@@ -157,7 +157,7 @@
 }
 
 void SigninPageView::UpdateHeaderView() {
-  header_view_->RemoveAllChildViews(true);
+  header_view_->RemoveAllChildViews();
   header_view_->AddChildView(std::make_unique<TitleAndOriginView>(
       web_view_->GetWebContents()->GetTitle(),
       web_view_->GetWebContents()->GetVisibleURL().GetOrigin()));
diff --git a/chrome/browser/upgrade_detector/get_installed_version_fuchsia.cc b/chrome/browser/upgrade_detector/get_installed_version_fuchsia.cc
new file mode 100644
index 0000000..d38bc57
--- /dev/null
+++ b/chrome/browser/upgrade_detector/get_installed_version_fuchsia.cc
@@ -0,0 +1,13 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/upgrade_detector/get_installed_version.h"
+
+#include "base/notreached.h"
+
+InstalledAndCriticalVersion GetInstalledVersion() {
+  // TODO(crbug.com/1235293)
+  NOTIMPLEMENTED_LOG_ONCE();
+  return InstalledAndCriticalVersion(base::Version());
+}
diff --git a/chrome/browser/upgrade_detector/installed_version_monitor_fuchsia.cc b/chrome/browser/upgrade_detector/installed_version_monitor_fuchsia.cc
new file mode 100644
index 0000000..cdfa4eb6
--- /dev/null
+++ b/chrome/browser/upgrade_detector/installed_version_monitor_fuchsia.cc
@@ -0,0 +1,14 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/upgrade_detector/installed_version_monitor.h"
+
+#include "base/notreached.h"
+
+// static
+std::unique_ptr<InstalledVersionMonitor> InstalledVersionMonitor::Create() {
+  // TODO(crbug.com/1235293)
+  NOTIMPLEMENTED_LOG_ONCE();
+  return nullptr;
+}
diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc
index 96d10cb..5dce4a0 100644
--- a/chrome/common/chrome_features.cc
+++ b/chrome/common/chrome_features.cc
@@ -1001,7 +1001,7 @@
 #if defined(OS_ANDROID)
 // Enables using NotificationCompat.Builder to create Android notifications.
 const base::Feature kUseNotificationCompatBuilder{
-    "UseNotificationCompatBuilder", base::FEATURE_DISABLED_BY_DEFAULT};
+    "UseNotificationCompatBuilder", base::FEATURE_ENABLED_BY_DEFAULT};
 #endif  // defined(OS_ANDROID)
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
diff --git a/chrome/common/extensions/api/_api_features.json b/chrome/common/extensions/api/_api_features.json
index 2f1aca09..caa9856 100644
--- a/chrome/common/extensions/api/_api_features.json
+++ b/chrome/common/extensions/api/_api_features.json
@@ -747,6 +747,10 @@
     "channel": "trunk",
     "min_manifest_version": 3
   },
+  "scripting.unregisterContentScripts": {
+    "channel": "trunk",
+    "min_manifest_version": 3
+  },
   "search": {
     "dependencies": ["permission:search"],
     "contexts": ["blessed_extension"]
diff --git a/chrome/common/extensions/api/scripting.idl b/chrome/common/extensions/api/scripting.idl
index 61bb869..42966b9 100644
--- a/chrome/common/extensions/api/scripting.idl
+++ b/chrome/common/extensions/api/scripting.idl
@@ -143,6 +143,8 @@
   callback GetRegisteredContentScriptsCallback = void(
       RegisteredContentScript[] scripts);
 
+  callback UnregisterContentScriptsCallback = void();
+
   interface Functions {
     // Injects a script into a target context. The script will be run at
     // <code>document_idle</code>.
@@ -190,5 +192,15 @@
     [nodoc, supportsPromises] static void getRegisteredContentScripts(
         optional ContentScriptFilter filter,
         GetRegisteredContentScriptsCallback callback);
+
+    // Unregisters content scripts for this extension.
+    // |filter|: If specified, only unregisters dynamic content scripts which
+    // match the filter. Otherwise, all of the extension's dynamic content
+    // scripts are unregistered.
+    // |callback|: A callback to be invoked once scripts have been unregistered
+    // or if an error has occurred.
+    [nodoc, supportsPromises] static void unregisterContentScripts(
+        optional ContentScriptFilter filter,
+        optional UnregisterContentScriptsCallback callback);
   };
 };
diff --git a/chrome/test/data/extensions/api_test/scripting/dynamic_scripts/inject_element_2.js b/chrome/test/data/extensions/api_test/scripting/dynamic_scripts/inject_element_2.js
new file mode 100644
index 0000000..49b79ac
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/scripting/dynamic_scripts/inject_element_2.js
@@ -0,0 +1,7 @@
+// Copyright 2021 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.
+
+var div = document.createElement('div');
+div.id = 'injected_2';
+document.body.appendChild(div);
diff --git a/chrome/test/data/extensions/api_test/scripting/dynamic_scripts/worker.js b/chrome/test/data/extensions/api_test/scripting/dynamic_scripts/worker.js
index 64a793e7..7839d99 100644
--- a/chrome/test/data/extensions/api_test/scripting/dynamic_scripts/worker.js
+++ b/chrome/test/data/extensions/api_test/scripting/dynamic_scripts/worker.js
@@ -68,10 +68,15 @@
         {ids: ['NONEXISTENT']});
     chrome.test.assertEq([], scripts);
 
+    await chrome.scripting.unregisterContentScripts();
+    scripts = await chrome.scripting.getRegisteredContentScripts();
+    chrome.test.assertEq([], scripts);
+
     chrome.test.succeed();
   },
 
   async function scriptInjected() {
+    await chrome.scripting.unregisterContentScripts();
     var scripts = [{
       id: 'script1',
       matches: ['*://a.com/*'],
@@ -100,6 +105,7 @@
   // Tests that an error is returned when multiple content script entries in
   // registerContentScripts share the same ID.
   async function duplicateScriptId_DuplicatesInSameCall() {
+    await chrome.scripting.unregisterContentScripts();
     const scriptId = 'script2';
 
     var scripts = [
@@ -118,6 +124,7 @@
   // made in quick succession, the first call will successfully register the
   // script and the second call with return with an error.
   async function duplicateScriptId_DuplicateInPendingRegistration() {
+    await chrome.scripting.unregisterContentScripts();
     const scriptId = 'script3';
     var scripts =
         [{id: scriptId, matches: ['*://notused.com/*'], js: ['dynamic_1.js']}];
@@ -138,6 +145,7 @@
   // Tests that an error is returned when a content script to be registered has
   // the same ID as a loaded content script.
   async function duplicateScriptId_DuplicatePreviouslyRegistered() {
+    await chrome.scripting.unregisterContentScripts();
     const scriptId = 'script4';
     const scripts =
         [{id: scriptId, matches: ['*://notused.com/*'], js: ['dynamic_1.js']}];
@@ -153,6 +161,7 @@
   // Tests that an error is returned if a content script is specified with an
   // invalid ID.
   async function emptyScriptId() {
+    await chrome.scripting.unregisterContentScripts();
     const scripts =
         [{id: '', matches: ['*://notused.com/*'], js: ['dynamic_1.js']}];
 
@@ -166,6 +175,7 @@
   // Tests that an error is returned if a content script is specified with an
   // invalid ID.
   async function invalidScriptId() {
+    await chrome.scripting.unregisterContentScripts();
     const scriptId = '_manifest_only';
     const scripts =
         [{id: scriptId, matches: ['*://notused.com/*'], js: ['dynamic_1.js']}];
@@ -180,6 +190,7 @@
   // Test that an error is returned if a content script is specified with a
   // file that cannot be read.
   async function scriptFileError() {
+    await chrome.scripting.unregisterContentScripts();
     const scriptFile = 'nonexistent.js';
     const scripts =
         [{id: 'script5', matches: ['*://notused.com/*'], js: [scriptFile]}];
@@ -194,6 +205,7 @@
   // Test that an error is returned if a content script does not specify any
   // js/css files to inject.
   async function emptyJSAndCSS() {
+    await chrome.scripting.unregisterContentScripts();
     const scripts = [{id: 'empty', matches: ['*://notused.com/*'], css: []}];
 
     await chrome.test.assertPromiseRejects(
@@ -206,6 +218,7 @@
   // Test that an error is returned if a content script specifies a malformed
   // match pattern.
   async function invalidMatchPattern() {
+    await chrome.scripting.unregisterContentScripts();
     const scripts = [{
       id: 'invalidMatchPattern',
       matches: ['invalid**match////'],
@@ -223,6 +236,7 @@
   // Test that a registered content script will not be injected into a frame
   // where the extension does not have the host permissions for.
   async function noHostPermissions() {
+    await chrome.scripting.unregisterContentScripts();
     var scripts = [{
       id: 'noHostPerms',
       matches: ['*://nohostperms.com/*'],
@@ -249,6 +263,7 @@
   // Test that a registered content script WILL be injected into a frame
   // where the extension has host permissions for.
   async function hostPermissions() {
+    await chrome.scripting.unregisterContentScripts();
     var scripts = [{
       id: 'hostPerms',
       matches: ['*://hostperms.com/*'],
@@ -277,6 +292,7 @@
   // and a registerContentScripts call, then the script will still only be
   // injected once on a matching frame.
   async function staticAndDynamicScriptInjectedOnce() {
+    await chrome.scripting.unregisterContentScripts();
     var scripts = [{
       id: 'inject_element',
       matches: ['*://*/*'],
@@ -297,5 +313,103 @@
     chrome.test.assertEq(1, results.length);
     chrome.test.assertEq(1, results[0].result);
     chrome.test.succeed();
-  }
+  },
+
+  // Test that scripts that are unregistered are not injected into a (former)
+  // matching frame.
+  async function unregisterScripts() {
+    await chrome.scripting.unregisterContentScripts();
+    var scripts = [
+      {
+        id: 'inject_element_1',
+        matches: ['*://*/*'],
+        js: ['inject_element.js'],
+        runAt: 'document_end'
+      },
+      {
+        id: 'inject_element_2',
+        matches: ['*://*/*'],
+        js: ['inject_element_2.js'],
+        runAt: 'document_end'
+      }
+    ];
+
+    const getInjectedElementIds = function() {
+      let childIds = [];
+      for (const child of document.body.children)
+        childIds.push(child.id);
+      return childIds.sort();
+    };
+
+    await chrome.scripting.registerContentScripts(scripts);
+    const config = await chrome.test.getConfig();
+    const url = `http://hostperms.com:${config.testServer.port}/simple.html`;
+    let tab = await openTab(url);
+    let results = await chrome.scripting.executeScript(
+        {target: {tabId: tab.id}, func: getInjectedElementIds});
+
+    // Both scripts should be injected, and both scripts should inject one
+    // element.
+    chrome.test.assertEq(1, results.length);
+    chrome.test.assertEq(['injected', 'injected_2'], results[0].result);
+    scripts = await chrome.scripting.getRegisteredContentScripts();
+    chrome.test.assertEq(2, scripts.length);
+
+    await chrome.scripting.unregisterContentScripts(
+        {ids: ['inject_element_1']});
+    tab = await openTab(url);
+    results = await chrome.scripting.executeScript(
+        {target: {tabId: tab.id}, func: getInjectedElementIds});
+
+    // After removing the script with id 'inject_element_1' and opening a tab,
+    // only 'inject_element_2' should be injected.
+    chrome.test.assertEq(1, results.length);
+    chrome.test.assertEq(['injected_2'], results[0].result);
+
+    scripts = await chrome.scripting.getRegisteredContentScripts();
+    chrome.test.assertEq(1, scripts.length);
+
+    chrome.test.succeed();
+  },
+
+  // Test that an error is returned when attempting to specify an invalid ID
+  // for unregisterContentScripts.
+  async function unregisterScriptsWithInvalidID() {
+    await chrome.scripting.unregisterContentScripts();
+
+    const scriptId = '_manifest_only';
+    await chrome.test.assertPromiseRejects(
+        chrome.scripting.unregisterContentScripts({ids: [scriptId]}),
+        `Error: Content script's ID '${scriptId}' must not start with '_'`);
+    chrome.test.succeed();
+  },
+
+  // Test that an error is returned when attempting to specify a nonexistent ID
+  // for unregisterContentScripts.
+  async function unregisterScriptsWithNonexistentID() {
+    await chrome.scripting.unregisterContentScripts();
+
+    const validId = 'inject_element_1';
+    var scripts = [{
+      id: validId,
+      matches: ['*://*/*'],
+      js: ['inject_element.js'],
+      runAt: 'document_end'
+    }];
+
+    await chrome.scripting.registerContentScripts(scripts);
+
+    const nonexistentId = 'NONEXISTENT';
+    await chrome.test.assertPromiseRejects(
+        chrome.scripting.unregisterContentScripts(
+            {ids: [validId, nonexistentId]}),
+        `Error: Nonexistent script ID '${nonexistentId}'`);
+
+    // UnregisterContentScripts should be a no-op if it fails.
+    scripts = await chrome.scripting.getRegisteredContentScripts();
+    chrome.test.assertEq(1, scripts.length);
+    chrome.test.assertEq(validId, scripts[0].id);
+
+    chrome.test.succeed();
+  },
 ]);
diff --git a/chrome/test/data/webui/settings/chromeos/os_paired_bluetooth_list_tests.js b/chrome/test/data/webui/settings/chromeos/os_paired_bluetooth_list_tests.js
index 91f2441..21023043 100644
--- a/chrome/test/data/webui/settings/chromeos/os_paired_bluetooth_list_tests.js
+++ b/chrome/test/data/webui/settings/chromeos/os_paired_bluetooth_list_tests.js
@@ -8,8 +8,7 @@
 // #import 'chrome://os-settings/strings.m.js';
 
 // #import {flush, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
-// #import {assertTrue, assertEquals} from '../../../chai_assert.js';
-// #import {waitAfterNextRender} from 'chrome://test/test_util.m.js';
+// #import {assertTrue} from '../../../chai_assert.js';
 // clang-format on
 
 suite('OsPairedBluetoothListTest', function() {
@@ -23,31 +22,8 @@
     Polymer.dom.flush();
   });
 
-  function flushAsync() {
-    Polymer.dom.flush();
-    return new Promise(resolve => setTimeout(resolve));
-  }
-
   test('Base Test', function() {
     const list = pairedBluetoothList.shadowRoot.querySelector('iron-list');
     assertTrue(!!list);
   });
-
-  test('Device list change renders items correctly', async function() {
-    // TODO(crbug.com/1010321): Use real Device objects.
-    pairedBluetoothList.devices = [{}, {}, {}];
-    await flushAsync();
-
-    const getListItems = () => {
-      return pairedBluetoothList.shadowRoot.querySelectorAll(
-          'os-settings-paired-bluetooth-list-item');
-    };
-    assertEquals(getListItems().length, 3);
-
-    pairedBluetoothList.devices = [{}, {}, {}, {}, {}];
-    await waitAfterNextRender(pairedBluetoothList);
-    Polymer.dom.flush();
-
-    assertEquals(getListItems().length, 5);
-  });
 });
\ No newline at end of file
diff --git a/chromeos/components/camera_app_ui/resources/.eslintrc.js b/chromeos/components/camera_app_ui/resources/.eslintrc.js
index fc1a430..98f4117 100644
--- a/chromeos/components/camera_app_ui/resources/.eslintrc.js
+++ b/chromeos/components/camera_app_ui/resources/.eslintrc.js
@@ -401,7 +401,6 @@
     'CSSScale': 'readable',
     'CSSTransformValue': 'readable',
     'CSSTranslate': 'readable',
-    'CSSUnitValue': 'readable',
   },
   // Generally, the rules should be compatible to both bundled and the newest
   // stable eslint, so it's easier to upgrade and develop without the full
diff --git a/chromeos/components/camera_app_ui/resources/js/externs/w3c_api.js b/chromeos/components/camera_app_ui/resources/js/externs/w3c_api.js
index 01beda8..b35cf6c 100644
--- a/chromeos/components/camera_app_ui/resources/js/externs/w3c_api.js
+++ b/chromeos/components/camera_app_ui/resources/js/externs/w3c_api.js
@@ -107,8 +107,15 @@
 /** @type {string} */
 OverconstrainedError.prototype.message;
 
+/**
+ * @constructor
+ */
+function CSSStyleValue() {}
 
-// CSS Typed OM Level 1: https://drafts.css-houdini.org/css-typed-om/
+/**
+ * @type {number}
+ */
+CSSStyleValue.prototype.value;
 
 /**
  * @constructor
@@ -132,10 +139,6 @@
  */
 Element.prototype.computedStyleMap = function() {};
 
-// The base StylePropertyMap is defined in
-// third_party/closure_compiler/externs/pending.js, but missing extend for
-// StylePropertyMapReadOnly.
-
 /**
  * @param {string} property
  * @return {?CSSStyleValue}
@@ -150,8 +153,61 @@
 
 /**
  * @constructor
+ * @extends {CSSStyleValue}
+ * @param {!CSSStyleValue} x
+ * @param {!CSSStyleValue} y
  */
-function CSSStyleValue() {}
+function CSSTranslate(x, y) {}
+
+/**
+ * @constructor
+ * @extends {CSSStyleValue}
+ * @param {!CSSStyleValue} x
+ */
+function CSSRotate(x) {}
+
+/**
+ * @type {!CSSStyleValue}
+ */
+CSSRotate.prototype.angle;
+
+/**
+ * @constructor
+ * @extends {CSSStyleValue}
+ * @param {!CSSStyleValue} x
+ * @param {!CSSStyleValue} y
+ */
+function CSSScale(x, y) {}
+
+/**
+ * @typedef {(CSSTranslate|CSSRotate|CSSScale)}
+ */
+let CSSTransformComponent;
+
+/**
+ * @constructor
+ * @implements {Iterable<!CSSTransformComponent>}
+ * @param {!Array<!CSSTransformComponent>} transforms
+ */
+function CSSTransformValue(transforms) {}
+
+/**
+ * @param {number} px
+ * @return {!CSSStyleValue}
+ */
+CSS.px;
+
+/**
+ * @param {number} rad
+ * @return {!CSSStyleValue}
+ */
+CSS.rad;
+
+/**
+ * @param {number} number
+ * @return {!CSSStyleValue}
+ */
+CSS.number;
 
 /**
  * @constructor
@@ -160,90 +216,7 @@
 function CSSNumericValue() {}
 
 /**
- * @param {string} cssText
- * @return {!CSSNumericValue}
+ * @param {string} str
+ * @return {!CSSStyleValue}
  */
 CSSNumericValue.parse;
-
-/**
- * @param {string} unit
- * @return {!CSSUnitValue}
- */
-CSSNumericValue.prototype.to;
-
-/**
- * @typedef {number|CSSNumericValue}
- */
-let CSSNumberish;
-
-/**
- * @typedef {Object}
- */
-let CSSTransformComponent;
-
-/**
- * @constructor
- * @extends {CSSTransformComponent}
- * @param {!CSSNumericValue} x
- * @param {!CSSNumericValue} y
- */
-function CSSTranslate(x, y) {}
-
-/**
- * @constructor
- * @extends {CSSTransformComponent}
- * @param {!CSSNumericValue} angle
- */
-function CSSRotate(angle) {}
-
-/**
- * @type {!CSSNumericValue}
- */
-CSSRotate.prototype.angle;
-
-/**
- * @constructor
- * @extends {CSSTransformComponent}
- * @param {!CSSNumberish} x
- * @param {!CSSNumberish} y
- */
-function CSSScale(x, y) {}
-
-/**
- * @constructor
- * @extends {CSSStyleValue}
- * @implements {Iterable<!CSSTransformComponent>}
- * @param {!Array<!CSSTransformComponent>} transforms
- */
-function CSSTransformValue(transforms) {}
-
-/**
- * @constructor
- * @extends {CSSNumericValue}
- * @param {number} value
- * @param {string} unit
- */
-function CSSUnitValue(value, unit) {}
-
-/**
- * @type {number}
- */
-CSSUnitValue.prototype.value;
-
-/**
- * @param {number} px
- * @return {!CSSUnitValue}
- */
-CSS.px;
-
-/**
- * @param {number} rad
- * @return {!CSSUnitValue}
- */
-CSS.rad;
-
-/**
- * @param {number} number
- * @return {!CSSUnitValue}
- */
-CSS.number;
diff --git a/chromeos/components/camera_app_ui/resources/js/focus_ring.js b/chromeos/components/camera_app_ui/resources/js/focus_ring.js
index b2dcf57..8fabc2a 100644
--- a/chromeos/components/camera_app_ui/resources/js/focus_ring.js
+++ b/chromeos/components/camera_app_ui/resources/js/focus_ring.js
@@ -8,7 +8,6 @@
 } from './chrome_util.js';
 import {cssStyle} from './css.js';
 import * as dom from './dom.js';
-import {getStyleValueInPx} from './util.js';
 
 /**
  * Focus ring element.
@@ -53,7 +52,7 @@
 function onFocus({target}) {
   const el = assertInstanceof(target, HTMLElement);
   const style = el.computedStyleMap();
-  const size = getStyleValueInPx(style, '--focus-ring-size');
+  const size = style.get('--focus-ring-size').value;
   const ringStyleValue = `${style.get('--focus-ring-style')}`;
   for (const v of ringStyleValues) {
     ring.classList.toggle(v, ringStyleValue.includes(v));
diff --git a/chromeos/components/camera_app_ui/resources/js/new_feature_toast.js b/chromeos/components/camera_app_ui/resources/js/new_feature_toast.js
index f94bba2..410c9e5 100644
--- a/chromeos/components/camera_app_ui/resources/js/new_feature_toast.js
+++ b/chromeos/components/camera_app_ui/resources/js/new_feature_toast.js
@@ -3,7 +3,6 @@
 // found in the LICENSE file.
 
 import * as animation from './animation.js';
-import {assertInstanceof} from './chrome_util.js';
 import {cssStyle} from './css.js';
 import * as dom from './dom.js';
 import {I18nString} from './i18n_string.js';
@@ -40,20 +39,22 @@
     this.el_ = el;
 
     const style = this.el_.computedStyleMap();
+    const getValue = (name) =>
+        CSSNumericValue.parse(style.get(name).toString()).value;
 
     /**
      * Initial width of ripple in px.
      * @const {!number}
      * @private
      */
-    this.width_ = util.getStyleValueInPx(style, '--ripple-start-width');
+    this.width_ = getValue('--ripple-start-width');
 
     /**
      * Initial height of ripple in px.
      * @const {!number}
      * @private
      */
-    this.height_ = util.getStyleValueInPx(style, '--ripple-start-height');
+    this.height_ = getValue('--ripple-start-height');
 
     /**
      * @const {number}
@@ -64,10 +65,8 @@
     }, RIPPLE_DURATION_MS / RIPPLE_COUNT);
 
     RIPPLE_STYLE.setProperty('--duration', `${RIPPLE_DURATION_MS}ms`);
-    const scaleX =
-        assertInstanceof(style.get('--ripple-scale-x'), CSSUnitValue).value;
-    const scaleY =
-        assertInstanceof(style.get('--ripple-scale-y'), CSSUnitValue).value;
+    const scaleX = getValue('--ripple-scale-x');
+    const scaleY = getValue('--ripple-scale-y');
     RIPPLE_STYLE.setProperty('--scale', `scale(${scaleX}, ${scaleY})`);
 
     this.addRipple_();
@@ -159,7 +158,8 @@
           if (!style.has(cssName)) {
             continue;
           }
-          const offset = util.getStyleValueInPx(style, cssName);
+          const offset =
+              CSSNumericValue.parse(style.get(cssName).toString()).value;
           properties.push({elProperty, toastProperty, offset});
         }
       }
diff --git a/chromeos/components/camera_app_ui/resources/js/util.js b/chromeos/components/camera_app_ui/resources/js/util.js
index d22b63b1..f0a8f20 100644
--- a/chromeos/components/camera_app_ui/resources/js/util.js
+++ b/chromeos/components/camera_app_ui/resources/js/util.js
@@ -241,13 +241,3 @@
 export function sleep(ms) {
   return new Promise((resolve) => setTimeout(resolve, ms));
 }
-
-/**
- * Gets value in px of a property in a StylePropertyMapReadOnly
- * @param {!StylePropertyMapReadOnly} style
- * @param {string} prop
- * @return {number}
- */
-export function getStyleValueInPx(style, prop) {
-  return assertInstanceof(style.get(prop), CSSNumericValue).to('px').value;
-}
diff --git a/chromeos/components/camera_app_ui/resources/js/views/camera/document_corner_overlay.js b/chromeos/components/camera_app_ui/resources/js/views/camera/document_corner_overlay.js
index ab76f59..f465d5c 100644
--- a/chromeos/components/camera_app_ui/resources/js/views/camera/document_corner_overlay.js
+++ b/chromeos/components/camera_app_ui/resources/js/views/camera/document_corner_overlay.js
@@ -79,7 +79,7 @@
     }
     for (const transform of transforms) {
       if (transform instanceof CSSRotate) {
-        return transform.angle.to('rad').value;
+        return transform.angle.value;
       }
     }
     return null;
diff --git a/chromeos/components/personalization_app/BUILD.gn b/chromeos/components/personalization_app/BUILD.gn
index 11312f60..788ccdb 100644
--- a/chromeos/components/personalization_app/BUILD.gn
+++ b/chromeos/components/personalization_app/BUILD.gn
@@ -25,7 +25,7 @@
     "//chromeos/resources:personalization_app_resources",
     "//chromeos/strings",
     "//content/public/browser",
-    "//ui/chromeos/colors:cros_colors_views_generator",
+    "//ui/chromeos/styles:cros_styles_views_generator",
     "//ui/resources:webui_generated_resources_grd_grit",
     "//ui/resources:webui_resources_grd_grit",
     "//ui/webui",
diff --git a/chromeos/components/personalization_app/DEPS b/chromeos/components/personalization_app/DEPS
index b391421..f7de85a 100644
--- a/chromeos/components/personalization_app/DEPS
+++ b/chromeos/components/personalization_app/DEPS
@@ -5,7 +5,7 @@
   "+chromeos/grit/chromeos_personalization_app_resources.h",
   "+content/public/browser",
   "+content/public/common",
-  "+ui/chromeos/colors/cros_colors.h",
+  "+ui/chromeos/styles/cros_styles.h",
   "+ui/resources/grit/webui_generated_resources.h",
   "+ui/resources/grit/webui_generated_resources_map.h",
   "+ui/resources/grit/webui_resources.h",
diff --git a/chromeos/components/personalization_app/resources/trusted/index.html b/chromeos/components/personalization_app/resources/trusted/index.html
index b3b460f..7f8dfc26 100644
--- a/chromeos/components/personalization_app/resources/trusted/index.html
+++ b/chromeos/components/personalization_app/resources/trusted/index.html
@@ -9,7 +9,7 @@
     <meta charset="utf-8">
     <link rel="stylesheet" href="/common/base.css">
     <link rel="stylesheet"
-        href="chrome://resources/chromeos/colors/cros_colors.generated.css">
+        href="chrome://resources/chromeos/colors/cros_styles.css">
     <link rel="stylesheet" href="chrome://resources/css/text_defaults_md.css">
     <script type="module" src="/trusted/personalization_app.js" defer></script>
   </head>
diff --git a/chromeos/components/personalization_app/resources/untrusted/collections.html b/chromeos/components/personalization_app/resources/untrusted/collections.html
index 13ba2e6..2326502 100644
--- a/chromeos/components/personalization_app/resources/untrusted/collections.html
+++ b/chromeos/components/personalization_app/resources/untrusted/collections.html
@@ -3,7 +3,7 @@
 <head>
   <meta charset="utf-8">
   <link rel="stylesheet" href="/common/base.css">
-  <link rel="stylesheet" href="/chromeos/colors/cros_colors.generated.css">
+  <link rel="stylesheet" href="/chromeos/colors/cros_styles.css">
   <script type="module" src="collections_grid.js" defer></script>
 </head>
 <body>
diff --git a/chromeos/components/personalization_app/resources/untrusted/images.html b/chromeos/components/personalization_app/resources/untrusted/images.html
index 023b965..ce40fe3 100644
--- a/chromeos/components/personalization_app/resources/untrusted/images.html
+++ b/chromeos/components/personalization_app/resources/untrusted/images.html
@@ -3,7 +3,7 @@
 <head>
   <meta charset="utf-8">
   <link rel="stylesheet" href="/common/base.css">
-  <link rel="stylesheet" href="/chromeos/colors/cros_colors.generated.css">
+  <link rel="stylesheet" href="/chromeos/colors/cros_styles.css">
   <script type="module" src="images_grid.js" defer></script>
 </head>
 <body>
diff --git a/chromeos/components/personalization_app/untrusted_personalization_app_ui_config.cc b/chromeos/components/personalization_app/untrusted_personalization_app_ui_config.cc
index c2cebd2..095e85e 100644
--- a/chromeos/components/personalization_app/untrusted_personalization_app_ui_config.cc
+++ b/chromeos/components/personalization_app/untrusted_personalization_app_ui_config.cc
@@ -16,7 +16,7 @@
 #include "content/public/browser/web_ui_data_source.h"
 #include "content/public/common/url_constants.h"
 #include "services/network/public/mojom/content_security_policy.mojom-shared.h"
-#include "ui/chromeos/colors/cros_colors.h"
+#include "ui/chromeos/styles/cros_styles.h"
 #include "ui/resources/grit/webui_generated_resources.h"
 #include "ui/resources/grit/webui_generated_resources_map.h"
 #include "ui/resources/grit/webui_resources.h"
@@ -43,13 +43,13 @@
 }
 
 void AddCrosColors(content::WebUIDataSource* source) {
-  source->AddResourcePath("chromeos/colors/cros_colors.generated.css",
+  source->AddResourcePath("chromeos/colors/cros_styles.css",
                           IDR_WEBUI_CROS_COLORS_CSS);
 
   source->AddString(
       "crosColorsDebugOverrides",
       base::FeatureList::IsEnabled(ash::features::kSemanticColorsDebugOverride)
-          ? cros_colors::kDebugOverrideCssString
+          ? cros_styles::kDebugOverrideCssString
           : std::string());
 }
 
diff --git a/chromeos/components/print_management/resources/print_management_shared_css.html b/chromeos/components/print_management/resources/print_management_shared_css.html
index e83ba23..a67284d 100644
--- a/chromeos/components/print_management/resources/print_management_shared_css.html
+++ b/chromeos/components/print_management/resources/print_management_shared_css.html
@@ -1,5 +1,5 @@
 <link rel="stylesheet"
-    href="chrome://resources/chromeos/colors/cros_colors.generated.css">
+    href="chrome://resources/chromeos/colors/cros_styles.css">
 <link rel="stylesheet" href="chrome://resources/css/text_defaults_md.css">
 <link rel="stylesheet" href="chrome://resources/css/md_colors.css">
 <template>
diff --git a/chromeos/components/sample_system_web_app_ui/resources/component_playground.html b/chromeos/components/sample_system_web_app_ui/resources/component_playground.html
index 6e75494..115a3288 100644
--- a/chromeos/components/sample_system_web_app_ui/resources/component_playground.html
+++ b/chromeos/components/sample_system_web_app_ui/resources/component_playground.html
@@ -3,7 +3,7 @@
 <head>
   <meta charset="utf8">
   <title>Component Playground</title>
-  <link rel="stylesheet" href="chrome://resources/chromeos/colors/cros_colors.generated.css">
+  <link rel="stylesheet" href="chrome://resources/chromeos/colors/cros_styles.css">
   <style>
     html {
       background-color: var(--cros-bg-color);
diff --git a/components/browser_ui/bottomsheet/android/test/java/src/org/chromium/components/browser_ui/bottomsheet/BottomSheetTestSupport.java b/components/browser_ui/bottomsheet/android/test/java/src/org/chromium/components/browser_ui/bottomsheet/BottomSheetTestSupport.java
index ce8d8617..5c7a70e2 100644
--- a/components/browser_ui/bottomsheet/android/test/java/src/org/chromium/components/browser_ui/bottomsheet/BottomSheetTestSupport.java
+++ b/components/browser_ui/bottomsheet/android/test/java/src/org/chromium/components/browser_ui/bottomsheet/BottomSheetTestSupport.java
@@ -122,7 +122,6 @@
      * @param state The state to wait for.
      */
     public static void waitForState(BottomSheetController controller, @SheetState int state) {
-        if (controller.getSheetState() == state) return;
         CallbackHelper stateChangeHelper = new CallbackHelper();
         final BottomSheetObserver observer = new EmptyBottomSheetObserver() {
             @Override
@@ -131,7 +130,13 @@
             }
         };
 
-        TestThreadUtils.runOnUiThreadBlocking(() -> controller.addObserver(observer));
+        TestThreadUtils.runOnUiThreadBlocking(() -> {
+            if (controller.getSheetState() == state) {
+                stateChangeHelper.notifyCalled();
+            } else {
+                controller.addObserver(observer);
+            }
+        });
 
         try {
             stateChangeHelper.waitForFirst();
@@ -148,10 +153,6 @@
      * @param controller The controller for the bottom sheet.
      */
     public static void waitForOpen(BottomSheetController controller) {
-        if (controller.getSheetState() == BottomSheetController.SheetState.HALF
-                || controller.getSheetState() == BottomSheetController.SheetState.FULL) {
-            return;
-        }
         CallbackHelper stateChangeHelper = new CallbackHelper();
 
         final BottomSheetObserver observer = new EmptyBottomSheetObserver() {
@@ -164,12 +165,20 @@
             }
         };
 
-        TestThreadUtils.runOnUiThreadBlocking(() -> controller.addObserver(observer));
+        TestThreadUtils.runOnUiThreadBlocking(() -> {
+            if (controller.getSheetState() == BottomSheetController.SheetState.HALF
+                    || controller.getSheetState() == BottomSheetController.SheetState.FULL) {
+                stateChangeHelper.notifyCalled();
+            } else {
+                controller.addObserver(observer);
+            }
+        });
 
         try {
             stateChangeHelper.waitForFirst();
         } catch (TimeoutException ex) {
-            assert false : "Bottom sheet state never half or full";
+            assert false : "Bottom sheet state never half or full. Current State: "
+                           + sheetStateToString(controller.getSheetState());
         }
 
         TestThreadUtils.runOnUiThreadBlocking(() -> controller.removeObserver(observer));
diff --git a/components/fullscreen_control/subtle_notification_view.cc b/components/fullscreen_control/subtle_notification_view.cc
index 9f82d4e..1420d06c 100644
--- a/components/fullscreen_control/subtle_notification_view.cc
+++ b/components/fullscreen_control/subtle_notification_view.cc
@@ -95,7 +95,7 @@
   if (text == text_)
     return;
 
-  RemoveAllChildViews(true);
+  RemoveAllChildViews();
 
   // Parse |text|, looking for pipe-delimited segment.
   std::vector<std::u16string> segments = base::SplitString(
diff --git a/components/gcm_driver/BUILD.gn b/components/gcm_driver/BUILD.gn
index 1cbe23d..0149878 100644
--- a/components/gcm_driver/BUILD.gn
+++ b/components/gcm_driver/BUILD.gn
@@ -60,7 +60,6 @@
     "//components/pref_registry",
     "//components/prefs",
     "//components/signin/public/identity_manager",
-    "//components/sync/base",
     "//components/version_info",
     "//google_apis",
     "//google_apis/gcm",
@@ -175,7 +174,6 @@
     "//base/test:test_support",
     "//components/gcm_driver/crypto",
     "//components/prefs:test_support",
-    "//components/sync/protocol",
     "//google_apis:test_support",
     "//google_apis/gcm:test_support",
     "//net:test_support",
diff --git a/components/gcm_driver/DEPS b/components/gcm_driver/DEPS
index d3a4dd7..45c7540 100644
--- a/components/gcm_driver/DEPS
+++ b/components/gcm_driver/DEPS
@@ -5,7 +5,6 @@
   "+components/pref_registry",
   "+components/prefs",
   "+components/signin/public",
-  "+components/sync/base",
   "+components/version_info",
   "+content/public/browser/browser_context.h",
   "+content/public/test",  # Only used for tests.
diff --git a/components/gcm_driver/gcm_desktop_utils.cc b/components/gcm_driver/gcm_desktop_utils.cc
index 7d8f394..307cda7 100644
--- a/components/gcm_driver/gcm_desktop_utils.cc
+++ b/components/gcm_driver/gcm_desktop_utils.cc
@@ -13,7 +13,6 @@
 #include "components/gcm_driver/gcm_client_factory.h"
 #include "components/gcm_driver/gcm_driver.h"
 #include "components/gcm_driver/gcm_driver_desktop.h"
-#include "components/sync/base/sync_util.h"
 #include "services/network/public/cpp/shared_url_loader_factory.h"
 #include "url/gurl.h"
 
@@ -92,11 +91,11 @@
     const scoped_refptr<base::SequencedTaskRunner>& blocking_task_runner) {
   return std::unique_ptr<GCMDriver>(new GCMDriverDesktop(
       std::move(gcm_client_factory),
-      GetChromeBuildInfo(channel, product_category_for_subtypes),
-      syncer::MakeUserAgentForSync(channel), prefs, store_path,
-      remove_account_mappings_with_email_key, get_socket_factory_callback,
-      std::move(url_loader_factory), network_connection_tracker, ui_task_runner,
-      io_task_runner, blocking_task_runner));
+      GetChromeBuildInfo(channel, product_category_for_subtypes), prefs,
+      store_path, remove_account_mappings_with_email_key,
+      get_socket_factory_callback, std::move(url_loader_factory),
+      network_connection_tracker, ui_task_runner, io_task_runner,
+      blocking_task_runner));
 }
 
 }  // namespace gcm
diff --git a/components/gcm_driver/gcm_driver_desktop.cc b/components/gcm_driver/gcm_driver_desktop.cc
index b17e73c7..0e0f2ea 100644
--- a/components/gcm_driver/gcm_driver_desktop.cc
+++ b/components/gcm_driver/gcm_driver_desktop.cc
@@ -497,7 +497,6 @@
 GCMDriverDesktop::GCMDriverDesktop(
     std::unique_ptr<GCMClientFactory> gcm_client_factory,
     const GCMClient::ChromeBuildInfo& chrome_build_info,
-    const std::string& user_agent,
     PrefService* prefs,
     const base::FilePath& store_path,
     bool remove_account_mappings_with_email_key,
diff --git a/components/gcm_driver/gcm_driver_desktop.h b/components/gcm_driver/gcm_driver_desktop.h
index 746bab8..0acec2c 100644
--- a/components/gcm_driver/gcm_driver_desktop.h
+++ b/components/gcm_driver/gcm_driver_desktop.h
@@ -55,7 +55,6 @@
   GCMDriverDesktop(
       std::unique_ptr<GCMClientFactory> gcm_client_factory,
       const GCMClient::ChromeBuildInfo& chrome_build_info,
-      const std::string& user_agent,
       PrefService* prefs,
       const base::FilePath& store_path,
       bool remove_account_mappings_with_email_key,
diff --git a/components/gcm_driver/gcm_driver_desktop_unittest.cc b/components/gcm_driver/gcm_driver_desktop_unittest.cc
index 38cbd3d..543cc3c 100644
--- a/components/gcm_driver/gcm_driver_desktop_unittest.cc
+++ b/components/gcm_driver/gcm_driver_desktop_unittest.cc
@@ -246,7 +246,7 @@
   driver_ = std::make_unique<GCMDriverDesktop>(
       std::unique_ptr<GCMClientFactory>(new FakeGCMClientFactory(
           base::ThreadTaskRunnerHandle::Get(), io_thread_.task_runner())),
-      chrome_build_info, "user-agent-string", &prefs_, temp_dir_.GetPath(),
+      chrome_build_info, &prefs_, temp_dir_.GetPath(),
       /*remove_account_mappings_with_email_key=*/true, base::DoNothing(),
       base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>(
           &test_url_loader_factory_),
diff --git a/components/gcm_driver/gcm_driver_unittest.cc b/components/gcm_driver/gcm_driver_unittest.cc
index 96701d5e..92a9a88 100644
--- a/components/gcm_driver/gcm_driver_unittest.cc
+++ b/components/gcm_driver/gcm_driver_unittest.cc
@@ -154,7 +154,7 @@
   driver_ = std::make_unique<GCMDriverDesktop>(
       std::make_unique<FakeGCMClientFactory>(
           base::ThreadTaskRunnerHandle::Get(), io_thread_.task_runner()),
-      chrome_build_info, "user-agent-string", &prefs_, temp_dir_.GetPath(),
+      chrome_build_info, &prefs_, temp_dir_.GetPath(),
       /*remove_account_mappings_with_email_key=*/true, base::DoNothing(),
       base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>(
           &test_url_loader_factory_),
diff --git a/components/history/core/browser/sync/typed_url_sync_bridge.cc b/components/history/core/browser/sync/typed_url_sync_bridge.cc
index b73e74bc..18c1a18 100644
--- a/components/history/core/browser/sync/typed_url_sync_bridge.cc
+++ b/components/history/core/browser/sync/typed_url_sync_bridge.cc
@@ -304,8 +304,10 @@
     }
 
     VisitVector visits_vector;
-    if (!FixupURLAndGetVisits(&url_row, &visits_vector))
+    if (!FixupURLAndGetVisits(&url_row, &visits_vector) ||
+        visits_vector.empty()) {
       continue;
+    }
     std::unique_ptr<syncer::EntityData> entity_data =
         CreateEntityData(url_row, visits_vector);
     if (!entity_data) {
@@ -332,8 +334,9 @@
   auto batch = std::make_unique<MutableDataBatch>();
   for (URLRow& url : typed_urls) {
     VisitVector visits_vector;
-    if (!FixupURLAndGetVisits(&url, &visits_vector))
+    if (!FixupURLAndGetVisits(&url, &visits_vector) || visits_vector.empty()) {
       continue;
+    }
     std::unique_ptr<syncer::EntityData> entity_data =
         CreateEntityData(url, visits_vector);
     if (!entity_data) {
@@ -818,7 +821,11 @@
     if (is_existing_url) {
       // Add a new entry to `local_typed_urls`, and set the iterator to it.
       VisitVector untyped_visits;
-      if (!FixupURLAndGetVisits(&untyped_url, &untyped_visits)) {
+      // TODO(crbug.com/1075573): We early return on urls with all visits
+      // expired. It does not feel right as we might get new non-expired visits
+      // through sync.
+      if (!FixupURLAndGetVisits(&untyped_url, &untyped_visits) ||
+          untyped_visits.empty()) {
         return;
       }
       (*local_visit_vectors)[untyped_url.url()] = untyped_visits;
@@ -925,7 +932,11 @@
   if (existing_url) {
     // This URL already exists locally - fetch the visits so we can
     // merge them below.
-    if (!FixupURLAndGetVisits(&new_url, &existing_visits)) {
+    // TODO(crbug.com/1075573): We early return on urls with all visits
+    // expired. It does not feel right as we might get new non-expired visits
+    // through sync.
+    if (!FixupURLAndGetVisits(&new_url, &existing_visits) ||
+        existing_visits.empty()) {
       return;
     }
   }
@@ -959,11 +970,13 @@
     return;
   }
 
-  std::string storage_key = GetStorageKeyFromURLRow(row);
-
+  // We want to also deal with URLs that have all visits expired (that return
+  // empty `visit_vector` from FixupURLAndGetVisits()) so that these get expired
+  // or deleted.
   if (HasTypedUrl(visit_vector)) {
     SendTypedURLToProcessor(row, visit_vector, metadata_change_list);
   } else {
+    std::string storage_key = GetStorageKeyFromURLRow(row);
     // If the URL has no typed visits any more we should get rid of it. It is
     // possible that this URL never had typed visits and thus it has no sync
     // entity and no sync metadata. We do not need to check for this case
@@ -1136,9 +1149,9 @@
     DVLOG(1) << "Found empty visits for URL: " << url->url();
     if (url->last_visit().is_null()) {
       // If modified URL is bookmarked, history backend treats it as modified
-      // even if all its visits are deleted. Return false to stop further
-      // processing because sync expects valid visit time for modified entry.
-      return false;
+      // even if all its visits are deleted. Return empty visits to stop further
+      // processing.
+      return true;
     }
 
     VisitRow visit(url->id(), url->last_visit(), /*referring_visit=*/0,
@@ -1174,7 +1187,7 @@
     if (num_expired_visits == visits->size()) {
       DVLOG(1) << "All visits are expired for url: " << url->url();
       visits->clear();
-      return false;
+      return true;
     }
     visits->erase(visits->begin(), visits->begin() + num_expired_visits);
   }
diff --git a/components/history/core/browser/sync/typed_url_sync_bridge.h b/components/history/core/browser/sync/typed_url_sync_bridge.h
index 9b31f1e..01e011f7 100644
--- a/components/history/core/browser/sync/typed_url_sync_bridge.h
+++ b/components/history/core/browser/sync/typed_url_sync_bridge.h
@@ -204,9 +204,9 @@
   // expired visits that are not deleted by `ExpireHistoryBackend`, etc) by
   // modifying the passed `url` object and `visits` vector. The order of
   // `visits` will be from the oldest to the newest order.
-  // Returns false in two cases.
-  // 1. we could not fetch the visits for the passed URL, DB error.
-  // 2. No visits for the passed url, or all the visits are expired.
+  // Returns false if we could not fetch the visits for the passed URL, DB
+  // error. If there are no visits for the passed url, or all the visits are
+  // expired, it returns true but `visits` is empty.
   bool FixupURLAndGetVisits(URLRow* url, VisitVector* visits);
 
   // Create an EntityData by URL `row` and its visits `visits`.
diff --git a/components/history/core/browser/sync/typed_url_sync_bridge_unittest.cc b/components/history/core/browser/sync/typed_url_sync_bridge_unittest.cc
index c37cf01..c924e7f8 100644
--- a/components/history/core/browser/sync/typed_url_sync_bridge_unittest.cc
+++ b/components/history/core/browser/sync/typed_url_sync_bridge_unittest.cc
@@ -46,11 +46,15 @@
 using testing::_;
 using testing::AllOf;
 using testing::Contains;
+using testing::DoAll;
+using testing::IsEmpty;
 using testing::Mock;
 using testing::NiceMock;
 using testing::Not;
 using testing::Pointee;
 using testing::Return;
+using testing::SizeIs;
+using testing::UnorderedElementsAre;
 
 // Constants used to limit size of visits processed. See
 // equivalent constants in typed_url_sync_bridge.cc for descriptions.
@@ -183,7 +187,6 @@
                                     const std::string& title,
                                     int64_t typed_visit,
                                     int64_t reload_visit,
-                                    bool hidden,
                                     VisitVector* visits) {
   // Give each URL a unique ID, to mimic the behavior of the real database.
   GURL gurl(url);
@@ -191,7 +194,7 @@
   history_url.set_title(base::UTF8ToUTF16(title));
   history_url.set_typed_count(1);
   history_url.set_visit_count(2);
-  history_url.set_hidden(hidden);
+  history_url.set_hidden(false);
 
   Time typed_visit_time = SinceEpoch(typed_visit);
   Time reload_visit_time = SinceEpoch(reload_visit);
@@ -243,6 +246,14 @@
   return storage_key;
 }
 
+void StoreMetadata(const std::string& storage_key,
+                   std::unique_ptr<EntityData> entity_data,
+                   MetadataChangeList* metadata_change_list) {
+  sync_pb::EntityMetadata metadata;
+  metadata.set_sequence_number(1);
+  metadata_change_list->UpdateMetadata(storage_key, metadata);
+}
+
 class TestHistoryBackendDelegate : public HistoryBackend::Delegate {
  public:
   TestHistoryBackendDelegate() {}
@@ -271,9 +282,10 @@
 
 class TestHistoryBackendForSync : public HistoryBackend {
  public:
-  TestHistoryBackendForSync()
+  explicit TestHistoryBackendForSync(
+      std::unique_ptr<HistoryBackendClient> backend_client)
       : HistoryBackend(std::make_unique<TestHistoryBackendDelegate>(),
-                       nullptr,
+                       std::move(backend_client),
                        base::ThreadTaskRunnerHandle::Get()) {}
 
   bool IsExpiredVisitTime(const Time& time) override {
@@ -286,9 +298,17 @@
 
   void SetVisitsForUrl(URLRow* new_url, const VisitVector visits) {
     if (!GetURL(new_url->url(), nullptr)) {
-      URLRows new_urls;
-      new_urls.push_back(*new_url);
-      AddPagesWithDetails(new_urls, SOURCE_SYNCED);
+      URLRow to_insert = *new_url;
+      // AddVisits() increments counts so we should decrement it now to get a
+      // consistent result in the end.
+      for (const auto& visit : visits) {
+        to_insert.set_visit_count(to_insert.visit_count() - 1);
+        if (ui::PageTransitionCoreTypeIs(visit.transition,
+                                         ui::PAGE_TRANSITION_TYPED)) {
+          to_insert.set_typed_count(to_insert.typed_count() - 1);
+        }
+      }
+      AddPagesWithDetails({to_insert}, SOURCE_SYNCED);
     }
 
     std::vector<VisitInfo> added_visits;
@@ -303,12 +323,25 @@
   ~TestHistoryBackendForSync() override {}
 };
 
+class MockHistoryBackendClient : public HistoryBackendClient {
+ public:
+  MOCK_METHOD(bool, IsPinnedURL, (const GURL& url), (override));
+  MOCK_METHOD(std::vector<URLAndTitle>, GetPinnedURLs, (), (override));
+  MOCK_METHOD(bool, IsWebSafe, (const GURL& url), (override));
+};
+
 }  // namespace
 
 class TypedURLSyncBridgeTest : public testing::Test {
  public:
   void SetUp() override {
-    fake_history_backend_ = new TestHistoryBackendForSync();
+    auto history_backend_client =
+        std::make_unique<NiceMock<MockHistoryBackendClient>>();
+    history_backend_client_ = history_backend_client.get();
+    ON_CALL(*history_backend_client_, IsPinnedURL).WillByDefault(Return(false));
+
+    fake_history_backend_ =
+        new TestHistoryBackendForSync(std::move(history_backend_client));
     ASSERT_TRUE(test_dir_.CreateUniqueTempDir());
     fake_history_backend_->Init(
         false, TestHistoryDatabaseParamsForPath(test_dir_.GetPath()));
@@ -373,7 +406,6 @@
                                       int typed_count,
                                       int64_t last_visit,
                                       bool hidden,
-                                      bool update_metadata,
                                       EntityChange::ChangeType change_type) {
     VisitVector visits;
     URLRow row =
@@ -399,13 +431,6 @@
 
     std::unique_ptr<MetadataChangeList> metadata_changes =
         bridge()->CreateMetadataChangeList();
-    // There needs to be data present in the history DB before inserting
-    // metadata.
-    if (update_metadata) {
-      sync_pb::EntityMetadata metadata;
-      metadata.set_sequence_number(1);
-      metadata_changes->UpdateMetadata(storage_key, metadata);
-    }
 
     bridge()->ApplySyncChanges(std::move(metadata_changes),
                                std::move(entity_changes));
@@ -429,6 +454,16 @@
     return bridge()->GetStorageKeyInternal(url);
   }
 
+  std::set<std::string> GetAllSyncMetadataKeys() {
+    MetadataBatch metadata_batch;
+    metadata_store()->GetAllSyncMetadata(&metadata_batch);
+    std::set<std::string> keys;
+    for (const auto& kv : metadata_batch.GetAllMetadata()) {
+      keys.insert(kv.first);
+    }
+    return keys;
+  }
+
   EntityData SpecificsToEntity(const TypedUrlSpecifics& specifics) {
     EntityData data;
     *data.specifics.mutable_typed_url() = specifics;
@@ -520,6 +555,7 @@
  protected:
   base::test::SingleThreadTaskEnvironment task_environment_;
   base::ScopedTempDir test_dir_;
+  MockHistoryBackendClient* history_backend_client_;
   scoped_refptr<TestHistoryBackendForSync> fake_history_backend_;
   TypedURLSyncBridge* typed_url_sync_bridge_ = nullptr;
   NiceMock<MockModelTypeChangeProcessor> mock_processor_;
@@ -593,7 +629,7 @@
   VerifyAllLocalHistoryData({*typed_url});
 }
 
-// Add a corupted typed url locally, has typed url count 1, but no real typed
+// Add a corrupted typed url locally, has typed url count 1, but no real typed
 // url visit. Starting sync should not pick up this url.
 TEST_F(TypedURLSyncBridgeTest, MergeUrlNoTypedUrl) {
   // Add a url to backend.
@@ -607,9 +643,9 @@
   EXPECT_CALL(mock_processor_, Put).Times(0);
   StartSyncing(std::vector<TypedUrlSpecifics>());
 
-  MetadataBatch metadata_batch;
-  metadata_store()->GetAllSyncMetadata(&metadata_batch);
-  EXPECT_EQ(0u, metadata_batch.TakeAllMetadata().size());
+  // There's also no metadata written as there's no call to Put() (where the
+  // test could mock storing metadata).
+  EXPECT_THAT(GetAllSyncMetadataKeys(), IsEmpty());
 }
 
 // Starting sync with no sync data should just push the local url to sync.
@@ -621,15 +657,18 @@
 
   EntityData entity_data;
   EXPECT_CALL(mock_processor_, Put(GetStorageKey(kURL), _, _))
-      .WillOnce(SaveArgPointeeMove<1>(&entity_data));
+      .WillOnce(DoAll(SaveArgPointeeMove<1>(&entity_data), StoreMetadata));
   StartSyncing(std::vector<TypedUrlSpecifics>());
 
-  // Check that the local cache was is still correct.
+  // Check that the local cache is still correct.
   sync_pb::EntitySpecifics entity_specifics;
   sync_pb::TypedUrlSpecifics* typed_url = entity_specifics.mutable_typed_url();
   WriteToTypedUrlSpecifics(row, visits, typed_url);
   VerifyAllLocalHistoryData({*typed_url});
 
+  EXPECT_THAT(GetAllSyncMetadataKeys(),
+              UnorderedElementsAre(GetStorageKey(kURL)));
+
   // Check that the server was updated correctly.
   const TypedUrlSpecifics& committed_specifics =
       entity_data.specifics.typed_url();
@@ -693,7 +732,7 @@
 
   EntityData entity_data;
   EXPECT_CALL(mock_processor_, Put(GetStorageKey(kURL), _, _))
-      .WillOnce(SaveArgPointeeMove<1>(&entity_data));
+      .WillOnce(DoAll(SaveArgPointeeMove<1>(&entity_data), StoreMetadata));
   StartSyncing({*typed_url});
 
   // Check that the backend was updated correctly.
@@ -710,6 +749,9 @@
   EXPECT_TRUE(fake_history_backend_->GetURL(GURL(kURL), &url_row));
   EXPECT_EQ(kTitle2, base::UTF16ToUTF8(url_row.title()));
 
+  EXPECT_THAT(GetAllSyncMetadataKeys(),
+              UnorderedElementsAre(GetStorageKey(kURL)));
+
   // Check that the sync was updated correctly.
   // The local history visit should not be added to sync because it is older
   // than sync's oldest visit.
@@ -1053,9 +1095,8 @@
 TEST_F(TypedURLSyncBridgeTest, DeleteLocalTypedUrlVisit) {
   VisitVector visits1, visits2;
   URLRow row1 = MakeTypedUrlRowWithTwoVisits(kURL, kTitle,
-                                             /*typed_visit_time=*/2,
-                                             /*reload_visit_time=*/4,
-                                             /*hidden=*/false, &visits1);
+                                             /*typed_visit=*/2,
+                                             /*reload_visit=*/4, &visits1);
   URLRow row2 = MakeTypedUrlRow(kURL2, kTitle2, /*typed_count=*/2,
                                 /*last_visit=*/10, false, &visits2);
   fake_history_backend_->SetVisitsForUrl(&row1, visits1);
@@ -1077,64 +1118,144 @@
                            /*is_from_expiration=*/false);
 }
 
-// Expire several (but not all) local typed urls. This has only impact on local
-// store (metadata in the db and in-memory maps), nothing gets synced up.
+// Expire a local typed url (but not all). This has only impact on local store
+// (metadata in the db and in-memory maps), nothing gets synced up.
 TEST_F(TypedURLSyncBridgeTest, ExpireLocalTypedUrl) {
   StartSyncing(std::vector<TypedUrlSpecifics>());
 
-  URLRows url_rows;
-  std::vector<VisitVector> visit_vectors;
-  std::vector<std::string> urls;
-  urls.push_back("http://pie.com/");
-  urls.push_back("http://cake.com/");
-  urls.push_back("http://google.com/");
-  urls.push_back("http://foo.com/");
-  urls.push_back("http://bar.com/");
+  // Add two URLs into the history db and notify the bridge to get it synced up
+  // and thus also metadata written into the DB.
+  VisitVector visits1, visits2;
+  URLRow row1 = MakeTypedUrlRow(kURL, kTitle, /*typed_count=*/1,
+                                /*last_visit=*/2, /*hidden=*/false, &visits1);
+  URLRow row2 = MakeTypedUrlRow(kURL2, kTitle2, /*typed_count=*/1,
+                                /*last_visit=*/3, /*hidden=*/false, &visits2);
+  fake_history_backend_->SetVisitsForUrl(&row1, visits1);
+  fake_history_backend_->SetVisitsForUrl(&row2, visits2);
 
-  // Add the URLs into the history db and notify the bridge.
   EXPECT_CALL(mock_processor_,
               Put(IsValidStorageKey(), Pointee(HasTypedUrlInSpecifics()), _))
-      .Times(urls.size());
-  EXPECT_CALL(mock_processor_, UntrackEntityForStorageKey).Times(0);
-  BuildAndPushLocalChanges(urls.size(), 0, urls, &url_rows, &visit_vectors);
-  // Store the typed_urls incl. metadata into the bridge's database.
-  for (const std::string& url : urls) {
-    ApplyUrlAndVisitsChange(url, kTitle, /*typed_count=*/1, /*last_visit=*/3,
-                            /*hidden=*/false, /*update_metadata=*/true,
-                            EntityChange::ACTION_ADD);
-  }
+      .Times(2u)
+      .WillRepeatedly(StoreMetadata);
+  bridge()->OnURLsModified(fake_history_backend_.get(), {row1, row2},
+                           /*is_from_expiration=*/false);
 
-  // Check all the metadata is here, no need to untrack anything so far.
-  MetadataBatch metadata_batch;
-  metadata_store()->GetAllSyncMetadata(&metadata_batch);
-  ASSERT_EQ(urls.size(), metadata_batch.TakeAllMetadata().size());
+  std::string storage_key1 = GetStorageKey(kURL);
+  std::string storage_key2 = GetStorageKey(kURL2);
+  EXPECT_THAT(GetAllSyncMetadataKeys(),
+              UnorderedElementsAre(storage_key1, storage_key2));
 
-  // Simulate expiration - delete some urls from the backend and create deleted
-  // row vector.
-  URLRows rows;
-  std::set<std::string> deleted_storage_keys;
-  for (size_t i = 0; i < 3u; ++i) {
-    const std::string storage_key = GetStorageKey(url_rows[i].url().spec());
-    deleted_storage_keys.insert(storage_key);
-    fake_history_backend_->DeleteURL(url_rows[i].url());
-    rows.push_back(url_rows[i]);
-  }
+  // Simulate expiration - delete a url from the backend.
+  fake_history_backend_->DeleteURL(GURL(kURL));
 
-  // Notify typed url sync service of these URLs getting expired.
+  // Notify typed url bridge of these URLs getting expired.
   EXPECT_CALL(mock_processor_, Delete).Times(0);
-  for (const std::string& storage_key : deleted_storage_keys) {
-    EXPECT_CALL(mock_processor_, UntrackEntityForStorageKey(storage_key));
-  }
+  EXPECT_CALL(mock_processor_, UntrackEntityForStorageKey(storage_key1));
   bridge()->OnURLsDeleted(fake_history_backend_.get(), /*all_history=*/false,
-                          /*expired=*/true, rows, std::set<GURL>());
+                          /*expired=*/true, {row1}, std::set<GURL>());
 
   // The urls are removed from the metadata store.
-  MetadataBatch smaller_metadata_batch;
-  metadata_store()->GetAllSyncMetadata(&smaller_metadata_batch);
-  EXPECT_EQ(2u, smaller_metadata_batch.GetAllMetadata().size());
-  for (const auto& kv : smaller_metadata_batch.GetAllMetadata()) {
-    EXPECT_THAT(deleted_storage_keys, Not(Contains(kv.first)));
-  }
+  EXPECT_THAT(GetAllSyncMetadataKeys(), UnorderedElementsAre(storage_key2));
+}
+
+// Expire the last local typed visit for a URL (with some non-typed visits
+// remaining). This results in the sync entity getting untracked. This has only
+// impact on local store (metadata in the db and in-memory maps), nothing gets
+// synced up.
+TEST_F(TypedURLSyncBridgeTest, ExpireLocalTypedVisit) {
+  StartSyncing(std::vector<TypedUrlSpecifics>());
+
+  // Add two URLs into the history db and notify the bridge to get it synced up
+  // and thus also metadata written into the DB.
+  VisitVector visits1, visits2;
+  URLRow row1 = MakeTypedUrlRowWithTwoVisits(kURL, kTitle, /*typed_visit=*/2,
+                                             /*reload_visit=*/5, &visits1);
+  URLRow row2 = MakeTypedUrlRow(kURL2, kTitle2, /*typed_count=*/1,
+                                /*last_visit=*/4, /*hidden=*/false, &visits2);
+  fake_history_backend_->SetVisitsForUrl(&row1, visits1);
+  fake_history_backend_->SetVisitsForUrl(&row2, visits2);
+
+  EXPECT_CALL(mock_processor_,
+              Put(IsValidStorageKey(), Pointee(HasTypedUrlInSpecifics()), _))
+      .Times(2u)
+      .WillRepeatedly(StoreMetadata);
+  bridge()->OnURLsModified(fake_history_backend_.get(), {row1, row2},
+                           /*is_from_expiration=*/false);
+
+  std::string storage_key1 = GetStorageKey(kURL);
+  std::string storage_key2 = GetStorageKey(kURL2);
+  EXPECT_THAT(GetAllSyncMetadataKeys(),
+              UnorderedElementsAre(storage_key1, storage_key2));
+
+  // Simulate expiration of all visits before time 3.
+  fake_history_backend_->ExpireHistoryBeforeForTesting(SinceEpoch(3));
+  URLRow row1_updated;
+  ASSERT_TRUE(fake_history_backend_->GetURL(GURL(kURL), &row1_updated));
+  EXPECT_EQ(row1_updated.typed_count(), 0);
+  EXPECT_NE(row1_updated.last_visit(), base::Time());
+
+  // Notify typed url sync service of these URLs getting expired (it does not
+  // matter that we pass in the old version of row1, the bridge will fix it up).
+  EXPECT_CALL(mock_processor_, Delete).Times(0);
+  EXPECT_CALL(mock_processor_, UntrackEntityForStorageKey(storage_key1));
+  bridge()->OnURLsModified(fake_history_backend_.get(), {row1},
+                           /*is_from_expiration=*/true);
+
+  // The urls are removed from the metadata store.
+  EXPECT_THAT(GetAllSyncMetadataKeys(), UnorderedElementsAre(storage_key2));
+}
+
+// Expire the last local typed visit (with no other visits left in the DB but
+// keeping the url in the DB which happens e.g. for bookmarked urls). This
+// results in the sync entity getting untracked. This has only impact on local
+// store (metadata in the db and in-memory maps), nothing gets synced up.
+TEST_F(TypedURLSyncBridgeTest, ExpireLastLocalVisit) {
+  StartSyncing(std::vector<TypedUrlSpecifics>());
+
+  // Add two URLs into the history db and notify the bridge to get it synced up
+  // and thus also metadata written into the DB.
+  VisitVector visits1, visits2;
+  URLRow row1 = MakeTypedUrlRow(kURL, kTitle, /*typed_count=*/1,
+                                /*last_visit=*/1, /*hidden=*/false, &visits1);
+  URLRow row2 = MakeTypedUrlRow(kURL2, kTitle2, /*typed_count=*/1,
+                                /*last_visit=*/3, /*hidden=*/false, &visits2);
+  fake_history_backend_->SetVisitsForUrl(&row1, visits1);
+  fake_history_backend_->SetVisitsForUrl(&row2, visits2);
+
+  URLRow row1_original;
+  ASSERT_TRUE(fake_history_backend_->GetURL(GURL(kURL), &row1_original));
+
+  EXPECT_CALL(mock_processor_,
+              Put(IsValidStorageKey(), Pointee(HasTypedUrlInSpecifics()), _))
+      .Times(2u)
+      .WillRepeatedly(StoreMetadata);
+  bridge()->OnURLsModified(fake_history_backend_.get(), {row1, row2},
+                           /*is_from_expiration=*/false);
+
+  std::string storage_key1 = GetStorageKey(kURL);
+  std::string storage_key2 = GetStorageKey(kURL2);
+  EXPECT_THAT(GetAllSyncMetadataKeys(),
+              UnorderedElementsAre(storage_key1, storage_key2));
+
+  // Simulate expiration of all visits before time 2. Simulate kURL is
+  // bookmarked so that it does not get deleted despite there's no visit left.
+  EXPECT_CALL(*history_backend_client_, IsPinnedURL(GURL(kURL)))
+      .WillOnce(Return(true));
+  fake_history_backend_->ExpireHistoryBeforeForTesting(SinceEpoch(2));
+  URLRow row1_updated;
+  ASSERT_TRUE(fake_history_backend_->GetURL(GURL(kURL), &row1_updated));
+  EXPECT_EQ(row1_updated.typed_count(), 0);
+  EXPECT_EQ(row1_updated.last_visit(), base::Time());
+
+  // Notify typed url sync service of these URLs getting expired (it does not
+  // matter that we pass in the old version of row1, the bridge will fix it up).
+  EXPECT_CALL(mock_processor_, Delete).Times(0);
+  EXPECT_CALL(mock_processor_, UntrackEntityForStorageKey(storage_key1));
+  bridge()->OnURLsModified(fake_history_backend_.get(), {row1_updated},
+                           /*is_from_expiration=*/true);
+
+  // The urls are removed from the metadata store.
+  EXPECT_THAT(GetAllSyncMetadataKeys(), UnorderedElementsAre(storage_key2));
 }
 
 // Saturate the visits for a typed url with both TYPED and LINK navigations.
@@ -1250,10 +1371,9 @@
               UpdateStorageKey(
                   AllOf(HasURLInSpecifics(kURL), HasTitleInSpecifics(kTitle)),
                   IntToStorageKey(1), _));
-  VisitVector visits = ApplyUrlAndVisitsChange(
-      kURL, kTitle, /*typed_count=*/1, /*last_visit=*/3,
-      /*hidden=*/false,
-      /*update_metadata=*/false, EntityChange::ACTION_ADD);
+  VisitVector visits =
+      ApplyUrlAndVisitsChange(kURL, kTitle, /*typed_count=*/1, /*last_visit=*/3,
+                              /*hidden=*/false, EntityChange::ACTION_ADD);
 
   Time visit_time = SinceEpoch(3);
   VisitVector all_visits;
@@ -1278,9 +1398,9 @@
 
   EXPECT_CALL(mock_processor_, UntrackEntityForClientTagHash);
   StartSyncing(std::vector<TypedUrlSpecifics>());
-  ApplyUrlAndVisitsChange(
-      kURL, kTitle, /*typed_count=*/1, /*last_visit=*/kExpiredVisit,
-      /*hidden=*/false, /*update_metadata=*/false, EntityChange::ACTION_ADD);
+  ApplyUrlAndVisitsChange(kURL, kTitle, /*typed_count=*/1,
+                          /*last_visit=*/kExpiredVisit,
+                          /*hidden=*/false, EntityChange::ACTION_ADD);
 
   ASSERT_EQ(0, fake_history_backend_->GetIdByUrl(GURL(kURL)));
 }
@@ -1291,10 +1411,9 @@
 TEST_F(TypedURLSyncBridgeTest, UpdateUrlAndVisits) {
   StartSyncing(std::vector<TypedUrlSpecifics>());
 
-  VisitVector visits = ApplyUrlAndVisitsChange(
-      kURL, kTitle, /*typed_count=*/1, /*last_visit=*/3,
-      /*hidden=*/false,
-      /*update_metadata=*/false, EntityChange::ACTION_ADD);
+  VisitVector visits =
+      ApplyUrlAndVisitsChange(kURL, kTitle, /*typed_count=*/1, /*last_visit=*/3,
+                              /*hidden=*/false, EntityChange::ACTION_ADD);
   Time visit_time = SinceEpoch(3);
   VisitVector all_visits;
   URLRow url_row;
@@ -1313,8 +1432,7 @@
 
   VisitVector new_visits = ApplyUrlAndVisitsChange(
       kURL, kTitle2, /*typed_count=*/2, /*last_visit=*/6,
-      /*hidden=*/false,
-      /*update_metadata=*/false, EntityChange::ACTION_UPDATE);
+      /*hidden=*/false, EntityChange::ACTION_UPDATE);
 
   Time new_visit_time = SinceEpoch(6);
   url_id = fake_history_backend_->GetIdByUrl(GURL(kURL));
@@ -1360,8 +1478,7 @@
   AddObserver();
 
   ApplyUrlAndVisitsChange(kURL, kTitle, /*typed_count=*/1, /*last_visit=*/3,
-                          /*hidden=*/false, /*update_metadata=*/false,
-                          EntityChange::ACTION_DELETE);
+                          /*hidden=*/false, EntityChange::ACTION_DELETE);
 
   EXPECT_FALSE(fake_history_backend_->GetURL(GURL(kURL), &url_row));
   url_id = fake_history_backend_->GetIdByUrl(GURL(kURL));
diff --git a/components/password_manager/core/browser/form_fetcher_impl.cc b/components/password_manager/core/browser/form_fetcher_impl.cc
index 589b8a3..1443d8d 100644
--- a/components/password_manager/core/browser/form_fetcher_impl.cc
+++ b/components/password_manager/core/browser/form_fetcher_impl.cc
@@ -126,16 +126,6 @@
   // `stats_store` can be null in tests.
   if (stats_store)
     stats_store->GetSiteStats(form_digest_.url.GetOrigin(), this);
-
-  // The desktop bubble needs this information.
-  password_store->GetMatchingInsecureCredentials(form_digest_.signon_realm,
-                                                 this);
-#else
-  if (base::FeatureList::IsEnabled(features::kMutingCompromisedCredentials)) {
-    // We need this information to mute leak detection warming.
-    password_store->GetMatchingInsecureCredentials(form_digest_.signon_realm,
-                                                   this);
-  }
 #endif
 }
 
@@ -215,6 +205,15 @@
 
 void FormFetcherImpl::ProcessPasswordStoreResults(
     std::vector<std::unique_ptr<PasswordForm>> results) {
+  insecure_credentials_.clear();
+  for (const auto& form : results) {
+    for (const auto& issue : form->password_issues) {
+      insecure_credentials_.emplace_back(
+          form->signon_realm, form->username_value, issue.second.create_time,
+          issue.first, issue.second.is_muted);
+      insecure_credentials_.back().in_store = form->in_store;
+    }
+  }
   if (client_->GetProfilePasswordStore()->affiliated_match_helper()) {
     client_->GetProfilePasswordStore()
         ->affiliated_match_helper()
@@ -303,9 +302,4 @@
   ProcessPasswordStoreResults(std::move(forms));
 }
 
-void FormFetcherImpl::OnGetInsecureCredentials(
-    std::vector<InsecureCredential> insecure_credentials) {
-  insecure_credentials_ = std::move(insecure_credentials);
-}
-
 }  // namespace password_manager
diff --git a/components/password_manager/core/browser/form_fetcher_impl.h b/components/password_manager/core/browser/form_fetcher_impl.h
index d7b88be..0279751 100644
--- a/components/password_manager/core/browser/form_fetcher_impl.h
+++ b/components/password_manager/core/browser/form_fetcher_impl.h
@@ -13,7 +13,6 @@
 #include "base/observer_list.h"
 #include "components/password_manager/core/browser/form_fetcher.h"
 #include "components/password_manager/core/browser/http_password_store_migrator.h"
-#include "components/password_manager/core/browser/insecure_credentials_consumer.h"
 #include "components/password_manager/core/browser/insecure_credentials_table.h"
 #include "components/password_manager/core/browser/password_store.h"
 #include "components/password_manager/core/browser/password_store_consumer.h"
@@ -27,7 +26,6 @@
 // update the Clone() method accordingly.
 class FormFetcherImpl : public FormFetcher,
                         public PasswordStoreConsumer,
-                        public InsecureCredentialsConsumer,
                         public HttpPasswordStoreMigrator::Consumer {
  public:
   // |form_digest| describes what credentials need to be retrieved and
@@ -116,10 +114,6 @@
   void ProcessMigratedForms(
       std::vector<std::unique_ptr<PasswordForm>> forms) override;
 
-  // InsecureCredentialsConsumer:
-  void OnGetInsecureCredentials(
-      std::vector<InsecureCredential> insecure_credentials) override;
-
   // Does the actual migration.
   std::unique_ptr<HttpPasswordStoreMigrator> http_migrator_;
 
diff --git a/components/password_manager/core/browser/form_fetcher_impl_unittest.cc b/components/password_manager/core/browser/form_fetcher_impl_unittest.cc
index 8a5a9b6..985a53c 100644
--- a/components/password_manager/core/browser/form_fetcher_impl_unittest.cc
+++ b/components/password_manager/core/browser/form_fetcher_impl_unittest.cc
@@ -447,11 +447,15 @@
 TEST_P(FormFetcherImplTest, InsecureCredentials) {
   Fetch();
   form_fetcher_->AddConsumer(&consumer_);
-  const std::vector<InsecureCredential> credentials = {InsecureCredential(
-      form_digest_.signon_realm, u"username_value", base::Time::FromTimeT(1),
-      InsecureType::kLeaked, IsMuted(false))};
-  static_cast<InsecureCredentialsConsumer*>(form_fetcher_.get())
-      ->OnGetInsecureCredentials(credentials);
+  PasswordForm form = CreateNonFederated();
+  form.password_issues.insert({InsecureType::kLeaked, InsecurityMetadata()});
+  std::vector<std::unique_ptr<PasswordForm>> results;
+  results.push_back(std::make_unique<PasswordForm>(form));
+  const std::vector<InsecureCredential> credentials = {
+      InsecureCredential(form.signon_realm, form.username_value, base::Time(),
+                         InsecureType::kLeaked, IsMuted(false))};
+  static_cast<PasswordStoreConsumer*>(form_fetcher_.get())
+      ->OnGetPasswordStoreResultsFrom(mock_store_.get(), std::move(results));
   EXPECT_THAT(form_fetcher_->GetInsecureCredentials(),
               UnorderedElementsAreArray(credentials));
 }
@@ -526,20 +530,6 @@
   EXPECT_THAT(form_fetcher_->GetInteractionsStats(),
               UnorderedElementsAre(stats));
 }
-
-TEST_P(FormFetcherImplTest, FetchInsecure) {
-  std::vector<InsecureCredential> list = {InsecureCredential(
-      form_digest_.signon_realm, u"username_value", base::Time::FromTimeT(1),
-      InsecureType::kLeaked, IsMuted(false))};
-  EXPECT_CALL(*mock_store_,
-              GetMatchingInsecureCredentialsImpl(form_digest_.signon_realm))
-      .WillOnce(Return(list));
-  form_fetcher_->Fetch();
-  task_environment_.RunUntilIdle();
-
-  EXPECT_THAT(form_fetcher_->GetInsecureCredentials(),
-              UnorderedElementsAreArray(list));
-}
 #else
 TEST_P(FormFetcherImplTest, DontFetchStatistics) {
   EXPECT_CALL(*mock_store_, GetLogins(form_digest_, form_fetcher_.get()));
@@ -547,32 +537,6 @@
   form_fetcher_->Fetch();
   task_environment_.RunUntilIdle();
 }
-
-TEST_P(FormFetcherImplTest, DontFetchInsecure) {
-  base::test::ScopedFeatureList feature_list;
-  feature_list.InitWithFeatureState(features::kMutingCompromisedCredentials,
-                                    false);
-  EXPECT_CALL(*mock_store_, GetMatchingInsecureCredentialsImpl).Times(0);
-  form_fetcher_->Fetch();
-  task_environment_.RunUntilIdle();
-}
-
-TEST_P(FormFetcherImplTest, FetchInsecure) {
-  base::test::ScopedFeatureList feature_list;
-  feature_list.InitWithFeatureState(features::kMutingCompromisedCredentials,
-                                    true);
-  std::vector<InsecureCredential> list = {InsecureCredential(
-      form_digest_.signon_realm, u"username_value", base::Time::FromTimeT(1),
-      InsecureType::kLeaked, IsMuted(false))};
-  EXPECT_CALL(*mock_store_,
-              GetMatchingInsecureCredentialsImpl(form_digest_.signon_realm))
-      .WillOnce(Return(list));
-  form_fetcher_->Fetch();
-  task_environment_.RunUntilIdle();
-
-  EXPECT_THAT(form_fetcher_->GetInsecureCredentials(),
-              UnorderedElementsAreArray(list));
-}
 #endif
 
 // Test that ensures HTTP passwords are not migrated on HTTP sites.
@@ -866,13 +830,15 @@
 TEST_P(FormFetcherImplTest, Clone_Insecure) {
   Fetch();
   // Pass empty results to make the state NOT_WAITING.
-  store_consumer()->OnGetPasswordStoreResultsFrom(
-      mock_store_.get(), std::vector<std::unique_ptr<PasswordForm>>());
-  const std::vector<InsecureCredential> credentials = {InsecureCredential(
-      form_digest_.signon_realm, u"username_value", base::Time::FromTimeT(1),
-      InsecureType::kLeaked, IsMuted(false))};
-  static_cast<InsecureCredentialsConsumer*>(form_fetcher_.get())
-      ->OnGetInsecureCredentials(credentials);
+  PasswordForm form = CreateNonFederated();
+  form.password_issues.insert({InsecureType::kLeaked, InsecurityMetadata()});
+  std::vector<std::unique_ptr<PasswordForm>> results;
+  results.push_back(std::make_unique<PasswordForm>(form));
+  const std::vector<InsecureCredential> credentials = {
+      InsecureCredential(form.signon_realm, form.username_value, base::Time(),
+                         InsecureType::kLeaked, IsMuted(false))};
+  static_cast<PasswordStoreConsumer*>(form_fetcher_.get())
+      ->OnGetPasswordStoreResultsFrom(mock_store_.get(), std::move(results));
 
   auto clone = form_fetcher_->Clone();
   EXPECT_THAT(clone->GetInsecureCredentials(),
diff --git a/components/password_manager/core/browser/mock_password_store.h b/components/password_manager/core/browser/mock_password_store.h
index ee39a29..58d5155 100644
--- a/components/password_manager/core/browser/mock_password_store.h
+++ b/components/password_manager/core/browser/mock_password_store.h
@@ -75,10 +75,6 @@
               GetAllInsecureCredentialsImpl,
               (),
               (override));
-  MOCK_METHOD(std::vector<InsecureCredential>,
-              GetMatchingInsecureCredentialsImpl,
-              (const std::string&),
-              (override));
   MOCK_METHOD(void,
               GetAllLoginsWithAffiliationAndBrandingInformation,
               (PasswordStoreConsumer*),
diff --git a/components/password_manager/core/browser/multi_store_form_fetcher.cc b/components/password_manager/core/browser/multi_store_form_fetcher.cc
index febab8f..26c0624 100644
--- a/components/password_manager/core/browser/multi_store_form_fetcher.cc
+++ b/components/password_manager/core/browser/multi_store_form_fetcher.cc
@@ -55,11 +55,6 @@
   if (account_password_store) {
     state_ = State::WAITING;
     account_password_store->GetLogins(form_digest_, this);
-#if !defined(OS_IOS) && !defined(OS_ANDROID)
-    // The desktop bubble needs this information.
-    account_password_store->GetMatchingInsecureCredentials(
-        form_digest_.signon_realm, this);
-#endif
   }
 }
 
@@ -163,14 +158,6 @@
   AggregatePasswordStoreResults(std::move(forms));
 }
 
-void MultiStoreFormFetcher::OnGetInsecureCredentials(
-    std::vector<InsecureCredential> insecure_credentials) {
-  // Both the profile and account store has been queried. Therefore, append the
-  // received credentials to the existing ones.
-  base::ranges::move(insecure_credentials,
-                     std::back_inserter(insecure_credentials_));
-}
-
 void MultiStoreFormFetcher::SplitResults(
     std::vector<std::unique_ptr<PasswordForm>> results) {
   // Compute the |is_blocklisted_in_profile_store_| and
diff --git a/components/password_manager/core/browser/multi_store_form_fetcher.h b/components/password_manager/core/browser/multi_store_form_fetcher.h
index 56d92a5..63ded19 100644
--- a/components/password_manager/core/browser/multi_store_form_fetcher.h
+++ b/components/password_manager/core/browser/multi_store_form_fetcher.h
@@ -39,10 +39,6 @@
   void ProcessMigratedForms(
       std::vector<std::unique_ptr<PasswordForm>> forms) override;
 
-  // InsecureCredentialsConsumer:
-  void OnGetInsecureCredentials(
-      std::vector<InsecureCredential> insecure_credentials) override;
-
  private:
   void AggregatePasswordStoreResults(
       std::vector<std::unique_ptr<PasswordForm>> results);
diff --git a/components/password_manager/core/browser/multi_store_form_fetcher_unittest.cc b/components/password_manager/core/browser/multi_store_form_fetcher_unittest.cc
index c2cc71d8..e441f0f2 100644
--- a/components/password_manager/core/browser/multi_store_form_fetcher_unittest.cc
+++ b/components/password_manager/core/browser/multi_store_form_fetcher_unittest.cc
@@ -445,23 +445,39 @@
 
 TEST_F(MultiStoreFormFetcherTest, InsecureCredentials) {
   Fetch();
+  PasswordForm profile_form =
+      CreateHTMLForm("www.url.com", "username1", "pass");
+  profile_form.password_issues.insert(
+      {InsecureType::kLeaked, InsecurityMetadata()});
+  std::vector<std::unique_ptr<PasswordForm>> profile_results;
+  profile_results.push_back(std::make_unique<PasswordForm>(profile_form));
+
+  PasswordForm account_form =
+      CreateHTMLForm("www.url.com", "username1", "pass");
+  account_form.password_issues.insert(
+      {InsecureType::kLeaked, InsecurityMetadata()});
+  std::vector<std::unique_ptr<PasswordForm>> account_results;
+  account_results.push_back(std::make_unique<PasswordForm>(account_form));
+
   InsecureCredential profile_store_insecure_credentials(
-      form_digest_.signon_realm, u"profile_username", base::Time::FromTimeT(1),
+      profile_form.signon_realm, profile_form.username_value, base::Time(),
       InsecureType::kLeaked, IsMuted(false));
   profile_store_insecure_credentials.in_store =
       PasswordForm::Store::kProfileStore;
 
   InsecureCredential account_store_insecure_credentials(
-      form_digest_.signon_realm, u"account_username", base::Time::FromTimeT(1),
+      account_form.signon_realm, account_form.username_value, base::Time(),
       InsecureType::kLeaked, IsMuted(false));
   account_store_insecure_credentials.in_store =
       PasswordForm::Store::kAccountStore;
 
-  static_cast<InsecureCredentialsConsumer*>(form_fetcher_.get())
-      ->OnGetInsecureCredentials({profile_store_insecure_credentials});
+  static_cast<PasswordStoreConsumer*>(form_fetcher_.get())
+      ->OnGetPasswordStoreResultsFrom(profile_mock_store_.get(),
+                                      std::move(profile_results));
 
-  static_cast<InsecureCredentialsConsumer*>(form_fetcher_.get())
-      ->OnGetInsecureCredentials({account_store_insecure_credentials});
+  static_cast<PasswordStoreConsumer*>(form_fetcher_.get())
+      ->OnGetPasswordStoreResultsFrom(account_mock_store_.get(),
+                                      std::move(account_results));
 
   EXPECT_THAT(
       form_fetcher_->GetInsecureCredentials(),
diff --git a/components/password_manager/core/browser/password_manager_unittest.cc b/components/password_manager/core/browser/password_manager_unittest.cc
index 65dee04..c548712 100644
--- a/components/password_manager/core/browser/password_manager_unittest.cc
+++ b/components/password_manager/core/browser/password_manager_unittest.cc
@@ -4277,19 +4277,15 @@
       std::make_unique<testing::StrictMock<MockLeakDetectionCheckFactory>>();
   manager()->set_leak_factory(std::move(mock_factory));
 
-  const PasswordForm form = MakeSimpleForm();
+  PasswordForm form = MakeSimpleForm();
+  form.password_issues.insert(
+      {InsecureType::kLeaked, InsecurityMetadata(base::Time(), IsMuted(true))});
   std::vector<FormData> observed = {form.form_data};
   EXPECT_CALL(*store_, GetLogins)
-      .WillRepeatedly(WithArg<1>(InvokeEmptyConsumerWithForms(store_.get())));
+      .WillRepeatedly(WithArg<1>(InvokeConsumer(store_.get(), form)));
   manager()->OnPasswordFormsParsed(&driver_, observed);
   manager()->OnPasswordFormsRendered(&driver_, observed, true);
 
-  // Add muted insecure credentials.
-  std::vector<InsecureCredential> insecure_credentials = {InsecureCredential(
-      form.signon_realm, form.username_value, base::Time::FromTimeT(1),
-      InsecureType::kLeaked, IsMuted(true))};
-  EXPECT_CALL(*store_, GetMatchingInsecureCredentialsImpl(form.signon_realm))
-      .WillOnce(Return(insecure_credentials));
   task_environment_.RunUntilIdle();
 
   EXPECT_CALL(client_, IsSavingAndFillingEnabled).WillRepeatedly(Return(true));
@@ -4316,19 +4312,18 @@
   MockLeakDetectionCheckFactory* weak_factory = mock_factory.get();
   manager()->set_leak_factory(std::move(mock_factory));
 
-  const PasswordForm form = MakeSimpleForm();
+  PasswordForm form = MakeSimpleForm();
   std::vector<FormData> observed = {form.form_data};
+
+  form.username_value = u"different_username";
+  form.password_issues.insert(
+      {InsecureType::kLeaked, InsecurityMetadata(base::Time(), IsMuted(true))});
+
   EXPECT_CALL(*store_, GetLogins)
-      .WillRepeatedly(WithArg<1>(InvokeEmptyConsumerWithForms(store_.get())));
+      .WillRepeatedly(WithArg<1>(InvokeConsumer(store_.get(), form)));
   manager()->OnPasswordFormsParsed(&driver_, observed);
   manager()->OnPasswordFormsRendered(&driver_, observed, true);
 
-  // Add muted insecure credentials.
-  std::vector<InsecureCredential> insecure_credentials = {InsecureCredential(
-      form.signon_realm, u"different_username", base::Time::FromTimeT(1),
-      InsecureType::kLeaked, IsMuted(true))};
-  EXPECT_CALL(*store_, GetMatchingInsecureCredentialsImpl(form.signon_realm))
-      .WillOnce(Return(insecure_credentials));
   task_environment_.RunUntilIdle();
 
   EXPECT_CALL(client_, IsSavingAndFillingEnabled).WillRepeatedly(Return(true));
diff --git a/components/password_manager/core/browser/password_store.cc b/components/password_manager/core/browser/password_store.cc
index e1e88b4..fbdb81e 100644
--- a/components/password_manager/core/browser/password_store.cc
+++ b/components/password_manager/core/browser/password_store.cc
@@ -332,25 +332,6 @@
       base::BindOnce(&PasswordStore::GetAllInsecureCredentialsImpl, this));
 }
 
-void PasswordStore::GetMatchingInsecureCredentials(
-    const std::string& signon_realm,
-    InsecureCredentialsConsumer* consumer) {
-  if (affiliated_match_helper_) {
-    PasswordFormDigest form(PasswordForm::Scheme::kHtml, signon_realm,
-                            GURL(signon_realm));
-    affiliated_match_helper_->GetAffiliatedAndroidAndWebRealms(
-        form,
-        base::BindOnce(
-            &PasswordStore::ScheduleGetInsecureCredentialsWithAffiliations,
-            this, consumer->GetWeakPtr(), signon_realm));
-  } else {
-    PostInsecureCredentialsTaskAndReplyToConsumerWithResult(
-        consumer,
-        base::BindOnce(&PasswordStore::GetMatchingInsecureCredentialsImpl, this,
-                       signon_realm));
-  }
-}
-
 void PasswordStore::AddObserver(Observer* observer) {
   observers_.AddObserver(observer);
 }
@@ -403,14 +384,6 @@
   return std::vector<InsecureCredential>();
 }
 
-std::vector<InsecureCredential>
-PasswordStore::GetMatchingInsecureCredentialsImpl(
-    const std::string& signon_realm) {
-  // TODO(crbug.com/1217070): Move as implementation detail into backend.
-  LOG(ERROR) << "Called function without implementation: " << __func__;
-  return std::vector<InsecureCredential>();
-}
-
 void PasswordStore::InvokeAndNotifyAboutInsecureCredentialsChange(
     base::OnceCallback<PasswordStoreChangeList()> callback) {
   DCHECK(background_task_runner_->RunsTasksInCurrentSequence());
@@ -486,23 +459,6 @@
   handler->InvokeOnCompletion(std::move(notify_callback));
 }
 
-std::vector<InsecureCredential>
-PasswordStore::GetInsecureCredentialsWithAffiliationsImpl(
-    const std::string& signon_realm,
-    const std::vector<std::string>& additional_affiliated_realms) {
-  DCHECK(background_task_runner_->RunsTasksInCurrentSequence());
-  std::vector<InsecureCredential> results(
-      GetMatchingInsecureCredentialsImpl(signon_realm));
-  for (const std::string& realm : additional_affiliated_realms) {
-    std::vector<InsecureCredential> more_results(
-        GetMatchingInsecureCredentialsImpl(realm));
-    results.insert(results.end(), std::make_move_iterator(more_results.begin()),
-                   std::make_move_iterator(more_results.end()));
-  }
-
-  return results;
-}
-
 void PasswordStore::InjectAffiliationAndBrandingInformation(
     LoginsReply callback,
     LoginsResult forms) {
@@ -515,17 +471,4 @@
   }
 }
 
-void PasswordStore::ScheduleGetInsecureCredentialsWithAffiliations(
-    base::WeakPtr<InsecureCredentialsConsumer> consumer,
-    const std::string& signon_realm,
-    const std::vector<std::string>& additional_affiliated_realms) {
-  if (consumer) {
-    PostInsecureCredentialsTaskAndReplyToConsumerWithResult(
-        consumer.get(),
-        base::BindOnce(
-            &PasswordStore::GetInsecureCredentialsWithAffiliationsImpl, this,
-            signon_realm, additional_affiliated_realms));
-  }
-}
-
 }  // namespace password_manager
diff --git a/components/password_manager/core/browser/password_store.h b/components/password_manager/core/browser/password_store.h
index 5b854ff..f64d0965 100644
--- a/components/password_manager/core/browser/password_store.h
+++ b/components/password_manager/core/browser/password_store.h
@@ -137,11 +137,6 @@
   // completion. The request will be cancelled if the consumer is destroyed.
   void GetAllInsecureCredentials(InsecureCredentialsConsumer* consumer);
 
-  // Returns all the insecure credentials for a given site. This list also
-  // includes Android affiliated credentials.
-  void GetMatchingInsecureCredentials(const std::string& signon_realm,
-                                      InsecureCredentialsConsumer* consumer);
-
   // Schedules the given |task| to be run on the PasswordStore's TaskRunner.
   bool ScheduleTask(base::OnceClosure task);
 
@@ -184,8 +179,6 @@
   // insecure credentials.
   // Returns PasswordStoreChangeList for the updated password forms.
   virtual std::vector<InsecureCredential> GetAllInsecureCredentialsImpl();
-  virtual std::vector<InsecureCredential> GetMatchingInsecureCredentialsImpl(
-      const std::string& signon_realm);
 
   // Invokes callback and notifies observers if there was a change to the list
   // of insecure passwords. It also informs Sync about the updated password
@@ -233,26 +226,12 @@
   void UnblocklistInternal(base::OnceClosure completion,
                            std::vector<std::unique_ptr<PasswordForm>> forms);
 
-  // Extended version of GetMatchingInsecureCredentialsImpl that also returns
-  // credentials stored for the specified affiliated Android applications or Web
-  // realms.
-  std::vector<InsecureCredential> GetInsecureCredentialsWithAffiliationsImpl(
-      const std::string& signon_realm,
-      const std::vector<std::string>& additional_affiliated_realms);
-
   // Retrieves and fills in affiliation and branding information for Android
   // credentials in |forms| and invokes |callback| with the result. Called on
   // the main sequence.
   void InjectAffiliationAndBrandingInformation(LoginsReply callback,
                                                LoginsResult forms);
 
-  // Schedules GetInsecureCredentialsWithAffiliationsImpl() to be run on the
-  // background sequence.
-  void ScheduleGetInsecureCredentialsWithAffiliations(
-      base::WeakPtr<InsecureCredentialsConsumer> consumer,
-      const std::string& signon_realm,
-      const std::vector<std::string>& additional_affiliated_realms);
-
   // The local backend is currently a ref-counted type because it still inherits
   // from PasswordStore and this would be a self reference. So, if `this` is an
   // instance of PasswordStoreImpl, this member is not used.
diff --git a/components/password_manager/core/browser/password_store_impl.cc b/components/password_manager/core/browser/password_store_impl.cc
index f60e033..6987646 100644
--- a/components/password_manager/core/browser/password_store_impl.cc
+++ b/components/password_manager/core/browser/password_store_impl.cc
@@ -151,21 +151,6 @@
   return insecure_credentials;
 }
 
-std::vector<InsecureCredential>
-PasswordStoreImpl::GetMatchingInsecureCredentialsImpl(
-    const std::string& signon_realm) {
-  DCHECK(background_task_runner()->RunsTasksInCurrentSequence());
-  std::vector<InsecureCredential> insecure_credentials =
-      login_db_ ? login_db_->insecure_credentials_table().GetRows(signon_realm)
-                : std::vector<InsecureCredential>();
-  PasswordForm::Store store = IsAccountStore()
-                                  ? PasswordForm::Store::kAccountStore
-                                  : PasswordForm::Store::kProfileStore;
-  for (InsecureCredential& cred : insecure_credentials)
-    cred.in_store = store;
-  return insecure_credentials;
-}
-
 base::WeakPtr<syncer::ModelTypeControllerDelegate>
 PasswordStoreImpl::GetSyncControllerDelegateOnBackgroundSequence() {
   DCHECK(background_task_runner()->RunsTasksInCurrentSequence());
diff --git a/components/password_manager/core/browser/password_store_impl.h b/components/password_manager/core/browser/password_store_impl.h
index 04f8510..92bb4ea 100644
--- a/components/password_manager/core/browser/password_store_impl.h
+++ b/components/password_manager/core/browser/password_store_impl.h
@@ -53,8 +53,6 @@
       const base::RepeatingCallback<bool(const GURL&)>& origin_filter);
   DatabaseCleanupResult DeleteUndecryptableLogins() override;
   std::vector<InsecureCredential> GetAllInsecureCredentialsImpl() override;
-  std::vector<InsecureCredential> GetMatchingInsecureCredentialsImpl(
-      const std::string& signon_realm) override;
 
   // Implements PasswordStoreSync interface.
   PasswordStoreChangeList AddLoginSync(const PasswordForm& form,
diff --git a/components/password_manager/core/browser/password_store_unittest.cc b/components/password_manager/core/browser/password_store_unittest.cc
index d694f92..917b5fb 100644
--- a/components/password_manager/core/browser/password_store_unittest.cc
+++ b/components/password_manager/core/browser/password_store_unittest.cc
@@ -1063,88 +1063,6 @@
   store->ShutdownOnUIThread();
 }
 
-// Test GetMatchingInsecureCredentials when affiliation service isn't
-// available.
-TEST_F(PasswordStoreTest, GetMatchingInsecureWithoutAffiliations) {
-  scoped_refptr<PasswordStoreImpl> store = CreatePasswordStore();
-  store->Init(nullptr);
-
-  constexpr PasswordFormData kTestCredentials[] = {
-      {PasswordForm::Scheme::kHtml, kTestWebRealm1, kTestWebRealm1, "", u"",
-       u"", u"", u"username_value", u"password", kTestLastUsageTime, 1},
-      {PasswordForm::Scheme::kHtml, kTestWebRealm2, kTestWebRealm2, "", u"",
-       u"", u"", u"username_value", u"topsecret", kTestLastUsageTime, 1}};
-  for (const auto& data : kTestCredentials) {
-    std::unique_ptr<PasswordForm> form = FillPasswordFormWithData(data);
-    form->password_issues = {
-        {InsecureType::kLeaked,
-         InsecurityMetadata(base::Time::FromTimeT(1), IsMuted(false))}};
-    store->AddLogin(*form);
-  };
-
-  InsecureCredential expected_credential(kTestWebRealm1, u"username_value",
-                                         base::Time::FromTimeT(1),
-                                         InsecureType::kLeaked, IsMuted(false));
-  MockInsecureCredentialsConsumer consumer;
-  EXPECT_CALL(consumer, OnGetInsecureCredentials(
-                            UnorderedElementsAre(expected_credential)));
-  store->GetMatchingInsecureCredentials(kTestWebRealm1, &consumer);
-  WaitForPasswordStore();
-
-  store->ShutdownOnUIThread();
-}
-
-// Test GetMatchingInsecureCredentials with some matching Android
-// credentials.
-TEST_F(PasswordStoreTest, GetMatchingInsecureWithAffiliations) {
-  scoped_refptr<PasswordStoreImpl> store = CreatePasswordStore();
-  store->Init(nullptr);
-
-  constexpr PasswordFormData kTestCredentials[] = {
-      {PasswordForm::Scheme::kHtml, kTestWebRealm1, kTestWebRealm1, "", u"",
-       u"", u"", u"username_value", u"password", kTestLastUsageTime, 1},
-      {PasswordForm::Scheme::kHtml, kTestAndroidRealm1, kTestAndroidRealm1, "",
-       u"", u"", u"", u"username_value_1", u"topsecret", kTestLastUsageTime, 1},
-      {PasswordForm::Scheme::kHtml, kTestWebRealm2, kTestWebRealm2, "", u"",
-       u"", u"", u"username_value_2", u"topsecret2", kTestLastUsageTime, 1}};
-  InsecureCredential kInsecureCredentials[] = {
-      InsecureCredential(kTestWebRealm1, u"username_value",
-                         base::Time::FromTimeT(1), InsecureType::kLeaked,
-                         IsMuted(false)),
-      InsecureCredential(kTestAndroidRealm1, u"username_value_1",
-                         base::Time::FromTimeT(1), InsecureType::kPhished,
-                         IsMuted(false)),
-      InsecureCredential(kTestWebRealm2, u"username_value_2",
-                         base::Time::FromTimeT(3), InsecureType::kLeaked,
-                         IsMuted(false))};
-
-  for (unsigned int i = 0; i < 3; ++i) {
-    std::unique_ptr<PasswordForm> form =
-        FillPasswordFormWithData(kTestCredentials[i]);
-    form->password_issues = {
-        {kInsecureCredentials[i].insecure_type,
-         InsecurityMetadata(kInsecureCredentials[i].create_time,
-                            kInsecureCredentials[i].is_muted)}};
-    store->AddLogin(*form);
-  }
-
-  PasswordFormDigest observed_form = {PasswordForm::Scheme::kHtml,
-                                      kTestWebRealm1, GURL(kTestWebRealm1)};
-  std::vector<std::string> affiliated_android_realms = {kTestAndroidRealm1};
-  auto mock_helper = std::make_unique<MockAffiliatedMatchHelper>();
-  mock_helper->ExpectCallToGetAffiliatedAndroidRealms(
-      observed_form, affiliated_android_realms);
-  store->SetAffiliatedMatchHelper(std::move(mock_helper));
-
-  MockInsecureCredentialsConsumer consumer;
-  EXPECT_CALL(consumer, OnGetInsecureCredentials(UnorderedElementsAre(
-                            kInsecureCredentials[0], kInsecureCredentials[1])));
-  store->GetMatchingInsecureCredentials(kTestWebRealm1, &consumer);
-  WaitForPasswordStore();
-
-  store->ShutdownOnUIThread();
-}
-
 // Test that updating a password in the store deletes the corresponding
 // insecure credential synchronously.
 TEST_F(PasswordStoreTest, RemoveInsecureCredentialsSyncOnUpdate) {
diff --git a/components/password_manager/core/browser/test_password_store.cc b/components/password_manager/core/browser/test_password_store.cc
index 889a44d0..520dcae 100644
--- a/components/password_manager/core/browser/test_password_store.cc
+++ b/components/password_manager/core/browser/test_password_store.cc
@@ -257,18 +257,6 @@
                                          insecure_credentials_.end());
 }
 
-std::vector<InsecureCredential>
-TestPasswordStore::GetMatchingInsecureCredentialsImpl(
-    const std::string& signon_realm) {
-  std::vector<InsecureCredential> result;
-  std::copy_if(insecure_credentials_.begin(), insecure_credentials_.end(),
-               std::back_inserter(result),
-               [&signon_realm](const InsecureCredential& credential) {
-                 return credential.signon_realm == signon_realm;
-               });
-  return result;
-}
-
 bool TestPasswordStore::IsAccountStore() const {
   return is_account_store_.value();
 }
diff --git a/components/password_manager/core/browser/test_password_store.h b/components/password_manager/core/browser/test_password_store.h
index 77b2a3c..cfccfe2e 100644
--- a/components/password_manager/core/browser/test_password_store.h
+++ b/components/password_manager/core/browser/test_password_store.h
@@ -119,8 +119,6 @@
                          bool custom_passphrase_sync_enabled,
                          BulkCheckDone bulk_check_done) override;
   std::vector<InsecureCredential> GetAllInsecureCredentialsImpl() override;
-  std::vector<InsecureCredential> GetMatchingInsecureCredentialsImpl(
-      const std::string& signon_realm) override;
 
  private:
   LoginsResult GetAllLoginsInternal();
diff --git a/components/payments/content/payment_manifest_web_data_service.cc b/components/payments/content/payment_manifest_web_data_service.cc
index 4311c4b6..23702538 100644
--- a/components/payments/content/payment_manifest_web_data_service.cc
+++ b/components/payments/content/payment_manifest_web_data_service.cc
@@ -158,24 +158,35 @@
 
 void PaymentManifestWebDataService::ClearSecurePaymentConfirmationInstruments(
     base::Time begin,
-    base::Time end) {
-  wdbs_->ScheduleDBTask(
+    base::Time end,
+    base::OnceClosure callback) {
+  WebDataServiceBase::Handle handle = wdbs_->ScheduleDBTaskWithResult(
       FROM_HERE,
       base::BindOnce(&PaymentManifestWebDataService::
                          ClearSecurePaymentConfirmationInstrumentsImpl,
-                     this, begin, end));
+                     this, begin, end),
+      this);
+  clearing_instruments_requests_[handle] = std::move(callback);
 }
 
-WebDatabase::State
+std::unique_ptr<WDTypedResult>
 PaymentManifestWebDataService::ClearSecurePaymentConfirmationInstrumentsImpl(
     base::Time begin,
     base::Time end,
     WebDatabase* db) {
-  if (PaymentMethodManifestTable::FromWebDatabase(db)
-          ->ClearSecurePaymentConfirmationInstruments(begin, end)) {
-    return WebDatabase::COMMIT_NEEDED;
-  }
-  return WebDatabase::COMMIT_NOT_NEEDED;
+  return std::make_unique<WDResult<bool>>(
+      BOOL_RESULT, PaymentMethodManifestTable::FromWebDatabase(db)
+                       ->ClearSecurePaymentConfirmationInstruments(begin, end));
+}
+
+void PaymentManifestWebDataService::OnWebDataServiceRequestDone(
+    WebDataServiceBase::Handle h,
+    std::unique_ptr<WDTypedResult> result) {
+  if (clearing_instruments_requests_.find(h) ==
+      clearing_instruments_requests_.end())
+    return;
+
+  std::move(clearing_instruments_requests_[h]).Run();
 }
 
 void PaymentManifestWebDataService::RemoveExpiredData(WebDatabase* db) {
diff --git a/components/payments/content/payment_manifest_web_data_service.h b/components/payments/content/payment_manifest_web_data_service.h
index 3fe5a71..63398f6 100644
--- a/components/payments/content/payment_manifest_web_data_service.h
+++ b/components/payments/content/payment_manifest_web_data_service.h
@@ -13,11 +13,11 @@
 #include "base/memory/ref_counted.h"
 #include "components/payments/content/web_app_manifest.h"
 #include "components/webdata/common/web_data_service_base.h"
+#include "components/webdata/common/web_data_service_consumer.h"
 #include "components/webdata/common/web_database.h"
 
 class WDTypedResult;
 class WebDatabaseService;
-class WebDataServiceConsumer;
 
 namespace base {
 class SingleThreadTaskRunner;
@@ -29,7 +29,8 @@
 
 // Web data service to read/write data in WebAppManifestSectionTable and
 // PaymentMethodManifestTable.
-class PaymentManifestWebDataService : public WebDataServiceBase {
+class PaymentManifestWebDataService : public WebDataServiceBase,
+                                      public WebDataServiceConsumer {
  public:
   PaymentManifestWebDataService(
       scoped_refptr<WebDatabaseService> wdbs,
@@ -70,14 +71,21 @@
       WebDataServiceConsumer* consumer);
 
   // Clears all of the the secure payment confirmation instrument information
-  // created in the given time range `begin` and `end`.
+  // created in the given time range `begin` and `end`, and invokes `callback`
+  // when the clearing is completed.
   void ClearSecurePaymentConfirmationInstruments(base::Time begin,
-                                                 base::Time end);
+                                                 base::Time end,
+                                                 base::OnceClosure callback);
+
+  // Override WebDataServiceConsumer interface.
+  void OnWebDataServiceRequestDone(
+      WebDataServiceBase::Handle h,
+      std::unique_ptr<WDTypedResult> result) override;
 
  private:
   ~PaymentManifestWebDataService() override;
 
-  WebDatabase::State ClearSecurePaymentConfirmationInstrumentsImpl(
+  std::unique_ptr<WDTypedResult> ClearSecurePaymentConfirmationInstrumentsImpl(
       base::Time begin,
       base::Time end,
       WebDatabase* db);
@@ -105,6 +113,9 @@
       std::vector<std::vector<uint8_t>> credential_ids,
       WebDatabase* db);
 
+  std::map<WebDataServiceBase::Handle, base::OnceClosure>
+      clearing_instruments_requests_;
+
   DISALLOW_COPY_AND_ASSIGN(PaymentManifestWebDataService);
 };
 
diff --git a/components/policy/core/common/cloud/cloud_policy_client.cc b/components/policy/core/common/cloud/cloud_policy_client.cc
index 33629a8c3..191677f 100644
--- a/components/policy/core/common/cloud/cloud_policy_client.cc
+++ b/components/policy/core/common/cloud/cloud_policy_client.cc
@@ -157,7 +157,6 @@
     const std::string& ethernet_mac_address,
     const std::string& dock_mac_address,
     const std::string& manufacture_date,
-    SigningService* signing_service,
     DeviceManagementService* service,
     scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory,
     DeviceDMTokenCallback device_dm_token_callback)
@@ -168,7 +167,6 @@
       ethernet_mac_address_(ethernet_mac_address),
       dock_mac_address_(dock_mac_address),
       manufacture_date_(manufacture_date),
-      signing_service_(signing_service),
       service_(service),  // Can be null for unit tests.
       device_dm_token_callback_(device_dm_token_callback),
       url_loader_factory_(url_loader_factory) {}
@@ -248,9 +246,10 @@
     const std::string& client_id,
     DMAuth auth,
     const std::string& pem_certificate_chain,
-    const std::string& sub_organization) {
+    const std::string& sub_organization,
+    SigningService* signing_service) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  DCHECK(signing_service_);
+  DCHECK(signing_service);
   DCHECK(service_);
   DCHECK(!is_registered());
 
@@ -269,7 +268,7 @@
     configuration->set_device_owner(sub_organization);
   }
 
-  signing_service_->SignData(
+  signing_service->SignData(
       data.SerializeAsString(),
       base::BindOnce(&CloudPolicyClient::OnRegisterWithCertificateRequestSigned,
                      weak_ptr_factory_.GetWeakPtr(), std::move(auth)));
diff --git a/components/policy/core/common/cloud/cloud_policy_client.h b/components/policy/core/common/cloud/cloud_policy_client.h
index 3e8ed78..e66464e 100644
--- a/components/policy/core/common/cloud/cloud_policy_client.h
+++ b/components/policy/core/common/cloud/cloud_policy_client.h
@@ -178,10 +178,9 @@
   // |attested_device_id|, |ethernet_mac_address|, |dock_mac_address| and
   // |manufacture_date| are passed to the server verbatim. As these reveal
   // machine identity, they must only be used where this is appropriate (i.e.
-  // device policy, but not user policy). |service| and |signing_service| are
-  // weak pointers and it's the caller's responsibility to keep them valid for
-  // the lifetime of CloudPolicyClient. The |signing_service| is used to sign
-  // sensitive requests. |device_dm_token_callback| is used to retrieve device
+  // device policy, but not user policy). |service| is weak pointer and it's
+  // the caller's responsibility to keep it valid for the lifetime of
+  // CloudPolicyClient. |device_dm_token_callback| is used to retrieve device
   // DMToken for affiliated users. Could be null if it's not possible to use
   // device DMToken for user policy fetches.
   CloudPolicyClient(
@@ -192,12 +191,11 @@
       const std::string& ethernet_mac_address,
       const std::string& dock_mac_address,
       const std::string& manufacture_date,
-      SigningService* signing_service,
       DeviceManagementService* service,
       scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory,
       DeviceDMTokenCallback device_dm_token_callback);
   // A simpler constructor for those that do not need any of the identification
-  // strings of the full constructor or the signing service.
+  // strings of the full constructor.
   CloudPolicyClient(
       DeviceManagementService* service,
       scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory,
@@ -224,12 +222,17 @@
 
   // Attempts to register with the device management service using a
   // registration certificate. Results in a registration change or
-  // error notification.
+  // error notification. The |signing_service| is used to sign the request and
+  // is expected to be available until caller receives
+  // |OnRegistrationStateChanged| or |OnClientError|.
+  // TODO(crbug.com/1236148): Remove SigningService from CloudPolicyClient and
+  // make callees sign their data themselves.
   virtual void RegisterWithCertificate(const RegistrationParameters& parameters,
                                        const std::string& client_id,
                                        DMAuth auth,
                                        const std::string& pem_certificate_chain,
-                                       const std::string& sub_organization);
+                                       const std::string& sub_organization,
+                                       SigningService* signing_service);
 
   // Attempts to enroll with the device management service using an enrollment
   // token. Results in a registration change or error notification.
@@ -785,9 +788,6 @@
   // The invalidation version used for the most recent fetch operation.
   int64_t fetched_invalidation_version_ = 0;
 
-  // Used for signing requests.
-  SigningService* signing_service_ = nullptr;
-
   // Used for issuing requests to the cloud.
   DeviceManagementService* service_ = nullptr;
 
diff --git a/components/policy/core/common/cloud/cloud_policy_client_unittest.cc b/components/policy/core/common/cloud/cloud_policy_client_unittest.cc
index 88522c5..53a7934 100644
--- a/components/policy/core/common/cloud/cloud_policy_client_unittest.cc
+++ b/components/policy/core/common/cloud/cloud_policy_client_unittest.cc
@@ -482,8 +482,8 @@
             &url_loader_factory_);
     client_ = std::make_unique<CloudPolicyClient>(
         kMachineID, kMachineModel, kBrandCode, kAttestedDeviceId,
-        kEthernetMacAddress, kDockMacAddress, kManufactureDate,
-        &fake_signing_service_, &service_, shared_url_loader_factory_,
+        kEthernetMacAddress, kDockMacAddress, kManufactureDate, &service_,
+        shared_url_loader_factory_,
         base::BindRepeating(
             &MockDeviceDMTokenCallbackObserver::OnDeviceDMTokenRequested,
             base::Unretained(&device_dmtoken_callback_observer_)));
@@ -777,7 +777,8 @@
       em::DeviceRegisterRequest::FLAVOR_ENROLLMENT_ATTESTATION);
   client_->RegisterWithCertificate(
       device_attestation, std::string() /* client_id */, DMAuth::NoAuth(),
-      kEnrollmentCertificate, std::string() /* sub_organization */);
+      kEnrollmentCertificate, std::string() /* sub_organization */,
+      &fake_signing_service_);
   base::RunLoop().RunUntilIdle();
   EXPECT_EQ(
       DeviceManagementService::JobConfiguration::TYPE_CERT_BASED_REGISTRATION,
@@ -813,7 +814,8 @@
       em::DeviceRegisterRequest::FLAVOR_ENROLLMENT_ATTESTATION);
   client_->RegisterWithCertificate(
       device_attestation, std::string() /* client_id */, DMAuth::NoAuth(),
-      kEnrollmentCertificate, std::string() /* sub_organization */);
+      kEnrollmentCertificate, std::string() /* sub_organization */,
+      &fake_signing_service_);
   EXPECT_FALSE(client_->is_registered());
   EXPECT_EQ(DM_STATUS_CANNOT_SIGN_REQUEST, client_->status());
 }
@@ -1682,7 +1684,8 @@
   device_attestation.SetPsmExecutionResult(psm_execution_result);
   client_->RegisterWithCertificate(
       device_attestation, std::string() /* client_id */, DMAuth::NoAuth(),
-      kEnrollmentCertificate, std::string() /* sub_organization */);
+      kEnrollmentCertificate, std::string() /* sub_organization */,
+      &fake_signing_service_);
   base::RunLoop().RunUntilIdle();
   EXPECT_EQ(
       DeviceManagementService::JobConfiguration::TYPE_CERT_BASED_REGISTRATION,
diff --git a/components/signin/public/android/java/src/org/chromium/components/signin/identitymanager/AccountInfoServiceProvider.java b/components/signin/public/android/java/src/org/chromium/components/signin/identitymanager/AccountInfoServiceProvider.java
index e2541e0..4f90f8c 100644
--- a/components/signin/public/android/java/src/org/chromium/components/signin/identitymanager/AccountInfoServiceProvider.java
+++ b/components/signin/public/android/java/src/org/chromium/components/signin/identitymanager/AccountInfoServiceProvider.java
@@ -11,14 +11,11 @@
 import org.chromium.base.Promise;
 import org.chromium.base.ThreadUtils;
 
-import java.util.concurrent.atomic.AtomicReference;
-
 /**
  * This class groups all the {@link AccountInfoService} instance manipulation
  * methods in one place.
  */
 public final class AccountInfoServiceProvider {
-    private static final AtomicReference<AccountInfoService> sInstance = new AtomicReference<>();
     private static @Nullable Promise<AccountInfoService> sInstancePromise;
 
     /**
@@ -27,14 +24,15 @@
     @MainThread
     public static void init(
             IdentityManager identityManager, AccountTrackerService accountTrackerService) {
-        if (sInstance.get() != null) {
+        if (sInstancePromise != null && sInstancePromise.isFulfilled()) {
             return;
         }
-        sInstance.set(new AccountInfoServiceImpl(identityManager, accountTrackerService));
+        final AccountInfoService service =
+                new AccountInfoServiceImpl(identityManager, accountTrackerService);
         if (sInstancePromise == null) {
-            sInstancePromise = Promise.fulfilled(sInstance.get());
+            sInstancePromise = Promise.fulfilled(service);
         } else {
-            sInstancePromise.fulfill(sInstance.get());
+            sInstancePromise.fulfill(service);
         }
     }
 
@@ -43,11 +41,14 @@
      *
      * This method must be invoked after {@link AccountInfoService} is initialized.
      */
+    @MainThread
     public static AccountInfoService get() {
-        if (sInstance.get() == null) {
+        ThreadUtils.assertOnUiThread();
+        final Promise<AccountInfoService> promise = getPromise();
+        if (!promise.isFulfilled()) {
             throw new RuntimeException("The AccountInfoService is not yet initialized!");
         }
-        return sInstance.get();
+        return promise.getResult();
     }
 
     /**
@@ -68,13 +69,11 @@
     @VisibleForTesting
     public static void setInstanceForTests(AccountInfoService accountInfoService) {
         ThreadUtils.assertOnUiThread();
-        sInstance.set(accountInfoService);
         sInstancePromise = Promise.fulfilled(accountInfoService);
     }
 
     @VisibleForTesting
     public static void resetForTests() {
-        sInstance.set(null);
         sInstancePromise = null;
     }
 
diff --git a/components/signin/public/android/java/src/org/chromium/components/signin/identitymanager/ProfileOAuth2TokenServiceDelegateTest.java b/components/signin/public/android/java/src/org/chromium/components/signin/identitymanager/ProfileOAuth2TokenServiceDelegateTest.java
index 5e181697..7024b3f8 100644
--- a/components/signin/public/android/java/src/org/chromium/components/signin/identitymanager/ProfileOAuth2TokenServiceDelegateTest.java
+++ b/components/signin/public/android/java/src/org/chromium/components/signin/identitymanager/ProfileOAuth2TokenServiceDelegateTest.java
@@ -33,7 +33,6 @@
 import org.chromium.components.signin.AccessTokenData;
 import org.chromium.components.signin.AccountManagerFacadeProvider;
 import org.chromium.components.signin.AccountUtils;
-import org.chromium.components.signin.AuthException;
 import org.chromium.components.signin.test.util.FakeAccountManagerFacade;
 
 import java.util.List;
@@ -110,7 +109,7 @@
 
     @Test
     @SmallTest
-    public void testGetOAuth2AccessTokenOnSuccess() throws AuthException {
+    public void testGetOAuth2AccessTokenOnSuccess() {
         final String scope = "oauth2:http://example.com/scope";
         mAccountManagerFacade.addAccount(ACCOUNT);
         final AccessTokenData expectedToken = mAccountManagerFacade.getAccessToken(ACCOUNT, scope);
@@ -122,7 +121,7 @@
 
     @Test
     @SmallTest
-    public void testGetOAuth2AccessTokenOnFailure() throws AuthException {
+    public void testGetOAuth2AccessTokenOnFailure() {
         final String scope = "oauth2:http://example.com/scope";
         mAccountManagerFacade.addAccount(ACCOUNT);
         doReturn(null).when(mAccountManagerFacade).getAccessToken(any(Account.class), anyString());
diff --git a/components/signin/public/android/java/src/org/chromium/components/signin/test/util/FakeAccountManagerFacade.java b/components/signin/public/android/java/src/org/chromium/components/signin/test/util/FakeAccountManagerFacade.java
index db8b5f3..dd67f4f 100644
--- a/components/signin/public/android/java/src/org/chromium/components/signin/test/util/FakeAccountManagerFacade.java
+++ b/components/signin/public/android/java/src/org/chromium/components/signin/test/util/FakeAccountManagerFacade.java
@@ -20,7 +20,6 @@
 import org.chromium.components.signin.AccessTokenData;
 import org.chromium.components.signin.AccountManagerFacade;
 import org.chromium.components.signin.AccountsChangeObserver;
-import org.chromium.components.signin.AuthException;
 
 import java.util.ArrayList;
 import java.util.LinkedHashSet;
@@ -75,7 +74,7 @@
     }
 
     @Override
-    public AccessTokenData getAccessToken(Account account, String scope) throws AuthException {
+    public AccessTokenData getAccessToken(Account account, String scope) {
         synchronized (mLock) {
             AccountHolder accountHolder = getAccountHolder(account);
             if (accountHolder.getAuthToken(scope) == null) {
@@ -151,19 +150,13 @@
     }
 
     @GuardedBy("mLock")
-    private AccountHolder getAccountHolder(Account account) throws AuthException {
+    private AccountHolder getAccountHolder(Account account) {
         for (AccountHolder accountHolder : mAccountHolders) {
             if (accountHolder.getAccount().equals(account)) {
                 return accountHolder;
             }
         }
-        // Since token requests are asynchronous, sometimes they arrive after the account has been
-        // removed. Thus, throwing an unchecked exception here would cause test failures (see
-        // https://crbug.com/1205346 for details). On the other hand, AuthException thrown here
-        // will be caught by ProfileOAuth2TokenServiceDelegate and reported as a token request
-        // failure (which matches the behavior of the production code in the situation when a token
-        // is requested for an account that doesn't exist or has been removed).
-        throw new AuthException(/* isTransientError = */ false, "Cannot find account:" + account);
+        throw new IllegalArgumentException("Cannot find account:" + account);
     }
 
     @MainThread
diff --git a/components/sync/driver/data_type_controller.h b/components/sync/driver/data_type_controller.h
index 2e86d16..cc70404 100644
--- a/components/sync/driver/data_type_controller.h
+++ b/components/sync/driver/data_type_controller.h
@@ -21,19 +21,21 @@
 namespace syncer {
 
 struct ConfigureContext;
+struct DataTypeActivationResponse;
 struct TypeEntitiesCount;
-class ModelTypeConfigurer;
 class SyncError;
 
 // DataTypeControllers are responsible for managing the state of a single data
 // type. They are not thread safe and should only be used on the UI thread.
 class DataTypeController : public base::SupportsWeakPtr<DataTypeController> {
  public:
+  // TODO(crbug.com/967677): Should MODEL_LOADED be renamed to
+  // MODEL_READY_TO_CONNECT?
   enum State {
     NOT_RUNNING,     // The controller has never been started or has previously
                      // been stopped.  Must be in this state to start.
     MODEL_STARTING,  // The model is loading.
-    MODEL_LOADED,    // The model has finished loading and can start running.
+    MODEL_LOADED,    // The model has finished loading and is ready to connect.
     RUNNING,         // The controller is running and the data type is
                      // in sync with the cloud.
     STOPPING,        // The controller is in the process of stopping
@@ -41,15 +43,6 @@
     FAILED           // The controller was started but encountered an error.
   };
 
-  // Returned from Connect.
-  enum ConnectResult {
-    // Indicates that the initial download for this type is already complete, or
-    // wasn't needed in the first place (e.g. for proxy types).
-    TYPE_ALREADY_DOWNLOADED,
-    // Indicates that the initial download for this type still needs to be done.
-    TYPE_NOT_YET_DOWNLOADED,
-  };
-
   // Note: This seems like it should be a OnceCallback, but it can actually be
   // called multiple times in the case of errors.
   using ModelLoadCallback =
@@ -76,14 +69,11 @@
   virtual void LoadModels(const ConfigureContext& configure_context,
                           const ModelLoadCallback& model_load_callback) = 0;
 
-  // Called by DataTypeManager once the local model has loaded, but before
-  // downloading initial data (if necessary). Returns whether the initial
-  // download for this type is already complete.
-  virtual ConnectResult Connect(ModelTypeConfigurer* configurer) = 0;
-
-  // Called by DataTypeManager to disconnect the controlled data type.
-  // See comments for ModelAssociationManager::OnSingleDataTypeWillStop.
-  virtual void Disconnect(ModelTypeConfigurer* configurer) = 0;
+  // Called by DataTypeManager once the local model has loaded (MODEL_LOADED),
+  // in order to enable the sync engine's propagation of sync changes between
+  // the server and the local processor. Upon return, the controller assumes
+  // that the caller will take care of actually instrumenting the sync engine.
+  virtual std::unique_ptr<DataTypeActivationResponse> Connect() = 0;
 
   // Stops the data type. If LoadModels() has not completed it will enter
   // STOPPING state first and eventually STOPPED. Once stopped, |callback| will
diff --git a/components/sync/driver/data_type_manager_impl.cc b/components/sync/driver/data_type_manager_impl.cc
index 2208c138..5968462 100644
--- a/components/sync/driver/data_type_manager_impl.cc
+++ b/components/sync/driver/data_type_manager_impl.cc
@@ -4,6 +4,7 @@
 
 #include "components/sync/driver/data_type_manager_impl.h"
 
+#include <memory>
 #include <string>
 #include <utility>
 #include <vector>
@@ -19,6 +20,7 @@
 #include "components/sync/driver/data_type_encryption_handler.h"
 #include "components/sync/driver/data_type_manager_observer.h"
 #include "components/sync/driver/data_type_status_table.h"
+#include "components/sync/engine/data_type_activation_response.h"
 #include "components/sync/engine/data_type_debug_info_listener.h"
 
 namespace syncer {
@@ -191,29 +193,33 @@
 void DataTypeManagerImpl::ConnectDataTypes() {
   for (ModelType type : last_enabled_types_) {
     const auto& dtc_iter = controllers_->find(type);
-    if (dtc_iter == controllers_->end())
+    if (dtc_iter == controllers_->end()) {
       continue;
-    DataTypeController* dtc = dtc_iter->second.get();
-    if (dtc->state() == DataTypeController::MODEL_LOADED) {
-      // Only call Connect() for types that completed LoadModels()
-      // successfully. Such types shouldn't be in an error state at the same
-      // time.
-      DCHECK(!data_type_status_table_.GetFailedTypes().Has(dtc->type()));
-      switch (dtc->Connect(configurer_)) {
-        case DataTypeController::TYPE_ALREADY_DOWNLOADED:
-          // Proxy types (as opposed to protocol types) don't actually have any
-          // data, so keep proxy types out of |downloaded_types_|.
-          if (!IsProxyType(type))
-            downloaded_types_.Put(type);
-          break;
-        case DataTypeController::TYPE_NOT_YET_DOWNLOADED:
-          downloaded_types_.Remove(type);
-          break;
-      }
-      if (force_redownload_types_.Has(type)) {
-        downloaded_types_.Remove(type);
-      }
     }
+    DataTypeController* dtc = dtc_iter->second.get();
+    if (dtc->state() != DataTypeController::MODEL_LOADED) {
+      continue;
+    }
+    // Only call Connect() for types that completed LoadModels()
+    // successfully. Such types shouldn't be in an error state at the same
+    // time.
+    DCHECK(!data_type_status_table_.GetFailedTypes().Has(dtc->type()));
+
+    std::unique_ptr<DataTypeActivationResponse> activation_response =
+        dtc->Connect();
+    DCHECK(activation_response);
+    DCHECK_EQ(dtc->state(), DataTypeController::RUNNING);
+
+    if (activation_response->model_type_state.initial_sync_done()) {
+      downloaded_types_.Put(type);
+    } else {
+      downloaded_types_.Remove(type);
+    }
+    if (force_redownload_types_.Has(type)) {
+      downloaded_types_.Remove(type);
+    }
+
+    configurer_->ConnectDataType(type, std::move(activation_response));
   }
 }
 
@@ -339,6 +345,14 @@
   // could have failed loading and should be excluded from configuration. I need
   // to adjust |configuration_types_queue_| for such types.
   ConnectDataTypes();
+
+  // Propagate the state of PROXY_TABS to the sync engine.
+  const auto& dtc_iter = controllers_->find(PROXY_TABS);
+  if (dtc_iter != controllers_->end()) {
+    configurer_->SetProxyTabsDatatypeEnabled(dtc_iter->second->state() ==
+                                             DataTypeController::RUNNING);
+  }
+
   StartNextConfiguration(/*higher_priority_types_before=*/ModelTypeSet());
 }
 
@@ -618,10 +632,8 @@
 
 void DataTypeManagerImpl::OnSingleDataTypeWillStop(ModelType type,
                                                    const SyncError& error) {
-  auto c_it = controllers_->find(type);
-  DCHECK(c_it != controllers_->end());
-  // Delegate deactivation to the controller.
-  c_it->second->Disconnect(configurer_);
+  // No-op if the type is not connected.
+  configurer_->DisconnectDataType(type);
 
   if (error.IsSet()) {
     data_type_status_table_.UpdateFailedDataType(type, error);
diff --git a/components/sync/driver/fake_data_type_controller.cc b/components/sync/driver/fake_data_type_controller.cc
index 51df1d4..85c287f 100644
--- a/components/sync/driver/fake_data_type_controller.cc
+++ b/components/sync/driver/fake_data_type_controller.cc
@@ -6,6 +6,8 @@
 
 #include <memory>
 
+#include "components/sync/engine/data_type_activation_response.h"
+
 namespace syncer {
 
 FakeDataTypeController::FakeDataTypeController(ModelType type)
@@ -39,10 +41,9 @@
   return precondition_state_;
 }
 
-DataTypeController::ConnectResult FakeDataTypeController::Connect(
-    ModelTypeConfigurer* configurer) {
+std::unique_ptr<DataTypeActivationResponse> FakeDataTypeController::Connect() {
   ++activate_call_count_;
-  return ModelTypeController::Connect(configurer);
+  return ModelTypeController::Connect();
 }
 
 }  // namespace syncer
diff --git a/components/sync/driver/fake_data_type_controller.h b/components/sync/driver/fake_data_type_controller.h
index 206a6b80..54cbed7e 100644
--- a/components/sync/driver/fake_data_type_controller.h
+++ b/components/sync/driver/fake_data_type_controller.h
@@ -5,6 +5,8 @@
 #ifndef COMPONENTS_SYNC_DRIVER_FAKE_DATA_TYPE_CONTROLLER_H__
 #define COMPONENTS_SYNC_DRIVER_FAKE_DATA_TYPE_CONTROLLER_H__
 
+#include <memory>
+
 #include "components/sync/base/sync_mode.h"
 #include "components/sync/driver/model_type_controller.h"
 #include "components/sync/test/model/fake_model_type_controller_delegate.h"
@@ -29,7 +31,7 @@
 
   // ModelTypeController overrides.
   PreconditionState GetPreconditionState() const override;
-  ConnectResult Connect(ModelTypeConfigurer* configurer) override;
+  std::unique_ptr<DataTypeActivationResponse> Connect() override;
 
  private:
   PreconditionState precondition_state_ = PreconditionState::kPreconditionsMet;
diff --git a/components/sync/driver/glue/sync_engine_backend.cc b/components/sync/driver/glue/sync_engine_backend.cc
index 6ae99db..caac5a5 100644
--- a/components/sync/driver/glue/sync_engine_backend.cc
+++ b/components/sync/driver/glue/sync_engine_backend.cc
@@ -519,7 +519,7 @@
   DCHECK_EQ(nigori_controller_->state(), DataTypeController::MODEL_LOADED);
   // TODO(crbug.com/922900): Do we need to call RegisterDataType() for Nigori?
   sync_manager_->GetModelTypeConnector()->ConnectDataType(
-      NIGORI, nigori_controller_->ActivateManuallyForNigori());
+      NIGORI, nigori_controller_->Connect());
 }
 
 }  // namespace syncer
diff --git a/components/sync/driver/glue/sync_engine_impl.cc b/components/sync/driver/glue/sync_engine_impl.cc
index 48448e7..89256e6f 100644
--- a/components/sync/driver/glue/sync_engine_impl.cc
+++ b/components/sync/driver/glue/sync_engine_impl.cc
@@ -352,7 +352,6 @@
 }
 
 void SyncEngineImpl::DisconnectDataType(ModelType type) {
-  DCHECK(!IsProxyType(type));
   model_type_connector_->DisconnectDataType(type);
 }
 
diff --git a/components/sync/driver/model_type_controller.cc b/components/sync/driver/model_type_controller.cc
index e50545d..e03c0246 100644
--- a/components/sync/driver/model_type_controller.cc
+++ b/components/sync/driver/model_type_controller.cc
@@ -14,7 +14,6 @@
 #include "components/sync/base/data_type_histogram.h"
 #include "components/sync/driver/configure_context.h"
 #include "components/sync/engine/data_type_activation_response.h"
-#include "components/sync/engine/model_type_configurer.h"
 #include "components/sync/model/data_type_activation_request.h"
 #include "components/sync/model/data_type_error_handler_impl.h"
 #include "components/sync/model/type_entities_count.h"
@@ -77,16 +76,6 @@
   }
 }
 
-std::unique_ptr<DataTypeActivationResponse>
-ModelTypeController::ActivateManuallyForNigori() {
-  // To avoid abuse of this temporary API, we restrict it to NIGORI.
-  DCHECK_EQ(NIGORI, type());
-  DCHECK_EQ(MODEL_LOADED, state_);
-  DCHECK(activation_response_);
-  state_ = RUNNING;
-  return std::move(activation_response_);
-}
-
 void ModelTypeController::LoadModels(
     const ConfigureContext& configure_context,
     const ModelLoadCallback& model_load_callback) {
@@ -122,32 +111,15 @@
                               base::AsWeakPtr(this)));
 }
 
-DataTypeController::ConnectResult ModelTypeController::Connect(
-    ModelTypeConfigurer* configurer) {
+std::unique_ptr<DataTypeActivationResponse> ModelTypeController::Connect() {
   DCHECK(CalledOnValidThread());
-  DCHECK(configurer);
   DCHECK(activation_response_);
   DCHECK_EQ(MODEL_LOADED, state_);
 
-  bool initial_sync_done =
-      activation_response_->model_type_state.initial_sync_done();
-  // Pass activation context to ModelTypeRegistry, where ModelTypeWorker gets
-  // created and connected with the delegate (processor).
-  configurer->ConnectDataType(type(), std::move(activation_response_));
-
   state_ = RUNNING;
   DVLOG(1) << "Sync running for " << ModelTypeToString(type());
 
-  return initial_sync_done ? TYPE_ALREADY_DOWNLOADED : TYPE_NOT_YET_DOWNLOADED;
-}
-
-void ModelTypeController::Disconnect(ModelTypeConfigurer* configurer) {
-  DCHECK(CalledOnValidThread());
-  DCHECK(configurer);
-  if (state_ == RUNNING) {
-    configurer->DisconnectDataType(type());
-    state_ = MODEL_LOADED;
-  }
+  return std::move(activation_response_);
 }
 
 void ModelTypeController::Stop(ShutdownReason reason, StopCallback callback) {
diff --git a/components/sync/driver/model_type_controller.h b/components/sync/driver/model_type_controller.h
index f5c8a6ed6..4738652 100644
--- a/components/sync/driver/model_type_controller.h
+++ b/components/sync/driver/model_type_controller.h
@@ -38,17 +38,10 @@
       std::unique_ptr<ModelTypeControllerDelegate> delegate_for_transport_mode);
   ~ModelTypeController() override;
 
-  // Steals the activation response, only used for Nigori.
-  // TODO(crbug.com/967677): Once all datatypes are in USS, we should redesign
-  // or remove Connect, and expose the activation response via
-  // LoadModels(), which is more natural in USS.
-  std::unique_ptr<DataTypeActivationResponse> ActivateManuallyForNigori();
-
   // DataTypeController implementation.
   void LoadModels(const ConfigureContext& configure_context,
                   const ModelLoadCallback& model_load_callback) override;
-  ConnectResult Connect(ModelTypeConfigurer* configurer) override;
-  void Disconnect(ModelTypeConfigurer* configurer) override;
+  std::unique_ptr<DataTypeActivationResponse> Connect() override;
   void Stop(ShutdownReason reason, StopCallback callback) override;
   State state() const override;
   bool ShouldRunInTransportOnlyMode() const override;
diff --git a/components/sync/driver/model_type_controller_unittest.cc b/components/sync/driver/model_type_controller_unittest.cc
index 745da74..7cb9a251 100644
--- a/components/sync/driver/model_type_controller_unittest.cc
+++ b/components/sync/driver/model_type_controller_unittest.cc
@@ -19,8 +19,6 @@
 #include "components/sync/driver/configure_context.h"
 #include "components/sync/engine/commit_queue.h"
 #include "components/sync/engine/data_type_activation_response.h"
-#include "components/sync/engine/model_type_configurer.h"
-#include "components/sync/engine/model_type_processor_proxy.h"
 #include "components/sync/model/data_type_activation_request.h"
 #include "components/sync/model/forwarding_model_type_controller_delegate.h"
 #include "components/sync/model/type_entities_count.h"
@@ -32,8 +30,9 @@
 
 namespace {
 
-using testing::NiceMock;
 using testing::_;
+using testing::NiceMock;
+using testing::NotNull;
 
 const ModelType kTestModelType = AUTOFILL;
 const char kCacheGuid[] = "SomeCacheGuid";
@@ -68,60 +67,6 @@
   MOCK_METHOD(void, RecordMemoryUsageAndCountsHistograms, (), (override));
 };
 
-// A simple processor that trackes connected state.
-class TestModelTypeProcessor
-    : public FakeModelTypeProcessor,
-      public base::SupportsWeakPtr<TestModelTypeProcessor> {
- public:
-  TestModelTypeProcessor() {}
-
-  bool is_connected() const { return is_connected_; }
-
-  // ModelTypeProcessor implementation.
-  void ConnectSync(std::unique_ptr<CommitQueue> commit_queue) override {
-    is_connected_ = true;
-  }
-
-  void DisconnectSync() override { is_connected_ = false; }
-
- private:
-  bool is_connected_ = false;
-
-  DISALLOW_COPY_AND_ASSIGN(TestModelTypeProcessor);
-};
-
-// A ModelTypeConfigurer that just connects USS types.
-class TestModelTypeConfigurer : public ModelTypeConfigurer {
- public:
-  TestModelTypeConfigurer() {}
-  ~TestModelTypeConfigurer() override {}
-
-  void ConfigureDataTypes(ConfigureParams params) override {
-    NOTREACHED() << "Not implemented.";
-  }
-
-  void ConnectDataType(ModelType type,
-                       std::unique_ptr<DataTypeActivationResponse>
-                           activation_response) override {
-    DCHECK_EQ(kTestModelType, type);
-    DCHECK(!processor_);
-    processor_ = std::move(activation_response->type_processor);
-    processor_->ConnectSync(nullptr);
-  }
-
-  void DisconnectDataType(ModelType type) override {
-    DCHECK_EQ(kTestModelType, type);
-    DCHECK(processor_);
-    processor_->DisconnectSync();
-    processor_.reset();
-  }
-
-  void SetProxyTabsDatatypeEnabled(bool enabled) override { NOTREACHED(); }
-
- private:
-  std::unique_ptr<ModelTypeProcessor> processor_;
-};
-
 // Class used to expose ReportModelError() publicly.
 class TestModelTypeController : public ModelTypeController {
  public:
@@ -149,12 +94,7 @@
       : controller_(std::make_unique<ForwardingModelTypeControllerDelegate>(
             &mock_delegate_)) {}
 
-  ~ModelTypeControllerTest() {
-    // Since we use ModelTypeProcessorProxy, which posts tasks, make sure we
-    // don't have anything pending on teardown that would make a test fail or
-    // crash.
-    base::RunLoop().RunUntilIdle();
-  }
+  ~ModelTypeControllerTest() {}
 
   bool LoadModels(bool initial_sync_done = false) {
     base::MockCallback<DataTypeController::ModelLoadCallback> load_models_done;
@@ -176,9 +116,7 @@
     activation_response->model_type_state.set_initial_sync_done(
         initial_sync_done);
     activation_response->type_processor =
-        std::make_unique<ModelTypeProcessorProxy>(
-            base::AsWeakPtr(&processor_),
-            base::SequencedTaskRunnerHandle::Get());
+        std::make_unique<FakeModelTypeProcessor>();
 
     // Mimic completion for OnSyncStarting().
     EXPECT_CALL(load_models_done, Run);
@@ -186,37 +124,13 @@
     return true;
   }
 
-  void Connect(bool expect_downloaded) {
-    auto result = expect_downloaded
-                      ? DataTypeController::TYPE_ALREADY_DOWNLOADED
-                      : DataTypeController::TYPE_NOT_YET_DOWNLOADED;
-    EXPECT_EQ(result, controller_.Connect(&configurer_));
-    // ModelTypeProcessorProxy does posting of tasks.
-    base::RunLoop().RunUntilIdle();
-  }
-
-  void StopAndWait(ShutdownReason shutdown_reason) {
-    // ModelTypeProcessorProxy does posting of tasks, so we need a runloop. This
-    // also verifies that the completion callback is run.
-    base::RunLoop loop;
-    controller_.Stop(shutdown_reason, loop.QuitClosure());
-    loop.Run();
-  }
-
-  void DisconnectAndStop(ShutdownReason shutdown_reason) {
-    controller_.Disconnect(&configurer_);
-    StopAndWait(shutdown_reason);
-  }
-
   MockDelegate* delegate() { return &mock_delegate_; }
-  TestModelTypeProcessor* processor() { return &processor_; }
   TestModelTypeController* controller() { return &controller_; }
 
  private:
   base::test::SingleThreadTaskEnvironment task_environment_;
   NiceMock<MockDelegate> mock_delegate_;
-  TestModelTypeConfigurer configurer_;
-  TestModelTypeProcessor processor_;
+  FakeModelTypeProcessor processor_;
   TestModelTypeController controller_;
 };
 
@@ -245,26 +159,39 @@
   EXPECT_EQ(DataTypeController::MODEL_LOADED, controller()->state());
 }
 
-TEST_F(ModelTypeControllerTest, Activate) {
+TEST_F(ModelTypeControllerTest, Connect) {
   base::HistogramTester histogram_tester;
-  ASSERT_TRUE(LoadModels());
+  ASSERT_TRUE(LoadModels(/*initial_sync_done=*/false));
   EXPECT_EQ(DataTypeController::MODEL_LOADED, controller()->state());
-  Connect(/*expect_downloaded=*/false);
-  EXPECT_TRUE(processor()->is_connected());
+
+  std::unique_ptr<DataTypeActivationResponse> activation_response =
+      controller()->Connect();
   EXPECT_EQ(DataTypeController::RUNNING, controller()->state());
+
+  ASSERT_THAT(activation_response, NotNull());
+  EXPECT_THAT(activation_response->type_processor, NotNull());
+  EXPECT_FALSE(activation_response->model_type_state.initial_sync_done());
+
   histogram_tester.ExpectTotalCount(kStartFailuresHistogram, 0);
 }
 
-TEST_F(ModelTypeControllerTest, ActivateWithInitialSyncDone) {
+TEST_F(ModelTypeControllerTest, ConnectWithInitialSyncDone) {
   base::HistogramTester histogram_tester;
   ASSERT_TRUE(LoadModels(/*initial_sync_done=*/true));
   EXPECT_EQ(DataTypeController::MODEL_LOADED, controller()->state());
-  Connect(/*expect_downloaded=*/true);
-  EXPECT_TRUE(processor()->is_connected());
+
+  std::unique_ptr<DataTypeActivationResponse> activation_response =
+      controller()->Connect();
+  EXPECT_EQ(DataTypeController::RUNNING, controller()->state());
+
+  ASSERT_THAT(activation_response, NotNull());
+  EXPECT_THAT(activation_response->type_processor, NotNull());
+  EXPECT_TRUE(activation_response->model_type_state.initial_sync_done());
+
   histogram_tester.ExpectTotalCount(kStartFailuresHistogram, 0);
 }
 
-TEST_F(ModelTypeControllerTest, ActivateWithError) {
+TEST_F(ModelTypeControllerTest, ConnectWithError) {
   ModelErrorHandler error_handler;
   EXPECT_CALL(*delegate(), OnSyncStarting)
       .WillOnce([&](const DataTypeActivationRequest& request,
@@ -293,9 +220,13 @@
 
 TEST_F(ModelTypeControllerTest, Stop) {
   ASSERT_TRUE(LoadModels());
-  Connect(/*expect_downloaded=*/false);
-  EXPECT_TRUE(processor()->is_connected());
-  DisconnectAndStop(ShutdownReason::STOP_SYNC_AND_KEEP_DATA);
+  controller()->Connect();
+  ASSERT_EQ(DataTypeController::RUNNING, controller()->state());
+
+  base::MockCallback<base::OnceClosure> stop_completion;
+  EXPECT_CALL(stop_completion, Run());
+  controller()->Stop(ShutdownReason::STOP_SYNC_AND_KEEP_DATA,
+                     stop_completion.Get());
   EXPECT_EQ(DataTypeController::NOT_RUNNING, controller()->state());
 }
 
@@ -305,9 +236,12 @@
 
   // Ensures that metadata was not cleared.
   EXPECT_CALL(*delegate(), OnSyncStopping(KEEP_METADATA));
-  DisconnectAndStop(ShutdownReason::STOP_SYNC_AND_KEEP_DATA);
+
+  base::MockCallback<base::OnceClosure> stop_completion;
+  EXPECT_CALL(stop_completion, Run());
+  controller()->Stop(ShutdownReason::STOP_SYNC_AND_KEEP_DATA,
+                     stop_completion.Get());
   EXPECT_EQ(DataTypeController::NOT_RUNNING, controller()->state());
-  EXPECT_FALSE(processor()->is_connected());
 }
 
 // Test emulates scenario when user disables datatype. Metadata should be
@@ -315,10 +249,14 @@
 TEST_F(ModelTypeControllerTest, StopWhenDatatypeDisabled) {
   ASSERT_TRUE(LoadModels());
 
+  // Ensures that metadata was cleared.
   EXPECT_CALL(*delegate(), OnSyncStopping(CLEAR_METADATA));
-  DisconnectAndStop(ShutdownReason::DISABLE_SYNC_AND_CLEAR_DATA);
+
+  base::MockCallback<base::OnceClosure> stop_completion;
+  EXPECT_CALL(stop_completion, Run());
+  controller()->Stop(ShutdownReason::DISABLE_SYNC_AND_CLEAR_DATA,
+                     stop_completion.Get());
   EXPECT_EQ(DataTypeController::NOT_RUNNING, controller()->state());
-  EXPECT_FALSE(processor()->is_connected());
 }
 
 // Test emulates disabling sync when datatype is not loaded yet. Metadata should
@@ -328,7 +266,10 @@
 
   ASSERT_EQ(DataTypeController::NOT_RUNNING, controller()->state());
 
-  StopAndWait(ShutdownReason::DISABLE_SYNC_AND_CLEAR_DATA);
+  base::MockCallback<base::OnceClosure> stop_completion;
+  EXPECT_CALL(stop_completion, Run());
+  controller()->Stop(ShutdownReason::DISABLE_SYNC_AND_CLEAR_DATA,
+                     stop_completion.Get());
 
   EXPECT_EQ(DataTypeController::NOT_RUNNING, controller()->state());
 }
@@ -356,7 +297,10 @@
 
   ASSERT_EQ(DataTypeController::FAILED, controller()->state());
 
-  StopAndWait(ShutdownReason::DISABLE_SYNC_AND_CLEAR_DATA);
+  base::MockCallback<base::OnceClosure> stop_completion;
+  EXPECT_CALL(stop_completion, Run());
+  controller()->Stop(ShutdownReason::DISABLE_SYNC_AND_CLEAR_DATA,
+                     stop_completion.Get());
 
   EXPECT_EQ(DataTypeController::FAILED, controller()->state());
 }
@@ -458,7 +402,10 @@
   // At this point, the UI stops the datatype, but it's possible that the
   // backend has already posted a task to the UI thread, which we'll process
   // later below.
-  StopAndWait(ShutdownReason::DISABLE_SYNC_AND_CLEAR_DATA);
+  base::MockCallback<base::OnceClosure> stop_completion;
+  EXPECT_CALL(stop_completion, Run());
+  controller()->Stop(ShutdownReason::DISABLE_SYNC_AND_CLEAR_DATA,
+                     stop_completion.Get());
   ASSERT_EQ(DataTypeController::NOT_RUNNING, controller()->state());
 
   base::HistogramTester histogram_tester;
@@ -661,13 +608,13 @@
   // registering with the backend.
   auto activation_response = std::make_unique<DataTypeActivationResponse>();
   activation_response->type_processor =
-      std::make_unique<TestModelTypeProcessor>();
+      std::make_unique<FakeModelTypeProcessor>();
 
   // Mimic completion for OnSyncStarting().
   std::move(start_callback).Run(std::move(activation_response));
   ASSERT_EQ(DataTypeController::MODEL_LOADED, controller()->state());
 
-  Connect(/*expect_downloaded=*/false);
+  controller()->Connect();
   ASSERT_EQ(DataTypeController::RUNNING, controller()->state());
 
   // Now trigger the run-time error.
diff --git a/components/sync/driver/sync_api_component_factory.h b/components/sync/driver/sync_api_component_factory.h
index ae716d9..374400c 100644
--- a/components/sync/driver/sync_api_component_factory.h
+++ b/components/sync/driver/sync_api_component_factory.h
@@ -22,6 +22,7 @@
 class DataTypeEncryptionHandler;
 class DataTypeManager;
 class DataTypeManagerObserver;
+class ModelTypeConfigurer;
 class SyncEngine;
 class SyncInvalidationsService;
 
diff --git a/components/sync/engine/model_type_configurer.h b/components/sync/engine/model_type_configurer.h
index 25f9e43..cba291c 100644
--- a/components/sync/engine/model_type_configurer.h
+++ b/components/sync/engine/model_type_configurer.h
@@ -56,7 +56,8 @@
       std::unique_ptr<DataTypeActivationResponse> activation_response) = 0;
 
   // Opposite of the above: stops treating |type| as a datatype that is
-  // propagating changes between the server and the processor.
+  // propagating changes between the server and the processor. No-op if the
+  // type is not connected.
   virtual void DisconnectDataType(ModelType type) = 0;
 
   // Propagates whether PROXY_TABS is enabled, which influences a bit exposed to
diff --git a/components/sync/engine/model_type_connector.h b/components/sync/engine/model_type_connector.h
index 6eac9f5..507887f 100644
--- a/components/sync/engine/model_type_connector.h
+++ b/components/sync/engine/model_type_connector.h
@@ -37,6 +37,8 @@
   // This is the sync thread's chance to clear state associated with the type.
   // It also causes the syncer to stop requesting updates for this type, and to
   // abort any in-progress commit requests.
+  //
+  // No-op if the type is not connected.
   virtual void DisconnectDataType(ModelType type) = 0;
 
   // Propagates whether PROXY_TABS is enabled, which influences a bit exposed to
diff --git a/components/sync/engine/model_type_registry.cc b/components/sync/engine/model_type_registry.cc
index 04f87d4c..7e735d6 100644
--- a/components/sync/engine/model_type_registry.cc
+++ b/components/sync/engine/model_type_registry.cc
@@ -59,6 +59,11 @@
 }
 
 void ModelTypeRegistry::DisconnectDataType(ModelType type) {
+  if (update_handler_map_.count(type) == 0) {
+    // Type not connected. Simply ignore.
+    return;
+  }
+
   DVLOG(1) << "Disabling an off-thread sync type: " << ModelTypeToString(type);
 
   DCHECK(!IsProxyType(type));
diff --git a/components/sync_sessions/proxy_tabs_data_type_controller.cc b/components/sync_sessions/proxy_tabs_data_type_controller.cc
index 2a8a8a25..6a0a5c7 100644
--- a/components/sync_sessions/proxy_tabs_data_type_controller.cc
+++ b/components/sync_sessions/proxy_tabs_data_type_controller.cc
@@ -9,6 +9,7 @@
 
 #include "base/values.h"
 #include "components/sync/driver/configure_context.h"
+#include "components/sync/engine/data_type_activation_response.h"
 #include "components/sync/engine/model_type_configurer.h"
 #include "components/sync/model/type_entities_count.h"
 
@@ -27,27 +28,18 @@
     const ModelLoadCallback& model_load_callback) {
   DCHECK(CalledOnValidThread());
   DCHECK_EQ(configure_context.sync_mode, syncer::SyncMode::kFull);
-  state_ = MODEL_LOADED;
+  // Bypass connection to the sync engine by reporting that it's already
+  // running.
+  state_ = RUNNING;
   state_changed_cb_.Run(state_);
   model_load_callback.Run(type(), syncer::SyncError());
 }
 
-syncer::DataTypeController::ConnectResult ProxyTabsDataTypeController::Connect(
-    syncer::ModelTypeConfigurer* configurer) {
-  DCHECK(configurer);
-  DCHECK_EQ(MODEL_LOADED, state_);
-
-  // Proxy type doesn't need to be registered with ModelTypeRegistry as it
-  // doesn't need update handler, client doesn't expect updates of this type
-  // from the server. We still need to inform the engine such that the protocol
-  // bit |tabs_datatype_enabled_| gets set.
-  configurer->SetProxyTabsDatatypeEnabled(true);
-
-  state_ = RUNNING;
-  state_changed_cb_.Run(state_);
-
-  // Proxy types don't have any data to download.
-  return TYPE_ALREADY_DOWNLOADED;
+std::unique_ptr<syncer::DataTypeActivationResponse>
+ProxyTabsDataTypeController::Connect() {
+  // This controller never enters the MODEL_LOADED state.
+  NOTREACHED();
+  return nullptr;
 }
 
 void ProxyTabsDataTypeController::Stop(syncer::ShutdownReason shutdown_reason,
@@ -65,14 +57,6 @@
   return false;
 }
 
-void ProxyTabsDataTypeController::Disconnect(
-    syncer::ModelTypeConfigurer* configurer) {
-  if (state_ == RUNNING) {
-    configurer->SetProxyTabsDatatypeEnabled(false);
-    state_ = MODEL_LOADED;
-  }
-}
-
 void ProxyTabsDataTypeController::GetAllNodes(AllNodesCallback callback) {
   std::move(callback).Run(type(), std::make_unique<base::ListValue>());
 }
diff --git a/components/sync_sessions/proxy_tabs_data_type_controller.h b/components/sync_sessions/proxy_tabs_data_type_controller.h
index 1f89115d2..ffa39c6 100644
--- a/components/sync_sessions/proxy_tabs_data_type_controller.h
+++ b/components/sync_sessions/proxy_tabs_data_type_controller.h
@@ -5,6 +5,8 @@
 #ifndef COMPONENTS_SYNC_SESSIONS_PROXY_TABS_DATA_TYPE_CONTROLLER_H_
 #define COMPONENTS_SYNC_SESSIONS_PROXY_TABS_DATA_TYPE_CONTROLLER_H_
 
+#include <memory>
+
 #include "base/callback_forward.h"
 #include "base/macros.h"
 #include "components/sync/driver/data_type_controller.h"
@@ -23,12 +25,11 @@
   // DataTypeController interface.
   void LoadModels(const syncer::ConfigureContext& configure_context,
                   const ModelLoadCallback& model_load_callback) override;
-  ConnectResult Connect(syncer::ModelTypeConfigurer* configurer) override;
+  std::unique_ptr<syncer::DataTypeActivationResponse> Connect() override;
   void Stop(syncer::ShutdownReason shutdown_reason,
             StopCallback callback) override;
   State state() const override;
   bool ShouldRunInTransportOnlyMode() const override;
-  void Disconnect(syncer::ModelTypeConfigurer* configurer) override;
   void GetAllNodes(AllNodesCallback callback) override;
   void GetTypeEntitiesCount(
       base::OnceCallback<void(const syncer::TypeEntitiesCount&)> callback)
diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn
index 414bf51..7c5fe6d 100644
--- a/content/browser/BUILD.gn
+++ b/content/browser/BUILD.gn
@@ -2250,7 +2250,7 @@
   if (is_chromeos_ash) {
     deps += [
       "//ui/base/ime/chromeos:chromeos",
-      "//ui/chromeos/colors:cros_colors_views",
+      "//ui/chromeos/styles:cros_styles_views",
     ]
   }
 
diff --git a/content/browser/back_forward_cache_browsertest.cc b/content/browser/back_forward_cache_browsertest.cc
index 0f35b7e..d0c38a2 100644
--- a/content/browser/back_forward_cache_browsertest.cc
+++ b/content/browser/back_forward_cache_browsertest.cc
@@ -9038,6 +9038,63 @@
   presentation_service.OnDelegateDestroyed();
 }
 
+namespace {
+
+// Subclass of DocumentServiceBase for test.
+class EchoImpl final : public DocumentServiceBase<mojom::Echo> {
+ public:
+  EchoImpl(RenderFrameHost* render_frame_host,
+           mojo::PendingReceiver<mojom::Echo> receiver,
+           bool* deleted)
+      : DocumentServiceBase(render_frame_host, std::move(receiver)),
+        deleted_(deleted) {}
+  ~EchoImpl() final { *deleted_ = true; }
+
+  // mojom::Echo implementation
+  void EchoString(const std::string& input, EchoStringCallback callback) final {
+    std::move(callback).Run(input);
+  }
+
+ private:
+  bool* deleted_;
+};
+
+}  // namespace
+
+IN_PROC_BROWSER_TEST_F(BackForwardCacheBrowserTest, DocumentServiceBase) {
+  ASSERT_TRUE(embedded_test_server()->Start());
+  GURL url_a(embedded_test_server()->GetURL("a.com", "/title1.html"));
+  GURL url_b(embedded_test_server()->GetURL("b.com", "/title1.html"));
+
+  // 1) Navigate to A.
+  ASSERT_TRUE(NavigateToURL(shell(), url_a));
+  RenderFrameHostImpl* rfh_a = current_frame_host();
+  RenderFrameDeletedObserver delete_observer_rfh_a(rfh_a);
+
+  mojo::Remote<mojom::Echo> echo_remote;
+  bool echo_deleted = false;
+  new EchoImpl(rfh_a, echo_remote.BindNewPipeAndPassReceiver(), &echo_deleted);
+
+  // 2) Navigate to B.
+  ASSERT_TRUE(NavigateToURL(shell(), url_b));
+
+  // - Page A should be in the cache.
+  ASSERT_FALSE(delete_observer_rfh_a.deleted());
+  EXPECT_TRUE(rfh_a->IsInBackForwardCache());
+  EXPECT_FALSE(echo_deleted);
+
+  // 3) Go back.
+  web_contents()->GetController().GoBack();
+  EXPECT_TRUE(WaitForLoadStop(shell()->web_contents()));
+  EXPECT_FALSE(echo_deleted);
+
+  // 4) Prevent caching and navigate to B.
+  DisableBFCacheForRFHForTesting(rfh_a);
+  ASSERT_TRUE(NavigateToURL(shell(), url_b));
+  delete_observer_rfh_a.WaitUntilDeleted();
+  EXPECT_TRUE(echo_deleted);
+}
+
 IN_PROC_BROWSER_TEST_F(BackForwardCacheBrowserTest, OutstandingFetchNotCached) {
   net::test_server::ControllableHttpResponse response(embedded_test_server(),
                                                       "/fetch");
diff --git a/content/browser/browsing_data/storage_partition_code_cache_data_remover.cc b/content/browser/browsing_data/storage_partition_code_cache_data_remover.cc
index bf255f4..67581b3 100644
--- a/content/browser/browsing_data/storage_partition_code_cache_data_remover.cc
+++ b/content/browser/browsing_data/storage_partition_code_cache_data_remover.cc
@@ -124,13 +124,30 @@
   if (generated_code_cache_context_ &&
       generated_code_cache_context_->generated_wasm_code_cache()) {
     net::CompletionOnceCallback callback = base::BindOnce(
-        &StoragePartitionCodeCacheDataRemover::DoneClearCodeCache,
+        &StoragePartitionCodeCacheDataRemover::ClearWebUIJSCodeCache,
         base::Unretained(this));
     generated_code_cache_context_->generated_wasm_code_cache()->GetBackend(
         base::BindOnce(&StoragePartitionCodeCacheDataRemover::ClearCache,
                        base::Unretained(this), std::move(callback)));
   } else {
-    // There is no Wasm cache, done with clearing caches.
+    // There is no Wasm cache, so move on to the next step.
+    ClearWebUIJSCodeCache(net::ERR_FAILED);
+  }
+}
+
+// |rv| is the returned when clearing the code cache. We don't handle
+// any errors here, so the result value is ignored.
+void StoragePartitionCodeCacheDataRemover::ClearWebUIJSCodeCache(int rv) {
+  if (generated_code_cache_context_ &&
+      generated_code_cache_context_->generated_webui_js_code_cache()) {
+    net::CompletionOnceCallback callback = base::BindOnce(
+        &StoragePartitionCodeCacheDataRemover::DoneClearCodeCache,
+        base::Unretained(this));
+    generated_code_cache_context_->generated_webui_js_code_cache()->GetBackend(
+        base::BindOnce(&StoragePartitionCodeCacheDataRemover::ClearCache,
+                       base::Unretained(this), std::move(callback)));
+  } else {
+    // There is no WebUI JS cache, done with clearing caches.
     DoneClearCodeCache(net::ERR_FAILED);
   }
 }
diff --git a/content/browser/browsing_data/storage_partition_code_cache_data_remover.h b/content/browser/browsing_data/storage_partition_code_cache_data_remover.h
index 07cfce5..d0800add 100644
--- a/content/browser/browsing_data/storage_partition_code_cache_data_remover.h
+++ b/content/browser/browsing_data/storage_partition_code_cache_data_remover.h
@@ -64,6 +64,7 @@
   // Executed on code cache thread.
   void ClearJSCodeCache();
   void ClearWASMCodeCache(int rv);
+  void ClearWebUIJSCodeCache(int rv);
   void ClearCache(net::CompletionOnceCallback callback,
                   disk_cache::Backend* backend);
   void DoneClearCodeCache(int rv);
diff --git a/content/browser/code_cache/generated_code_cache.cc b/content/browser/code_cache/generated_code_cache.cc
index 14e84d9..3a489b8 100644
--- a/content/browser/code_cache/generated_code_cache.cc
+++ b/content/browser/code_cache/generated_code_cache.cc
@@ -32,17 +32,35 @@
 // This function doesn't enforce anything in the production code. It is here
 // to make the assumptions explicit and to catch any errors when DCHECKs are
 // enabled.
-void CheckValidKeys(const GURL& resource_url, const GURL& origin_lock) {
+void CheckValidKeys(const GURL& resource_url,
+                    const GURL& origin_lock,
+                    GeneratedCodeCache::CodeCacheType cache_type) {
   // If the resource url is invalid don't cache the code.
-  DCHECK(resource_url.is_valid() && resource_url.SchemeIsHTTPOrHTTPS());
+  DCHECK(resource_url.is_valid());
+  bool resource_url_is_chrome_or_chrome_untrusted =
+      resource_url.SchemeIs(content::kChromeUIScheme) ||
+      resource_url.SchemeIs(content::kChromeUIUntrustedScheme);
+  DCHECK(resource_url.SchemeIsHTTPOrHTTPS() ||
+         resource_url_is_chrome_or_chrome_untrusted);
 
-  // |origin_lock| should be either empty or should have Http/Https/chrome
-  // schemes and it should not be a URL with opaque origin. Empty origin_locks
-  // are allowed when the renderer is not locked to an origin.
+  // |origin_lock| should be either empty or should have
+  // Http/Https/chrome/chrome-untrusted schemes and it should not be a URL with
+  // opaque origin. Empty origin_locks are allowed when the renderer is not
+  // locked to an origin.
+  bool origin_lock_is_chrome_or_chrome_untrusted =
+      origin_lock.SchemeIs(content::kChromeUIScheme) ||
+      origin_lock.SchemeIs(content::kChromeUIUntrustedScheme);
   DCHECK(origin_lock.is_empty() ||
          ((origin_lock.SchemeIsHTTPOrHTTPS() ||
-           origin_lock.SchemeIs(content::kChromeUIScheme)) &&
+           origin_lock_is_chrome_or_chrome_untrusted) &&
           !url::Origin::Create(origin_lock).opaque()));
+
+  // The chrome and chrome-untrusted schemes are only used with the WebUI
+  // code cache type.
+  DCHECK_EQ(origin_lock_is_chrome_or_chrome_untrusted,
+            cache_type == GeneratedCodeCache::kWebUIJavaScript);
+  DCHECK_EQ(resource_url_is_chrome_or_chrome_untrusted,
+            cache_type == GeneratedCodeCache::kWebUIJavaScript);
 }
 
 // Generates the cache key for the given |resource_url|, |origin_lock| and
@@ -64,8 +82,9 @@
 // to something not based on URLs.
 std::string GetCacheKey(const GURL& resource_url,
                         const GURL& origin_lock,
-                        const net::NetworkIsolationKey& nik) {
-  CheckValidKeys(resource_url, origin_lock);
+                        const net::NetworkIsolationKey& nik,
+                        GeneratedCodeCache::CodeCacheType cache_type) {
+  CheckValidKeys(resource_url, origin_lock, cache_type);
 
   // Add a prefix _ so it can't be parsed as a valid URL.
   std::string key(kPrefix);
@@ -102,7 +121,7 @@
 // time stamps with no data, or timestamps with just a tag, and we observe many
 // 8 and 16 byte reads and writes. Make the threshold larger to speed up small
 // code entries too.
-constexpr size_t kSmallDataLimit = 4096;
+constexpr size_t kInlineDataLimit = 4096;
 // This is the maximum size for code that will be stored under the key generated
 // by |GetCacheKey|. Each origin will get its own copy of the generated code for
 // a given resource. Code that is larger than this limit will be stored under a
@@ -110,24 +129,7 @@
 // gets its own small entry under the key generated by |GetCacheKey| that holds
 // the hash, enabling a two stage lookup. This limit was determined empirically
 // by a Finch experiment.
-constexpr size_t kLargeDataLimit = 16384;
-
-// Checks that the header data in the small buffer is valid. We may read cache
-// entries that were written by a previous version of Chrome which use obsolete
-// formats. These reads should fail and be doomed as soon as possible.
-bool IsValidHeader(scoped_refptr<net::IOBufferWithSize> small_buffer) {
-  size_t buffer_size = small_buffer->size();
-  if (buffer_size < kHeaderSizeInBytes)
-    return false;
-  uint32_t data_size;
-  memcpy(&data_size, small_buffer->data() + kResponseTimeSizeInBytes,
-         kDataSizeInBytes);
-  if (data_size <= kSmallDataLimit)
-    return buffer_size == kHeaderSizeInBytes + data_size;
-  if (data_size <= kLargeDataLimit)
-    return buffer_size == kHeaderSizeInBytes;
-  return buffer_size == kHeaderSizeInBytes + kSHAKeySizeInBytes;
-}
+constexpr size_t kDedicatedDataLimit = 16384;
 
 void WriteCommonDataHeader(scoped_refptr<net::IOBufferWithSize> buffer,
                            const base::Time& response_time,
@@ -187,8 +189,36 @@
   DISALLOW_COPY_AND_ASSIGN(BigIOBuffer);
 };
 
+net::CacheType CodeCacheTypeToNetCacheType(
+    GeneratedCodeCache::CodeCacheType type) {
+  switch (type) {
+    case GeneratedCodeCache::CodeCacheType::kJavaScript:
+      return net::GENERATED_BYTE_CODE_CACHE;
+    case GeneratedCodeCache::CodeCacheType::kWebAssembly:
+      return net::GENERATED_NATIVE_CODE_CACHE;
+    case GeneratedCodeCache::CodeCacheType::kWebUIJavaScript:
+      return net::GENERATED_WEBUI_BYTE_CODE_CACHE;
+  }
+  NOTREACHED();
+}
+
 }  // namespace
 
+bool GeneratedCodeCache::IsValidHeader(
+    scoped_refptr<net::IOBufferWithSize> small_buffer) const {
+  size_t buffer_size = small_buffer->size();
+  if (buffer_size < kHeaderSizeInBytes)
+    return false;
+  uint32_t data_size;
+  memcpy(&data_size, small_buffer->data() + kResponseTimeSizeInBytes,
+         kDataSizeInBytes);
+  if (data_size <= kInlineDataLimit)
+    return buffer_size == kHeaderSizeInBytes + data_size;
+  if (!ShouldDeduplicateEntry(data_size))
+    return buffer_size == kHeaderSizeInBytes;
+  return buffer_size == kHeaderSizeInBytes + kSHAKeySizeInBytes;
+}
+
 std::string GeneratedCodeCache::GetResourceURLFromKey(const std::string& key) {
   constexpr size_t kPrefixStringLen = base::size(kPrefix) - 1;
   // |key| may not have a prefix and separator (e.g. for deduplicated entries).
@@ -207,6 +237,7 @@
     GeneratedCodeCache::CacheEntryStatus status) {
   switch (cache_type_) {
     case GeneratedCodeCache::CodeCacheType::kJavaScript:
+    case GeneratedCodeCache::CodeCacheType::kWebUIJavaScript:
       UMA_HISTOGRAM_ENUMERATION("SiteIsolatedCodeCache.JS.Behaviour", status);
       break;
     case GeneratedCodeCache::CodeCacheType::kWebAssembly:
@@ -363,8 +394,8 @@
   scoped_refptr<BigIOBuffer> large_buffer;
   uint32_t data_size = static_cast<uint32_t>(data.size());
   // We have three different cache entry layouts, depending on data size.
-  if (data_size <= kSmallDataLimit) {
-    // 1. Small
+  if (data_size <= kInlineDataLimit) {
+    // 1. Inline
     // [stream0] response time, size, data
     // [stream1] <empty>
     small_buffer = base::MakeRefCounted<net::IOBufferWithSize>(
@@ -373,15 +404,15 @@
     memcpy(small_buffer->data() + kHeaderSizeInBytes, data.data(), data.size());
     // Write 0 bytes and truncate stream 1 to clear any stale data.
     large_buffer = base::MakeRefCounted<BigIOBuffer>(mojo_base::BigBuffer());
-  } else if (data_size <= kLargeDataLimit) {
-    // 2. Large
+  } else if (!ShouldDeduplicateEntry(data_size)) {
+    // 2. Dedicated
     // [stream0] response time, size
     // [stream1] data
     small_buffer =
         base::MakeRefCounted<net::IOBufferWithSize>(kHeaderSizeInBytes);
     large_buffer = base::MakeRefCounted<BigIOBuffer>(std::move(data));
   } else {
-    // 3. Very Large
+    // 3. Indirect
     // [stream0] response time, size, checksum
     // [stream1] <empty>
     // [stream0 (checksum key entry)] <empty>
@@ -421,7 +452,7 @@
   WriteCommonDataHeader(small_buffer, response_time, data_size);
 
   // Create the write operation.
-  std::string key = GetCacheKey(url, origin_lock, nik);
+  std::string key = GetCacheKey(url, origin_lock, nik, cache_type_);
   auto op = std::make_unique<PendingOperation>(Operation::kWrite, key,
                                                small_buffer, large_buffer);
   EnqueueOperation(std::move(op));
@@ -438,7 +469,7 @@
     return;
   }
 
-  std::string key = GetCacheKey(url, origin_lock, nik);
+  std::string key = GetCacheKey(url, origin_lock, nik, cache_type_);
   auto op = std::make_unique<PendingOperation>(Operation::kFetch, key,
                                                std::move(read_data_callback));
   EnqueueOperation(std::move(op));
@@ -453,7 +484,7 @@
     return;
   }
 
-  std::string key = GetCacheKey(url, origin_lock, nik);
+  std::string key = GetCacheKey(url, origin_lock, nik, cache_type_);
   auto op = std::make_unique<PendingOperation>(Operation::kDelete, key);
   EnqueueOperation(std::move(op));
 }
@@ -471,11 +502,8 @@
   // If the initialization of the existing cache fails, this call would delete
   // all the contents and recreates a new one.
   int rv = disk_cache::CreateCacheBackend(
-      cache_type_ == GeneratedCodeCache::CodeCacheType::kJavaScript
-          ? net::GENERATED_BYTE_CODE_CACHE
-          : net::GENERATED_NATIVE_CODE_CACHE,
-      net::CACHE_BACKEND_SIMPLE, path_, max_size_bytes_,
-      disk_cache::ResetHandling::kResetOnError, nullptr,
+      CodeCacheTypeToNetCacheType(cache_type_), net::CACHE_BACKEND_SIMPLE,
+      path_, max_size_bytes_, disk_cache::ResetHandling::kResetOnError, nullptr,
       &shared_backend_ptr->data, std::move(create_backend_complete));
   if (rv != net::ERR_IO_PENDING) {
     DidCreateBackend(shared_backend_ptr, rv);
@@ -762,15 +790,16 @@
       base::Time response_time;
       uint32_t data_size = 0;
       ReadCommonDataHeader(op->small_buffer(), &response_time, &data_size);
-      if (data_size <= kSmallDataLimit) {
+      if (data_size <= kInlineDataLimit) {
         // Small data. Copy the data from the small buffer.
         DCHECK_EQ(0, op->large_buffer()->size());
         mojo_base::BigBuffer data(data_size);
         memcpy(data.data(), op->small_buffer()->data() + kHeaderSizeInBytes,
                data_size);
         op->TakeReadCallback().Run(response_time, std::move(data));
-      } else if (data_size <= kLargeDataLimit) {
-        // Large data below the merging threshold. Return the large buffer.
+      } else if (!ShouldDeduplicateEntry(data_size)) {
+        // Large data below the merging threshold, or deduplication is disabled.
+        // Return the large buffer.
         op->TakeReadCallback().Run(response_time,
                                    op->large_buffer()->TakeBuffer());
       } else {
@@ -870,6 +899,17 @@
   }
 }
 
+bool GeneratedCodeCache::IsDeduplicationEnabled() const {
+  // Deduplication is disabled in the WebUI code cache, as an additional defense
+  // against privilege escalation in case there is a bug in the deduplication
+  // logic.
+  return cache_type_ != kWebUIJavaScript;
+}
+
+bool GeneratedCodeCache::ShouldDeduplicateEntry(uint32_t data_size) const {
+  return data_size > kDedicatedDataLimit && IsDeduplicationEnabled();
+}
+
 void GeneratedCodeCache::SetLastUsedTimeForTest(
     const GURL& resource_url,
     const GURL& origin_lock,
@@ -886,7 +926,7 @@
       &GeneratedCodeCache::OpenCompleteForSetLastUsedForTest,
       weak_ptr_factory_.GetWeakPtr(), time, std::move(split.first));
 
-  std::string key = GetCacheKey(resource_url, origin_lock, nik);
+  std::string key = GetCacheKey(resource_url, origin_lock, nik, cache_type_);
   disk_cache::EntryResult result =
       backend_->OpenEntry(key, net::LOWEST, std::move(callback));
   if (result.net_error() != net::ERR_IO_PENDING) {
diff --git a/content/browser/code_cache/generated_code_cache.h b/content/browser/code_cache/generated_code_cache.h
index de5c9ee8..1651255 100644
--- a/content/browser/code_cache/generated_code_cache.h
+++ b/content/browser/code_cache/generated_code_cache.h
@@ -50,7 +50,21 @@
 
   // Cache type. Used for collecting statistics for JS and Wasm in separate
   // buckets.
-  enum CodeCacheType { kJavaScript, kWebAssembly };
+  enum CodeCacheType {
+    // JavaScript from http(s) pages.
+    kJavaScript,
+
+    // WebAssembly from http(s) pages. This cache allows more total size and
+    // more size per item than the JavaScript cache, since some
+    // WebAssembly programs are very large.
+    kWebAssembly,
+
+    // JavaScript from chrome and chrome-untrusted pages. The resource URLs are
+    // limited to only those fetched via chrome and chrome-untrusted schemes.
+    // The cache size is limited to disk_cache::kMaxWebUICodeCacheSize.
+    // Deduplication of very large items is disabled in this cache.
+    kWebUIJavaScript,
+  };
 
   // Used for collecting statistics about cache behaviour.
   enum CacheEntryStatus {
@@ -189,6 +203,20 @@
 
   void CollectStatistics(GeneratedCodeCache::CacheEntryStatus status);
 
+  // Whether very large cache entries are deduplicated in this cache.
+  // Deduplication is disabled in the WebUI code cache, as an additional defense
+  // against privilege escalation in case there is a bug in the deduplication
+  // logic.
+  bool IsDeduplicationEnabled() const;
+
+  bool ShouldDeduplicateEntry(uint32_t data_size) const;
+
+  // Checks that the header data in the small buffer is valid. We may read cache
+  // entries that were written by a previous version of Chrome which uses
+  // obsolete formats. These reads should fail and be doomed as soon as
+  // possible.
+  bool IsValidHeader(scoped_refptr<net::IOBufferWithSize> small_buffer) const;
+
   std::unique_ptr<disk_cache::Backend> backend_;
   BackendState backend_state_;
 
diff --git a/content/browser/code_cache/generated_code_cache_context.cc b/content/browser/code_cache/generated_code_cache_context.cc
index 4be4f1b8..8e174d5 100644
--- a/content/browser/code_cache/generated_code_cache_context.cc
+++ b/content/browser/code_cache/generated_code_cache_context.cc
@@ -62,8 +62,41 @@
 void GeneratedCodeCacheContext::InitializeOnThread(const base::FilePath& path,
                                                    int max_bytes) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+
+  int max_bytes_js = max_bytes;
+
+  if (base::FeatureList::IsEnabled(features::kWebUICodeCache)) {
+    int max_bytes_webui_js = max_bytes;
+    if (max_bytes > 0) {
+      // If a maximum was specified, then we should limit the total JS bytecode,
+      // both from WebUI and from open web sites, to max_bytes. The larger
+      // portion by far should be reserved for open web sites.
+      const int kMaxWebUIPercent = 2;
+      max_bytes_webui_js = std::min(max_bytes * kMaxWebUIPercent / 100,
+                                    disk_cache::kMaxWebUICodeCacheSize);
+
+      // The rest is left over for open web JS.
+      max_bytes_js = max_bytes - max_bytes_webui_js;
+      DCHECK_GT(max_bytes_js, max_bytes_webui_js);
+
+      // Specifying a maximum size of zero means to use heuristics based on
+      // available disk size, which would be the opposite of our intent if the
+      // specified number was so small that the division above truncated to
+      // zero.
+      if (max_bytes_webui_js == 0) {
+        max_bytes_webui_js = 1;
+      }
+    }
+
+    generated_webui_js_code_cache_ = {
+        new GeneratedCodeCache(
+            path.AppendASCII("webui_js"), max_bytes_webui_js,
+            GeneratedCodeCache::CodeCacheType::kWebUIJavaScript),
+        base::OnTaskRunnerDeleter(task_runner_)};
+  }
+
   generated_js_code_cache_ = {
-      new GeneratedCodeCache(path.AppendASCII("js"), max_bytes,
+      new GeneratedCodeCache(path.AppendASCII("js"), max_bytes_js,
                              GeneratedCodeCache::CodeCacheType::kJavaScript),
       base::OnTaskRunnerDeleter(task_runner_)};
 
@@ -77,6 +110,7 @@
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   generated_js_code_cache_.reset();
   generated_wasm_code_cache_.reset();
+  generated_webui_js_code_cache_.reset();
 }
 
 GeneratedCodeCache* GeneratedCodeCacheContext::generated_js_code_cache() const {
@@ -90,6 +124,12 @@
   return generated_wasm_code_cache_.get();
 }
 
+GeneratedCodeCache* GeneratedCodeCacheContext::generated_webui_js_code_cache()
+    const {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  return generated_webui_js_code_cache_.get();
+}
+
 GeneratedCodeCacheContext::~GeneratedCodeCacheContext() = default;
 
 }  // namespace content
diff --git a/content/browser/code_cache/generated_code_cache_context.h b/content/browser/code_cache/generated_code_cache_context.h
index 2166ec0..77a5b70 100644
--- a/content/browser/code_cache/generated_code_cache_context.h
+++ b/content/browser/code_cache/generated_code_cache_context.h
@@ -45,6 +45,7 @@
   // Call on the code cache thread to get the code cache instances.
   GeneratedCodeCache* generated_js_code_cache() const;
   GeneratedCodeCache* generated_wasm_code_cache() const;
+  GeneratedCodeCache* generated_webui_js_code_cache() const;
 
  private:
   friend class base::RefCountedThreadSafe<GeneratedCodeCacheContext>;
@@ -57,6 +58,9 @@
       generated_js_code_cache_{nullptr, base::OnTaskRunnerDeleter(nullptr)};
   std::unique_ptr<GeneratedCodeCache, base::OnTaskRunnerDeleter>
       generated_wasm_code_cache_{nullptr, base::OnTaskRunnerDeleter(nullptr)};
+  std::unique_ptr<GeneratedCodeCache, base::OnTaskRunnerDeleter>
+      generated_webui_js_code_cache_{nullptr,
+                                     base::OnTaskRunnerDeleter(nullptr)};
   scoped_refptr<base::SequencedTaskRunner> task_runner_;
 
   SEQUENCE_CHECKER(sequence_checker_);
diff --git a/content/browser/prerender/prerender_browsertest.cc b/content/browser/prerender/prerender_browsertest.cc
index 4dfccdd8..d24a9f0 100644
--- a/content/browser/prerender/prerender_browsertest.cc
+++ b/content/browser/prerender/prerender_browsertest.cc
@@ -2905,7 +2905,7 @@
   // Navigate to an initial page.
   ASSERT_TRUE(NavigateToURL(shell(), kInitialUrl));
 
-  // Initialize a MockWebContentsObserver and ensure that DidFinishLoad is not
+  // Initialize a MockWebContentsObserver and ensure that DidFailLoad is not
   // invoked inside prerender frame tree.
   testing::NiceMock<MockWebContentsObserver> observer(shell()->web_contents());
   EXPECT_CALL(observer, DidFailLoad(testing::_, testing::_, testing::_))
@@ -3063,6 +3063,91 @@
   EXPECT_EQ(shell()->web_contents()->GetLastCommittedURL(), kPrerenderingUrl);
 }
 
+// Test that WebContentsObserver::DidFinishLoad is not invoked when the page
+// gets loaded while prerendering but it is deferred and invoked on prerender
+// activation.
+IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
+                       DidFinishLoadInvokedAfterActivation) {
+  const GURL kInitialUrl = GetUrl("/empty.html");
+  const GURL kPrerenderingUrl = GetUrl("/simple_page.html");
+
+  // Navigate to an initial page.
+  ASSERT_TRUE(NavigateToURL(shell(), kInitialUrl));
+
+  // Initialize a MockWebContentsObserver and ensure that DidFinishLoad is not
+  // invoked while prerendering.
+  testing::NiceMock<MockWebContentsObserver> observer(shell()->web_contents());
+  EXPECT_CALL(observer, DidFinishLoad(testing::_, testing::_)).Times(0);
+
+  // Start a prerender.
+  int prerender_host_id = AddPrerender(kPrerenderingUrl);
+  RenderFrameHost* prerender_frame_host =
+      GetPrerenderedMainFrameHost(prerender_host_id);
+  EXPECT_EQ(prerender_frame_host->GetFramesInSubtree().size(), 1u);
+
+  // Verify and clear all expectations on the mock observer before setting new
+  // ones.
+  testing::Mock::VerifyAndClearExpectations(&observer);
+  testing::InSequence s;
+
+  // Activate the prerendered page. This should result in invoking DidFinishLoad
+  // once for root RenderFrameHost `prerender_frame_host`.
+  {
+    // Verify that DidFinishNavigation is invoked before DidFinishLoad on
+    // activation.
+    EXPECT_CALL(observer, DidFinishNavigation(testing::_));
+
+    EXPECT_CALL(observer,
+                DidFinishLoad(prerender_frame_host, kPrerenderingUrl));
+  }
+  NavigatePrimaryPage(kPrerenderingUrl);
+  EXPECT_EQ(web_contents()->GetURL(), kPrerenderingUrl);
+}
+
+// Test that WebContentsObserver::DidFinishLoad is not invoked when the page
+// gets loaded while prerendering but it is deferred and invoked on prerender
+// activation for both main and sub-frames.
+IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
+                       DidFinishLoadInvokedAfterActivationWithSubframes) {
+  const GURL kInitialUrl = GetUrl("/empty.html");
+  const GURL kPrerenderingUrl = GetUrl("/page_with_iframe.html");
+
+  // Navigate to an initial page.
+  ASSERT_TRUE(NavigateToURL(shell(), kInitialUrl));
+
+  // Initialize a MockWebContentsObserver and ensure that DidFinishLoad is not
+  // invoked while prerendering.
+  testing::NiceMock<MockWebContentsObserver> observer(shell()->web_contents());
+  testing::InSequence s;
+  EXPECT_CALL(observer, DidFinishLoad(testing::_, testing::_)).Times(0);
+
+  // Start a prerender.
+  int prerender_host_id = AddPrerender(kPrerenderingUrl);
+  RenderFrameHost* prerender_main_frame_host =
+      GetPrerenderedMainFrameHost(prerender_host_id);
+  RenderFrameHost* child_frame = ChildFrameAt(prerender_main_frame_host, 0);
+  EXPECT_EQ(prerender_main_frame_host->GetFramesInSubtree().size(), 2u);
+
+  // Verify and clear all expectations on the mock observer before setting new
+  // ones.
+  testing::Mock::VerifyAndClearExpectations(&observer);
+
+  // Activate the prerendered page. This should result in invoking DidFinishLoad
+  // twice once for root and once for child RenderFrameHosts.
+  {
+    // Verify that DidFinishNavigation is invoked before DidFinishLoad.
+    EXPECT_CALL(observer, DidFinishNavigation(testing::_));
+
+    EXPECT_CALL(observer,
+                DidFinishLoad(prerender_main_frame_host, kPrerenderingUrl));
+
+    EXPECT_CALL(observer,
+                DidFinishLoad(child_frame, child_frame->GetLastCommittedURL()));
+  }
+  NavigatePrimaryPage(kPrerenderingUrl);
+  EXPECT_EQ(web_contents()->GetURL(), kPrerenderingUrl);
+}
+
 // Tests that cross-origin subframe navigations in a prerendered page are
 // deferred even if they start after the a navigation starts that will
 // attempt to activate the prerendered page.
diff --git a/content/browser/renderer_host/code_cache_host_impl.cc b/content/browser/renderer_host/code_cache_host_impl.cc
index c4a0002..e75f1bbe 100644
--- a/content/browser/renderer_host/code_cache_host_impl.cc
+++ b/content/browser/renderer_host/code_cache_host_impl.cc
@@ -35,22 +35,82 @@
 
 namespace {
 
+enum class Operation {
+  kRead,
+  kWrite,
+};
+
+bool CheckSecurityForAccessingCodeCacheData(const GURL& resource_url,
+                                            int render_process_id,
+                                            Operation operation) {
+  ProcessLock process_lock =
+      ChildProcessSecurityPolicyImpl::GetInstance()->GetProcessLock(
+          render_process_id);
+
+  // Code caching is only allowed for http(s) and chrome/chrome-untrusted
+  // scripts. Furthermore, there is no way for http(s) pages to load chrome or
+  // chrome-untrusted scripts, so any http(s) page attempting to store data
+  // about a chrome or chrome-untrusted script would be an indication of
+  // suspicious activity.
+  if (resource_url.SchemeIs(content::kChromeUIScheme) ||
+      resource_url.SchemeIs(content::kChromeUIUntrustedScheme)) {
+    if (!process_lock.is_locked_to_site()) {
+      // We can't tell for certain whether this renderer is doing something
+      // malicious, but we don't trust it enough to store data.
+      return false;
+    }
+    if (!process_lock.matches_scheme(content::kChromeUIScheme) &&
+        !process_lock.matches_scheme(content::kChromeUIUntrustedScheme)) {
+      if (operation == Operation::kWrite) {
+        mojo::ReportBadMessage("Non-WebUI pages cannot cache WebUI code");
+      }
+      return false;
+    }
+    return true;
+  }
+  if (resource_url.SchemeIsHTTPOrHTTPS()) {
+    if (process_lock.matches_scheme(content::kChromeUIScheme) ||
+        process_lock.matches_scheme(content::kChromeUIUntrustedScheme)) {
+      // It is possible for WebUI pages to include open-web content, but such
+      // usage is rare and we've decided that reasoning about security is easier
+      // if the WebUI code cache includes only WebUI scripts.
+      return false;
+    }
+    return true;
+  }
+
+  if (operation == Operation::kWrite) {
+    mojo::ReportBadMessage("Invalid URL scheme for code cache.");
+  }
+  return false;
+}
+
 // Code caches use two keys: the URL of requested resource |resource_url|
 // as the primary key and the origin lock of the renderer that requested this
 // resource as secondary key. This function returns the origin lock of the
 // renderer that will be used as the secondary key for the code cache.
 // The secondary key is:
+// Case 0. absl::nullopt if the resource URL or origin lock have unsupported
+// schemes, or if they represent potentially dangerous combinations such as
+// WebUI code in an open-web page.
 // Case 1. an empty GURL if the render process is not locked to an origin. In
 // this case, code cache uses |resource_url| as the key.
 // Case 2. a absl::nullopt, if the origin lock is opaque (for ex: browser
 // initiated navigation to a data: URL). In these cases, the code should not be
 // cached since the serialized value of opaque origins should not be used as a
 // key.
-// Case 3: origin_lock if the scheme of origin_lock is Http/Https/chrome.
+// Case 3: origin_lock if the scheme of origin_lock is
+// Http/Https/chrome/chrome-untrusted.
 // Case 4. absl::nullopt otherwise.
 absl::optional<GURL> GetSecondaryKeyForCodeCache(const GURL& resource_url,
-                                                 int render_process_id) {
-  if (!resource_url.is_valid() || !resource_url.SchemeIsHTTPOrHTTPS())
+                                                 int render_process_id,
+                                                 Operation operation) {
+  // Case 0: check for invalid schemes.
+  if (!CheckSecurityForAccessingCodeCacheData(resource_url, render_process_id,
+                                              operation)) {
+    return absl::nullopt;
+  }
+  if (!resource_url.is_valid())
     return absl::nullopt;
 
   ProcessLock process_lock =
@@ -79,10 +139,11 @@
   // file:// URLs will have a "file:" process lock and would thus share a
   // cache across all file:// URLs. That would likely be ok for security, but
   // since this case is not performance sensitive we will keep things simple and
-  // limit the cache to http/https/chrome processes.
+  // limit the cache to http/https/chrome/chrome-untrusted processes.
   if (process_lock.matches_scheme(url::kHttpScheme) ||
       process_lock.matches_scheme(url::kHttpsScheme) ||
-      process_lock.matches_scheme(content::kChromeUIScheme)) {
+      process_lock.matches_scheme(content::kChromeUIScheme) ||
+      process_lock.matches_scheme(content::kChromeUIUntrustedScheme)) {
     return process_lock.lock_url();
   }
 
@@ -250,11 +311,6 @@
     const GURL& url,
     base::Time expected_response_time,
     mojo_base::BigBuffer data) {
-  if (!url.SchemeIsHTTPOrHTTPS()) {
-    mojo::ReportBadMessage("Invalid URL scheme for code cache.");
-    return;
-  }
-
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   GeneratedCodeCache* code_cache = GetCodeCache(cache_type);
@@ -262,7 +318,7 @@
     return;
 
   absl::optional<GURL> origin_lock =
-      GetSecondaryKeyForCodeCache(url, render_process_id_);
+      GetSecondaryKeyForCodeCache(url, render_process_id_, Operation::kWrite);
   if (!origin_lock)
     return;
 
@@ -281,7 +337,7 @@
   }
 
   absl::optional<GURL> origin_lock =
-      GetSecondaryKeyForCodeCache(url, render_process_id_);
+      GetSecondaryKeyForCodeCache(url, render_process_id_, Operation::kRead);
   if (!origin_lock) {
     std::move(callback).Run(base::Time(), std::vector<uint8_t>());
     return;
@@ -303,7 +359,7 @@
     return;
 
   absl::optional<GURL> origin_lock =
-      GetSecondaryKeyForCodeCache(url, render_process_id_);
+      GetSecondaryKeyForCodeCache(url, render_process_id_, Operation::kWrite);
   if (!origin_lock)
     return;
 
@@ -332,6 +388,23 @@
   if (!generated_code_cache_context_)
     return nullptr;
 
+  ProcessLock process_lock =
+      ChildProcessSecurityPolicyImpl::GetInstance()->GetProcessLock(
+          render_process_id_);
+
+  // To minimize the chance of any cache bug resulting in privilege escalation
+  // from an ordinary web page to trusted WebUI, we use a completely separate
+  // GeneratedCodeCache instance for WebUI pages.
+  if (process_lock.matches_scheme(content::kChromeUIScheme) ||
+      process_lock.matches_scheme(content::kChromeUIUntrustedScheme)) {
+    if (cache_type == blink::mojom::CodeCacheType::kJavascript) {
+      return generated_code_cache_context_->generated_webui_js_code_cache();
+    }
+
+    // WebAssembly in WebUI pages is not supported due to no current usage.
+    return nullptr;
+  }
+
   if (cache_type == blink::mojom::CodeCacheType::kJavascript)
     return generated_code_cache_context_->generated_js_code_cache();
 
diff --git a/content/browser/renderer_host/document_service_base_browsertest.cc b/content/browser/renderer_host/document_service_base_browsertest.cc
deleted file mode 100644
index e518e22..0000000
--- a/content/browser/renderer_host/document_service_base_browsertest.cc
+++ /dev/null
@@ -1,151 +0,0 @@
-// Copyright 2021 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "base/bind.h"
-#include "content/browser/renderer_host/document_service_base_echo_impl.h"
-#include "content/public/browser/document_service_base.h"
-#include "content/public/browser/render_frame_host.h"
-#include "content/public/browser/web_contents.h"
-#include "content/public/common/content_features.h"
-#include "content/public/test/browser_test.h"
-#include "content/public/test/content_browser_test.h"
-#include "content/public/test/content_browser_test_utils.h"
-#include "content/public/test/prerender_test_util.h"
-#include "content/public/test/test_utils.h"
-#include "content/shell/browser/shell.h"
-#include "content/test/content_browser_test_utils_internal.h"
-#include "content/test/echo.test-mojom.h"
-#include "mojo/public/cpp/bindings/remote.h"
-#include "net/dns/mock_host_resolver.h"
-#include "net/test/embedded_test_server/embedded_test_server.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "url/gurl.h"
-
-namespace content {
-
-class DocumentServiceBaseBrowserTest : public ContentBrowserTest {
- public:
-  DocumentServiceBaseBrowserTest() = default;
-  ~DocumentServiceBaseBrowserTest() override = default;
-
-  void SetUpOnMainThread() override {
-    host_resolver()->AddRule("*", "127.0.0.1");
-    ASSERT_TRUE(test_server_handle_ =
-                    embedded_test_server()->StartAndReturnHandle());
-  }
-
-  WebContents* web_contents() const { return shell()->web_contents(); }
-
- private:
-  net::test_server::EmbeddedTestServerHandle test_server_handle_;
-};
-
-class DocumentServiceBasePrerenderingBrowserTest
-    : public DocumentServiceBaseBrowserTest {
- public:
-  DocumentServiceBasePrerenderingBrowserTest()
-      : prerender_helper_(base::BindRepeating(
-            &DocumentServiceBasePrerenderingBrowserTest::web_contents,
-            base::Unretained(this))) {}
-  ~DocumentServiceBasePrerenderingBrowserTest() override = default;
-
-  void SetUpOnMainThread() override {
-    prerender_helper_.SetUpOnMainThread(embedded_test_server());
-    DocumentServiceBaseBrowserTest::SetUpOnMainThread();
-  }
-
-  test::PrerenderTestHelper* prerender_helper() { return &prerender_helper_; }
-
- private:
-  test::PrerenderTestHelper prerender_helper_;
-};
-
-// Tests that DocumentServiceBase is not destroyed on prerendering activation.
-IN_PROC_BROWSER_TEST_F(DocumentServiceBasePrerenderingBrowserTest,
-                       NotClosedInPrerenderingActivation) {
-  const GURL kInitialUrl = embedded_test_server()->GetURL("/empty.html");
-  const GURL kPrerenderingUrl = embedded_test_server()->GetURL("/title1.html");
-
-  // Navigate to an initial page.
-  ASSERT_TRUE(NavigateToURL(shell(), kInitialUrl));
-
-  int host_id = prerender_helper()->AddPrerender(kPrerenderingUrl);
-  RenderFrameHost* prerendered_frame_host =
-      prerender_helper()->GetPrerenderedMainFrameHost(host_id);
-  // We should disable proactive BrowsingInstance swap for the navigation below
-  // to ensure that the speculative RFH is going to use the same
-  // BrowsingInstance as the original RFH and it's not replaced on navigation.
-  DisableProactiveBrowsingInstanceSwapFor(prerendered_frame_host);
-
-  mojo::Remote<mojom::Echo> echo_remote;
-  bool echo_deleted = false;
-  new DocumentServiceBaseEchoImpl(
-      prerendered_frame_host, echo_remote.BindNewPipeAndPassReceiver(),
-      base::BindOnce([](bool* deleted) { *deleted = true; }, &echo_deleted));
-
-  // Activate the prerendered page.
-  prerender_helper()->NavigatePrimaryPage(kPrerenderingUrl);
-  // DocumentServiceBase should not be destroyed.
-  EXPECT_FALSE(echo_deleted);
-
-  ASSERT_TRUE(NavigateToURL(shell(), kInitialUrl));
-  // It should be destroyed on navigation.
-  EXPECT_TRUE(echo_deleted);
-}
-
-class DocumentServiceBaseBFCacheBrowserTest
-    : public DocumentServiceBaseBrowserTest {
- public:
-  DocumentServiceBaseBFCacheBrowserTest() {
-    feature_list_.InitWithFeaturesAndParameters(
-        {{features::kBackForwardCache,
-          {{"TimeToLiveInBackForwardCacheInSeconds", "3600"},
-           {"enable_same_site", "true"}}}},
-        {features::kBackForwardCacheMemoryControls});
-  }
-  ~DocumentServiceBaseBFCacheBrowserTest() override = default;
-
- private:
-  base::test::ScopedFeatureList feature_list_;
-};
-
-IN_PROC_BROWSER_TEST_F(DocumentServiceBaseBFCacheBrowserTest,
-                       DocumentServiceBase) {
-  GURL url_a(embedded_test_server()->GetURL("a.com", "/title1.html"));
-  GURL url_b(embedded_test_server()->GetURL("b.com", "/title1.html"));
-
-  // 1) Navigate to A.
-  ASSERT_TRUE(NavigateToURL(shell(), url_a));
-  RenderFrameHost* rfh_a =
-      web_contents()->GetMainFrame();  // current_frame_host();
-  RenderFrameDeletedObserver delete_observer_rfh_a(rfh_a);
-
-  mojo::Remote<mojom::Echo> echo_remote;
-  bool echo_deleted = false;
-  new DocumentServiceBaseEchoImpl(
-      rfh_a, echo_remote.BindNewPipeAndPassReceiver(),
-      base::BindOnce([](bool* deleted) { *deleted = true; }, &echo_deleted));
-
-  // 2) Navigate to B.
-  ASSERT_TRUE(NavigateToURL(shell(), url_b));
-
-  // - Page A should be in the cache.
-  ASSERT_FALSE(delete_observer_rfh_a.deleted());
-  EXPECT_EQ(rfh_a->GetLifecycleState(),
-            RenderFrameHost::LifecycleState::kInBackForwardCache);
-  EXPECT_FALSE(echo_deleted);
-
-  // 3) Go back.
-  web_contents()->GetController().GoBack();
-  EXPECT_TRUE(WaitForLoadStop(shell()->web_contents()));
-  EXPECT_FALSE(echo_deleted);
-
-  // 4) Prevent caching and navigate to B.
-  DisableBFCacheForRFHForTesting(rfh_a);
-  ASSERT_TRUE(NavigateToURL(shell(), url_b));
-  delete_observer_rfh_a.WaitUntilDeleted();
-  EXPECT_TRUE(echo_deleted);
-}
-
-}  // namespace content
diff --git a/content/browser/renderer_host/document_service_base_echo_impl.cc b/content/browser/renderer_host/document_service_base_echo_impl.cc
deleted file mode 100644
index cc3fcf1..0000000
--- a/content/browser/renderer_host/document_service_base_echo_impl.cc
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright 2021 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "content/browser/renderer_host/document_service_base_echo_impl.h"
-
-namespace content {
-
-DocumentServiceBaseEchoImpl::DocumentServiceBaseEchoImpl(
-    RenderFrameHost* render_frame_host,
-    mojo::PendingReceiver<mojom::Echo> receiver,
-    base::OnceClosure destruction_cb)
-    : DocumentServiceBase(render_frame_host, std::move(receiver)),
-      destruction_cb_(std::move(destruction_cb)) {}
-
-DocumentServiceBaseEchoImpl::~DocumentServiceBaseEchoImpl() {
-  std::move(destruction_cb_).Run();
-}
-
-void DocumentServiceBaseEchoImpl::EchoString(const std::string& input,
-                                             EchoStringCallback callback) {
-  std::move(callback).Run(input);
-}
-
-}  // namespace content
diff --git a/content/browser/renderer_host/document_service_base_echo_impl.h b/content/browser/renderer_host/document_service_base_echo_impl.h
deleted file mode 100644
index e469d79..0000000
--- a/content/browser/renderer_host/document_service_base_echo_impl.h
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2021 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.
-
-#ifndef CONTENT_BROWSER_RENDERER_HOST_DOCUMENT_SERVICE_BASE_ECHO_IMPL_H_
-#define CONTENT_BROWSER_RENDERER_HOST_DOCUMENT_SERVICE_BASE_ECHO_IMPL_H_
-
-#include "base/bind.h"
-#include "content/public/browser/document_service_base.h"
-#include "content/test/echo.test-mojom.h"
-#include "mojo/public/cpp/bindings/pending_receiver.h"
-
-namespace content {
-
-class RenderFrameHost;
-
-// Subclass of DocumentServiceBase for test.
-class DocumentServiceBaseEchoImpl final
-    : public DocumentServiceBase<mojom::Echo> {
- public:
-  DocumentServiceBaseEchoImpl(RenderFrameHost* render_frame_host,
-                              mojo::PendingReceiver<mojom::Echo> receiver,
-                              base::OnceClosure destruction_cb);
-  ~DocumentServiceBaseEchoImpl() final;
-
-  // mojom::Echo implementation
-  void EchoString(const std::string& input, EchoStringCallback callback) final;
-
- private:
-  base::OnceClosure destruction_cb_;
-};
-
-}  // namespace content
-
-#endif  // CONTENT_BROWSER_RENDERER_HOST_DOCUMENT_SERVICE_BASE_ECHO_IMPL_H_
diff --git a/content/browser/renderer_host/document_service_base_unittest.cc b/content/browser/renderer_host/document_service_base_unittest.cc
index db8755d4..5489a67 100644
--- a/content/browser/renderer_host/document_service_base_unittest.cc
+++ b/content/browser/renderer_host/document_service_base_unittest.cc
@@ -6,7 +6,6 @@
 
 #include "base/bind.h"
 #include "base/run_loop.h"
-#include "content/browser/renderer_host/document_service_base_echo_impl.h"
 #include "content/public/browser/back_forward_cache.h"
 #include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/web_contents.h"
@@ -14,6 +13,7 @@
 #include "content/public/test/test_renderer_host.h"
 #include "content/test/echo.test-mojom.h"
 #include "content/test/test_render_frame_host.h"
+#include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "url/gurl.h"
 
@@ -26,6 +26,25 @@
 const char kFooOrigin[] = "https://foo.com";
 const char kBarOrigin[] = "https://bar.com";
 
+// Subclass of DocumentServiceBase for test.
+class EchoImpl final : public DocumentServiceBase<mojom::Echo> {
+ public:
+  EchoImpl(RenderFrameHost* render_frame_host,
+           mojo::PendingReceiver<mojom::Echo> receiver,
+           base::OnceClosure destruction_cb)
+      : DocumentServiceBase(render_frame_host, std::move(receiver)),
+        destruction_cb_(std::move(destruction_cb)) {}
+  ~EchoImpl() final { std::move(destruction_cb_).Run(); }
+
+  // mojom::Echo implementation
+  void EchoString(const std::string& input, EchoStringCallback callback) final {
+    std::move(callback).Run(input);
+  }
+
+ private:
+  base::OnceClosure destruction_cb_;
+};
+
 // Help functions to manipulate RenderFrameHosts.
 
 // Simulates navigation and returns the final RenderFrameHost.
@@ -63,10 +82,9 @@
 
   void CreateEchoImpl(RenderFrameHost* rfh) {
     DCHECK(!is_echo_impl_alive_);
-    new DocumentServiceBaseEchoImpl(
-        rfh, echo_remote_.BindNewPipeAndPassReceiver(),
-        base::BindOnce(&DocumentServiceBaseTest::OnEchoImplDestructed,
-                       base::Unretained(this)));
+    new EchoImpl(rfh, echo_remote_.BindNewPipeAndPassReceiver(),
+                 base::BindOnce(&DocumentServiceBaseTest::OnEchoImplDestructed,
+                                base::Unretained(this)));
     is_echo_impl_alive_ = true;
   }
 
diff --git a/content/browser/renderer_host/navigation_request.h b/content/browser/renderer_host/navigation_request.h
index 762dd0d..97a112e9 100644
--- a/content/browser/renderer_host/navigation_request.h
+++ b/content/browser/renderer_host/navigation_request.h
@@ -872,7 +872,7 @@
 
   // Whether this navigation is activating an existing page (e.g. served from
   // the BackForwardCache or Prerender)
-  bool IsPageActivation() const override;
+  bool IsPageActivation() const;
 
   // See comments for |prerender_navigation_entry_|.
   void SetPrerenderNavigationEntry(
diff --git a/content/browser/renderer_host/render_frame_host_delegate.h b/content/browser/renderer_host/render_frame_host_delegate.h
index ffd71a5..ac89c93d 100644
--- a/content/browser/renderer_host/render_frame_host_delegate.h
+++ b/content/browser/renderer_host/render_frame_host_delegate.h
@@ -147,7 +147,7 @@
       const GURL& initiator_url,
       blink::mojom::NavigationBlockedReason reason) {}
 
-  // Notifies the browser that a frame finished loading.
+  // Called when blink.mojom.LocalFrameHost::DidFinishLoad() is invoked.
   virtual void OnDidFinishLoad(RenderFrameHostImpl* render_frame_host,
                                const GURL& url) {}
 
diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/browser/renderer_host/render_frame_host_impl.cc
index 847d9702..5ddab42 100644
--- a/content/browser/renderer_host/render_frame_host_impl.cc
+++ b/content/browser/renderer_host/render_frame_host_impl.cc
@@ -1447,6 +1447,9 @@
   GetSiteInstance()->IncrementActiveFrameCount();
 
   if (parent_) {
+    // All frames in a frame tree should use the same storage partition.
+    CHECK_EQ(parent_->GetStoragePartition(), GetStoragePartition());
+
     cross_origin_embedder_policy_ = parent_->cross_origin_embedder_policy();
 
     // New child frames should inherit the nav_entry_id of their parent.
@@ -3289,7 +3292,6 @@
 void RenderFrameHostImpl::OnAudibleStateChanged(bool is_audible) {
   DCHECK_NE(is_audible_, is_audible);
   if (is_audible) {
-    DCHECK_NE(lifecycle_state(), LifecycleStateImpl::kPrerendering);
     GetProcess()->OnMediaStreamAdded();
   } else {
     GetProcess()->OnMediaStreamRemoved();
@@ -3960,6 +3962,7 @@
     NavigationRequest* committing_navigation_request,
     mojom::DidCommitProvisionalLoadParamsPtr params) {
   DCHECK(committing_navigation_request->IsPageActivation());
+  DCHECK(is_main_frame());
 
   auto request = navigation_requests_.find(committing_navigation_request);
   CHECK(request != navigation_requests_.end());
@@ -3975,8 +3978,20 @@
   DidCommitNavigationInternal(std::move(owned_request), std::move(params),
                               /*same_document_params=*/nullptr);
 
-  // The page is already loaded since it came from the cache, so fire the stop
-  // loading event.
+  // If DidFinishLoad occurred pre-activation and was deferred to be dispatched
+  // after activation, dispatch it now.
+  if (is_prerender_page_activation) {
+    ForEachRenderFrameHost(base::BindRepeating([](RenderFrameHostImpl* rfh) {
+      rfh->MaybeDispatchDidFinishLoadOnPrerenderActivation();
+    }));
+  }
+
+  // Try to dispatch DidStopLoading event (note that
+  // RenderFrameHostImpl::DidStopLoading implementation won't dispatch the event
+  // if the page is still loading). We dispatch it here as it hasn't been
+  // dispatched pre-activation because the back-forward cache page is already
+  // loaded, whereas, for initial prerendering navigation, prerendered page
+  // might still be loading.
   DidStopLoading();
 
   if (is_prerender_page_activation) {
@@ -4211,6 +4226,21 @@
   SetLifecycleStateToReadyToBeDeleted();
 }
 
+void RenderFrameHostImpl::MaybeDispatchDidFinishLoadOnPrerenderActivation() {
+  auto* document_data = document_associated_data_.get();
+
+  // Don't dispatch notification if DidFinishLoad has not yet been invoked for
+  // `rfh` i.e., when the url is nullopt.
+  if (!document_data->pending_did_finish_load_url_for_prerendering)
+    return;
+
+  delegate_->OnDidFinishLoad(
+      this, *document_data->pending_did_finish_load_url_for_prerendering);
+
+  // Set to nullopt to avoid calling DidFinishLoad twice.
+  document_data->pending_did_finish_load_url_for_prerendering.reset();
+}
+
 void RenderFrameHostImpl::SwapOuterDelegateFrame(RenderFrameProxyHost* proxy) {
   GetMojomFrameInRenderer()->Unload(
       proxy->GetRoutingID(), /*is_loading=*/false,
@@ -5334,6 +5364,15 @@
 }
 
 void RenderFrameHostImpl::DidFinishLoad(const GURL& validated_url) {
+  // In case of prerendering, we dispatch DidFinishLoad on activation. This is
+  // done to avoid notifying observers about a load event triggered from a
+  // inactive RenderFrameHost.
+  if (lifecycle_state() == LifecycleStateImpl::kPrerendering) {
+    document_associated_data_->pending_did_finish_load_url_for_prerendering =
+        validated_url;
+    return;
+  }
+
   delegate_->OnDidFinishLoad(this, validated_url);
 }
 
diff --git a/content/browser/renderer_host/render_frame_host_impl.h b/content/browser/renderer_host/render_frame_host_impl.h
index e4140b9d..40967ba 100644
--- a/content/browser/renderer_host/render_frame_host_impl.h
+++ b/content/browser/renderer_host/render_frame_host_impl.h
@@ -3098,6 +3098,11 @@
   // renderer.
   bool ShouldWaitForUnloadHandlers() const;
 
+  // Prerender2:
+  // Dispatches DidFinishLoad if it occurred pre-activation and was deferred to
+  // be dispatched after activation.
+  void MaybeDispatchDidFinishLoadOnPrerenderActivation();
+
   // The RenderViewHost that this RenderFrameHost is associated with.
   //
   // It is kept alive as long as any RenderFrameHosts or RenderFrameProxyHosts
@@ -3781,6 +3786,14 @@
     // The Page object associated with the main document. It is nullptr for
     // subframes.
     std::unique_ptr<PageImpl> owned_page;
+
+    // Prerender2:
+    //
+    // The URL that `blink.mojom.LocalFrameHost::DidFinishLoad()` passed to
+    // DidFinishLoad, nullopt if DidFinishLoad wasn't called for this document
+    // or this document is not in prerendering. This is used to defer and
+    // dispatch DidFinishLoad notification on prerender activation.
+    absl::optional<GURL> pending_did_finish_load_url_for_prerendering;
   };
 
   std::unique_ptr<DocumentAssociatedData> document_associated_data_;
diff --git a/content/browser/storage_partition_impl_unittest.cc b/content/browser/storage_partition_impl_unittest.cc
index 2ca2212..63dddbb 100644
--- a/content/browser/storage_partition_impl_unittest.cc
+++ b/content/browser/storage_partition_impl_unittest.cc
@@ -401,7 +401,7 @@
   explicit RemoveCodeCacheTester(GeneratedCodeCacheContext* code_cache_context)
       : code_cache_context_(code_cache_context) {}
 
-  enum Cache { kJs, kWebAssembly };
+  enum Cache { kJs, kWebAssembly, kWebUiJs };
 
   bool ContainsEntry(Cache cache, const GURL& url, const GURL& origin_lock) {
     entry_exists_ = false;
@@ -478,8 +478,10 @@
   GeneratedCodeCache* GetCache(Cache cache) {
     if (cache == kJs)
       return code_cache_context_->generated_js_code_cache();
-    else
+    else if (cache == kWebAssembly)
       return code_cache_context_->generated_wasm_code_cache();
+    else
+      return code_cache_context_->generated_webui_js_code_cache();
   }
 
   void FetchEntryCallback(base::OnceClosure quit,
@@ -1702,6 +1704,56 @@
   base::RunLoop().RunUntilIdle();
 }
 
+TEST_F(StoragePartitionImplTest, ClearWebUICodeCache) {
+  base::test::ScopedFeatureList features;
+  features.InitAndEnableFeature(features::kWebUICodeCache);
+
+  const GURL kResourceURL("chrome://host4/script.js");
+
+  StoragePartitionImpl* partition = static_cast<StoragePartitionImpl*>(
+      browser_context()->GetDefaultStoragePartition());
+  // Ensure code cache is initialized.
+  base::RunLoop().RunUntilIdle();
+  EXPECT_TRUE(partition->GetGeneratedCodeCacheContext() != nullptr);
+
+  RemoveCodeCacheTester tester(partition->GetGeneratedCodeCacheContext());
+
+  GURL origin = GURL("chrome://host1:1/");
+  std::string data("SomeData");
+  tester.AddEntry(RemoveCodeCacheTester::kWebUiJs, kResourceURL, origin, data);
+  EXPECT_TRUE(tester.ContainsEntry(RemoveCodeCacheTester::kWebUiJs,
+                                   kResourceURL, origin));
+  EXPECT_EQ(tester.received_data(), data);
+
+  base::RunLoop run_loop;
+  base::ThreadTaskRunnerHandle::Get()->PostTask(
+      FROM_HERE,
+      base::BindOnce(&ClearCodeCache, partition, base::Time(), base::Time(),
+                     base::RepeatingCallback<bool(const GURL&)>(), &run_loop));
+  run_loop.Run();
+
+  EXPECT_FALSE(tester.ContainsEntry(RemoveCodeCacheTester::kWebUiJs,
+                                    kResourceURL, origin));
+
+  // Make sure there isn't a second invalid callback sitting in the queue.
+  // (this used to be a bug).
+  base::RunLoop().RunUntilIdle();
+}
+
+TEST_F(StoragePartitionImplTest, WebUICodeCacheDisabled) {
+  base::test::ScopedFeatureList features;
+  features.InitAndDisableFeature(features::kWebUICodeCache);
+
+  StoragePartitionImpl* partition = static_cast<StoragePartitionImpl*>(
+      browser_context()->GetDefaultStoragePartition());
+  // Ensure code cache is initialized.
+  base::RunLoop().RunUntilIdle();
+  EXPECT_TRUE(partition->GetGeneratedCodeCacheContext() != nullptr);
+  EXPECT_EQ(partition->GetGeneratedCodeCacheContext()
+                ->generated_webui_js_code_cache(),
+            nullptr);
+}
+
 TEST_F(StoragePartitionImplTest, ClearCodeCacheIncognito) {
   browser_context()->set_is_off_the_record(true);
 
diff --git a/content/browser/webui/DEPS b/content/browser/webui/DEPS
index 6f0c4d64..32c7fc1e 100644
--- a/content/browser/webui/DEPS
+++ b/content/browser/webui/DEPS
@@ -1,4 +1,4 @@
 include_rules = [
   "+components/crash/content/browser/error_reporting",
-  "+ui/chromeos/colors",
+  "+ui/chromeos/styles",
 ]
diff --git a/content/browser/webui/shared_resources_data_source.cc b/content/browser/webui/shared_resources_data_source.cc
index 9ac05fc0..e9739572 100644
--- a/content/browser/webui/shared_resources_data_source.cc
+++ b/content/browser/webui/shared_resources_data_source.cc
@@ -28,7 +28,7 @@
 #include "base/feature_list.h"
 #include "chromeos/grit/chromeos_resources.h"
 #include "chromeos/grit/chromeos_resources_map.h"
-#include "ui/chromeos/colors/cros_colors.h"
+#include "ui/chromeos/styles/cros_styles.h"
 #endif
 
 namespace content {
@@ -130,7 +130,7 @@
   source->AddString(
       "crosColorsDebugOverrides",
       base::FeatureList::IsEnabled(ash::features::kSemanticColorsDebugOverride)
-          ? cros_colors::kDebugOverrideCssString
+          ? cros_styles::kDebugOverrideCssString
           : "");
 #endif  // !BUILDFLAG(IS_CHROMEOS_ASH)
 
diff --git a/content/public/browser/document_service_base.h b/content/public/browser/document_service_base.h
index e92c412..a7d9457f 100644
--- a/content/public/browser/document_service_base.h
+++ b/content/public/browser/document_service_base.h
@@ -20,6 +20,9 @@
 
 namespace content {
 
+class NavigationHandle;
+class RenderFrameHost;
+
 // Base class for mojo interface implementations tied to a document's lifetime.
 // The service will be destroyed when any of the following happens:
 // 1. mojo interface connection error happened,
@@ -83,16 +86,11 @@
 
     if (!navigation_handle->HasCommitted() ||
         navigation_handle->IsSameDocument() ||
-        navigation_handle->IsPageActivation()) {
+        navigation_handle->IsServedFromBackForwardCache()) {
       return;
     }
 
     if (navigation_handle->GetRenderFrameHost() == render_frame_host_) {
-      // DocumentServiceBase is destroyed either when RenderFrameHost is
-      // destroyed (covered by RenderFrameDeleted) or when a new document
-      // commits in the same RenderFrameHost (covered by DidFinishNavigation).
-      // Only committed non-same-document non-bfcache non-prerendering
-      // activation navigations replace a document in existing RenderFrameHost.
       DVLOG(1) << __func__ << ": Close connection on navigation.";
       Close();
     }
diff --git a/content/public/browser/navigation_handle.h b/content/public/browser/navigation_handle.h
index e8f89b0..85025f2 100644
--- a/content/public/browser/navigation_handle.h
+++ b/content/public/browser/navigation_handle.h
@@ -224,10 +224,6 @@
   // Whether the navigation is restoring a page from back-forward cache.
   virtual bool IsServedFromBackForwardCache() = 0;
 
-  // Whether this navigation is activating an existing page (e.g. served from
-  // the BackForwardCache or Prerender)
-  virtual bool IsPageActivation() const = 0;
-
   // Navigation control flow --------------------------------------------------
 
   // The net error code if an error happened prior to commit. Otherwise it will
diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc
index b7ce579..80b6878 100644
--- a/content/public/common/content_features.cc
+++ b/content/public/common/content_features.cc
@@ -982,6 +982,10 @@
 const base::Feature kWebRtcUseGpuMemoryBufferVideoFrames{
     "WebRTC-UseGpuMemoryBufferVideoFrames", base::FEATURE_ENABLED_BY_DEFAULT};
 
+// Enables code caching for scripts used on WebUI pages.
+const base::Feature kWebUICodeCache{"WebUICodeCache",
+                                    base::FEATURE_DISABLED_BY_DEFAULT};
+
 // Enables report-only Trusted Types experiment on WebUIs
 const base::Feature kWebUIReportOnlyTrustedTypes{
     "WebUIReportOnlyTrustedTypes", base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/content/public/common/content_features.h b/content/public/common/content_features.h
index 4f4114f..91f5dd9 100644
--- a/content/public/common/content_features.h
+++ b/content/public/common/content_features.h
@@ -247,6 +247,7 @@
 CONTENT_EXPORT extern const base::Feature kWebPayments;
 CONTENT_EXPORT extern const base::Feature kWebPaymentsMinimalUI;
 CONTENT_EXPORT extern const base::Feature kWebRtcUseGpuMemoryBufferVideoFrames;
+CONTENT_EXPORT extern const base::Feature kWebUICodeCache;
 CONTENT_EXPORT extern const base::Feature kWebUIReportOnlyTrustedTypes;
 CONTENT_EXPORT extern const base::Feature kWebUsb;
 CONTENT_EXPORT extern const base::Feature kWebXr;
diff --git a/content/public/test/mock_navigation_handle.h b/content/public/test/mock_navigation_handle.h
index 20b95c0..580a73c4 100644
--- a/content/public/test/mock_navigation_handle.h
+++ b/content/public/test/mock_navigation_handle.h
@@ -68,11 +68,6 @@
   bool IsServedFromBackForwardCache() override {
     return is_served_from_bfcache_;
   }
-  bool IsPageActivation() const override {
-    MockNavigationHandle* handle = const_cast<MockNavigationHandle*>(this);
-    return handle->IsPrerenderedPageActivation() ||
-           handle->IsServedFromBackForwardCache();
-  }
   RenderFrameHost* GetParentFrame() override {
     return render_frame_host_ ? render_frame_host_->GetParent() : nullptr;
   }
diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc
index 4648dc7..c2b1d0d 100644
--- a/content/renderer/render_thread_impl.cc
+++ b/content/renderer/render_thread_impl.cc
@@ -961,6 +961,12 @@
   WebSecurityPolicy::RegisterURLSchemeAsAllowingWasmEvalCSP(
       chrome_untrusted_scheme);
 
+  if (base::FeatureList::IsEnabled(features::kWebUICodeCache)) {
+    WebSecurityPolicy::RegisterURLSchemeAsCodeCacheWithHashing(chrome_scheme);
+    WebSecurityPolicy::RegisterURLSchemeAsCodeCacheWithHashing(
+        chrome_untrusted_scheme);
+  }
+
   // devtools:
   WebString devtools_scheme(WebString::FromASCII(kChromeDevToolsScheme));
   WebSecurityPolicy::RegisterURLSchemeAsDisplayIsolated(devtools_scheme);
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn
index cd2ab4c..b557efb 100644
--- a/content/test/BUILD.gn
+++ b/content/test/BUILD.gn
@@ -76,8 +76,6 @@
     "../browser/media/session/mock_media_session_service_impl.h",
     "../browser/presentation/presentation_test_utils.cc",
     "../browser/presentation/presentation_test_utils.h",
-    "../browser/renderer_host/document_service_base_echo_impl.cc",
-    "../browser/renderer_host/document_service_base_echo_impl.h",
     "../browser/renderer_host/input/mock_input_router.cc",
     "../browser/renderer_host/input/mock_input_router.h",
     "../browser/renderer_host/mock_render_widget_host.cc",
@@ -1201,7 +1199,6 @@
     "../browser/renderer_host/back_forward_cache_metrics_browsertest.cc",
     "../browser/renderer_host/blocked_scheme_navigation_browsertest.cc",
     "../browser/renderer_host/cookie_browsertest.cc",
-    "../browser/renderer_host/document_service_base_browsertest.cc",
     "../browser/renderer_host/embedding_token_browsertest.cc",
     "../browser/renderer_host/frame_tree_browsertest.cc",
     "../browser/renderer_host/input/autoscroll_browsertest.cc",
diff --git a/content/test/gpu/unexpected_passes/gpu_builders.py b/content/test/gpu/unexpected_passes/gpu_builders.py
index 89d3c23..214472c 100644
--- a/content/test/gpu/unexpected_passes/gpu_builders.py
+++ b/content/test/gpu/unexpected_passes/gpu_builders.py
@@ -81,7 +81,7 @@
       self._fake_ci_builders = {}
       for try_builder, ci_builder_list in fake_try_builders.items():
         for ci in ci_builder_list:
-          self._fake_ci_builders[ci] = try_builder
+          self._fake_ci_builders.setdefault(ci, set()).add(try_builder)
 
     return self._fake_ci_builders
 
diff --git a/content/test/gpu/unexpected_passes/gpu_builders_unittest.py b/content/test/gpu/unexpected_passes/gpu_builders_unittest.py
index 1b81ba7..5aaeaa2f 100755
--- a/content/test/gpu/unexpected_passes/gpu_builders_unittest.py
+++ b/content/test/gpu/unexpected_passes/gpu_builders_unittest.py
@@ -66,3 +66,7 @@
       if 'telemetry_gpu_integration_test' in isolate and 'android' in isolate:
         return
     self.fail('Did not find any Android-specific isolate names')
+
+
+if __name__ == '__main__':
+  unittest.main(verbosity=2)
diff --git a/extensions/browser/extension_function_histogram_value.h b/extensions/browser/extension_function_histogram_value.h
index a36447bb..0c03dad 100644
--- a/extensions/browser/extension_function_histogram_value.h
+++ b/extensions/browser/extension_function_histogram_value.h
@@ -1629,6 +1629,7 @@
   ACCESSIBILITY_PRIVATE_MAGNIFIERCENTERONPOINT = 1566,
   STORAGE_SETACCESSLEVEL = 1567,
   OS_TELEMETRY_GETOEMDATA = 1568,
+  SCRIPTING_UNREGISTERCONTENTSCRIPTS = 1569,
   // Last entry: Add new entries above, then run:
   // python tools/metrics/histograms/update_extension_histograms.py
   ENUM_BOUNDARY
diff --git a/extensions/browser/extension_user_script_loader.cc b/extensions/browser/extension_user_script_loader.cc
index 5691e86..02b87fe 100644
--- a/extensions/browser/extension_user_script_loader.cc
+++ b/extensions/browser/extension_user_script_loader.cc
@@ -16,6 +16,7 @@
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/containers/contains.h"
+#include "base/containers/cxx20_erase_vector.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/memory/read_only_shared_memory_region.h"
@@ -277,8 +278,18 @@
     std::unique_ptr<UserScriptList> scripts,
     DynamicScriptsModifiedCallback callback) {
   auto scripts_metadata = std::make_unique<UserScriptList>();
-  for (const std::unique_ptr<UserScript>& script : *scripts)
-    scripts_metadata->push_back(UserScript::CopyMetadataFrom(*script));
+  for (const std::unique_ptr<UserScript>& script : *scripts) {
+    // Only proceed with adding scripts that the extension still intends to add.
+    // This guards again an edge case where scripts registered by an API call
+    // are quickly unregistered.
+    if (base::Contains(pending_dynamic_script_ids_, script->id()))
+      scripts_metadata->push_back(UserScript::CopyMetadataFrom(*script));
+  }
+
+  if (scripts_metadata->empty()) {
+    std::move(callback).Run(/*error=*/absl::nullopt);
+    return;
+  }
 
   AddScripts(std::move(scripts),
              base::BindOnce(&ExtensionUserScriptLoader::OnDynamicScriptsAdded,
@@ -286,6 +297,29 @@
                             std::move(scripts_metadata), std::move(callback)));
 }
 
+void ExtensionUserScriptLoader::RemoveDynamicScripts(
+    const std::set<std::string>& ids_to_remove,
+    DynamicScriptsModifiedCallback callback) {
+  if (ids_to_remove.empty()) {
+    std::move(callback).Run(/*error=*/absl::nullopt);
+    return;
+  }
+
+  // Remove pending script ids first, so loads from previous operations which
+  // complete later will recognize the change.
+  RemovePendingDynamicScriptIDs(ids_to_remove);
+  RemoveScripts(
+      ids_to_remove,
+      base::BindOnce(&ExtensionUserScriptLoader::OnDynamicScriptsRemoved,
+                     weak_factory_.GetWeakPtr(), ids_to_remove,
+                     std::move(callback)));
+}
+
+void ExtensionUserScriptLoader::ClearDynamicScripts(
+    DynamicScriptsModifiedCallback callback) {
+  RemoveDynamicScripts(GetDynamicScriptIDs(), std::move(callback));
+}
+
 std::set<std::string> ExtensionUserScriptLoader::GetDynamicScriptIDs() {
   std::set<std::string> dynamic_script_ids;
   dynamic_script_ids.insert(pending_dynamic_script_ids_.begin(),
@@ -374,4 +408,23 @@
   std::move(callback).Run(error);
 }
 
+void ExtensionUserScriptLoader::OnDynamicScriptsRemoved(
+    const std::set<std::string>& removed_script_ids,
+    DynamicScriptsModifiedCallback callback,
+    UserScriptLoader* loader,
+    const absl::optional<std::string>& error) {
+  // Remove scripts from `loaded_dynamic_scripts_` only when the set of
+  // `removed_script_ids` have actually been removed and the corresponding IPC
+  // has been sent.
+  if (!error.has_value()) {
+    base::EraseIf(
+        loaded_dynamic_scripts_,
+        [&removed_script_ids](const std::unique_ptr<UserScript>& script) {
+          return base::Contains(removed_script_ids, script->id());
+        });
+  }
+
+  std::move(callback).Run(error);
+}
+
 }  // namespace extensions
diff --git a/extensions/browser/extension_user_script_loader.h b/extensions/browser/extension_user_script_loader.h
index 6043090..c3714d0 100644
--- a/extensions/browser/extension_user_script_loader.h
+++ b/extensions/browser/extension_user_script_loader.h
@@ -63,6 +63,15 @@
   void AddDynamicScripts(std::unique_ptr<UserScriptList> scripts,
                          DynamicScriptsModifiedCallback callback);
 
+  // Removes all dynamic scripts with an id specified in `ids` from
+  // `pending_dynamic_script_ids_` and `loaded_dynamic_scripts_`.
+  void RemoveDynamicScripts(const std::set<std::string>& ids_to_remove,
+                            DynamicScriptsModifiedCallback callback);
+
+  // Removes all dynamic scripts for the extension, including loaded and
+  // pending scripts.
+  void ClearDynamicScripts(DynamicScriptsModifiedCallback callback);
+
   // Returns the IDs of all dynamic scripts for the extension, which includes
   // the IDs of all pending and loaded dynamic scripts.
   std::set<std::string> GetDynamicScriptIDs();
@@ -94,12 +103,22 @@
                              UserScriptLoader* loader,
                              const absl::optional<std::string>& error);
 
+  // Called when the scripts to be removed in RemoveDynamicScripts are removed.
+  // All scripts in `loaded_dynamic_scripts_` with their id in
+  // `removed_script_ids` are removed.
+  void OnDynamicScriptsRemoved(const std::set<std::string>& removed_script_ids,
+                               DynamicScriptsModifiedCallback callback,
+                               UserScriptLoader* loader,
+                               const absl::optional<std::string>& error);
+
   // The IDs of dynamically registered scripts (e.g. registered by the
   // extension's API calls) that have not been loaded yet. IDs are removed from
   // the set when:
   //  - Their corresponding scripts have been loaded.
   //  - A load for the IDs has failed.
   //  - A load for the IDs will no longer be initiated.
+  //  - An unregisterContentScripts call was made for one or more ids in this
+  //    set.
   std::set<std::string> pending_dynamic_script_ids_;
 
   // The metadata of dynamic scripts from the extension that have been loaded.
diff --git a/extensions/browser/user_script_loader.h b/extensions/browser/user_script_loader.h
index a554d13..fe72cda4 100644
--- a/extensions/browser/user_script_loader.h
+++ b/extensions/browser/user_script_loader.h
@@ -163,7 +163,7 @@
 
   // The mutually-exclusive information about sets of scripts that were added or
   // removed since the last script load. These maps are keyed by script ids.
-  // Note that we only need HostID information for removal.
+  // Note that we only need a script's id for removal.
   std::map<std::string, std::unique_ptr<UserScript>> added_scripts_map_;
   std::set<std::string> removed_script_ids_;
 
diff --git a/extensions/common/user_script.cc b/extensions/common/user_script.cc
index 12a470d..b1dba34 100644
--- a/extensions/common/user_script.cc
+++ b/extensions/common/user_script.cc
@@ -78,6 +78,11 @@
   return valid_schemes;
 }
 
+// static
+bool UserScript::IsIDGenerated(const std::string& id) {
+  return !id.empty() && id[0] == kGeneratedIDPrefix;
+}
+
 UserScript::File::File(const base::FilePath& extension_root,
                        const base::FilePath& relative_path,
                        const GURL& url)
@@ -272,7 +277,7 @@
 
 bool UserScript::IsIDGenerated() const {
   CHECK(!user_script_id_.empty());
-  return user_script_id_[0] == kGeneratedIDPrefix;
+  return IsIDGenerated(user_script_id_);
 }
 
 void UserScript::UnpickleGlobs(const base::Pickle& pickle,
diff --git a/extensions/common/user_script.h b/extensions/common/user_script.h
index 6ad0dfb..b570339 100644
--- a/extensions/common/user_script.h
+++ b/extensions/common/user_script.h
@@ -46,6 +46,9 @@
   // `can_execute_script_everywhere` is true, this will return ALL_SCHEMES.
   static int ValidUserScriptSchemes(bool can_execute_script_everywhere = false);
 
+  // Returns if a user script's ID is generated.
+  static bool IsIDGenerated(const std::string& id);
+
   // Holds script file info.
   class File {
    public:
diff --git a/ios/chrome/browser/google/BUILD.gn b/ios/chrome/browser/google/BUILD.gn
index 116c569..75a3227 100644
--- a/ios/chrome/browser/google/BUILD.gn
+++ b/ios/chrome/browser/google/BUILD.gn
@@ -2,6 +2,14 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
+source_set("google") {
+  configs += [ "//build/config/compiler:enable_arc" ]
+  sources = [
+    "google_brand.h",
+    "google_brand.mm",
+  ]
+}
+
 source_set("google_logo") {
   configs += [ "//build/config/compiler:enable_arc" ]
   sources = [
diff --git a/ios/chrome/browser/google/google_brand.h b/ios/chrome/browser/google/google_brand.h
new file mode 100644
index 0000000..4ecd9d76
--- /dev/null
+++ b/ios/chrome/browser/google/google_brand.h
@@ -0,0 +1,19 @@
+// Copyright 2015 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.
+
+#ifndef IOS_CHROME_BROWSER_GOOGLE_GOOGLE_BRAND_H_
+#define IOS_CHROME_BROWSER_GOOGLE_GOOGLE_BRAND_H_
+
+#include <string>
+
+namespace ios {
+namespace google_brand {
+
+// True if a build is strictly organic, according to its brand code.
+bool IsOrganic(const std::string& brand);
+
+}  // namespace google_brand
+}  // namespace ios
+
+#endif  // IOS_CHROME_BROWSER_GOOGLE_GOOGLE_BRAND_H_
diff --git a/ios/chrome/browser/google/google_brand.mm b/ios/chrome/browser/google/google_brand.mm
new file mode 100644
index 0000000..96d433a5
--- /dev/null
+++ b/ios/chrome/browser/google/google_brand.mm
@@ -0,0 +1,21 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ios/chrome/browser/google/google_brand.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+namespace ios {
+namespace google_brand {
+
+bool IsOrganic(const std::string& brand) {
+  // An empty brand string on iOS is used for organic installation. All other
+  // iOS brand string are non-organic.
+  return brand.empty();
+}
+
+}  // namespace google_brand
+}  // namespace ios
diff --git a/ios/chrome/browser/passwords/ios_chrome_password_manager_client.h b/ios/chrome/browser/passwords/ios_chrome_password_manager_client.h
index 748e60a..5129d7d 100644
--- a/ios/chrome/browser/passwords/ios_chrome_password_manager_client.h
+++ b/ios/chrome/browser/passwords/ios_chrome_password_manager_client.h
@@ -101,8 +101,14 @@
   const password_manager::PasswordFeatureManager* GetPasswordFeatureManager()
       const override;
   PrefService* GetPrefs() const override;
+  // TODO(crbug.com/1218413): Remove the following two methods once migration
+  // from PasswordStore to PasswordStoreInterface is complete.
   password_manager::PasswordStore* GetProfilePasswordStore() const override;
   password_manager::PasswordStore* GetAccountPasswordStore() const override;
+  password_manager::PasswordStoreInterface* GetProfilePasswordStoreInterface()
+      const override;
+  password_manager::PasswordStoreInterface* GetAccountPasswordStoreInterface()
+      const override;
   password_manager::PasswordReuseManager* GetPasswordReuseManager()
       const override;
 
diff --git a/ios/chrome/browser/passwords/ios_chrome_password_manager_client.mm b/ios/chrome/browser/passwords/ios_chrome_password_manager_client.mm
index 78ad48f..b95fcb2 100644
--- a/ios/chrome/browser/passwords/ios_chrome_password_manager_client.mm
+++ b/ios/chrome/browser/passwords/ios_chrome_password_manager_client.mm
@@ -55,6 +55,7 @@
 using password_manager::PasswordFormManagerForUI;
 using password_manager::PasswordManagerMetricsRecorder;
 using password_manager::PasswordStore;
+using password_manager::PasswordStoreInterface;
 using password_manager::SyncState;
 
 namespace {
@@ -191,6 +192,19 @@
   return nullptr;
 }
 
+PasswordStoreInterface*
+IOSChromePasswordManagerClient::GetProfilePasswordStoreInterface() const {
+  return IOSChromePasswordStoreFactory::GetForBrowserState(
+             bridge_.browserState, ServiceAccessType::EXPLICIT_ACCESS)
+      .get();
+}
+
+PasswordStoreInterface*
+IOSChromePasswordManagerClient::GetAccountPasswordStoreInterface() const {
+  // AccountPasswordStore is currenly not supported on iOS.
+  return nullptr;
+}
+
 password_manager::PasswordReuseManager*
 IOSChromePasswordManagerClient::GetPasswordReuseManager() const {
   return IOSChromePasswordReuseManagerFactory::GetForBrowserState(
diff --git a/ios/chrome/browser/passwords/ios_chrome_password_manager_client_unittest.mm b/ios/chrome/browser/passwords/ios_chrome_password_manager_client_unittest.mm
index d2361dcf..d7531a0a5 100644
--- a/ios/chrome/browser/passwords/ios_chrome_password_manager_client_unittest.mm
+++ b/ios/chrome/browser/passwords/ios_chrome_password_manager_client_unittest.mm
@@ -9,7 +9,7 @@
 #include <memory>
 
 #include "components/autofill/ios/form_util/unique_id_data_tab_helper.h"
-#include "components/password_manager/core/browser/mock_password_store.h"
+#include "components/password_manager/core/browser/mock_password_store_interface.h"
 #include "components/password_manager/core/browser/password_form_manager.h"
 #include "components/password_manager/core/common/password_manager_pref_names.h"
 #include "components/prefs/testing_pref_service.h"
@@ -35,7 +35,8 @@
  public:
   IOSChromePasswordManagerClientTest()
       : ChromeWebTest(std::make_unique<ChromeWebClient>()),
-        store_(new testing::NiceMock<password_manager::MockPasswordStore>()) {}
+        store_(new testing::NiceMock<
+               password_manager::MockPasswordStoreInterface>()) {}
 
   ~IOSChromePasswordManagerClientTest() override {
     store_->ShutdownOnUIThread();
@@ -59,7 +60,7 @@
   // PasswordController for testing.
   PasswordController* passwordController_;
 
-  scoped_refptr<password_manager::MockPasswordStore> store_;
+  scoped_refptr<password_manager::MockPasswordStoreInterface> store_;
 };
 
 // Tests that saving password behaves properly with the
diff --git a/ios/chrome/browser/passwords/ios_chrome_password_store_factory.cc b/ios/chrome/browser/passwords/ios_chrome_password_store_factory.cc
index 1bc56ee..f877b19 100644
--- a/ios/chrome/browser/passwords/ios_chrome_password_store_factory.cc
+++ b/ios/chrome/browser/passwords/ios_chrome_password_store_factory.cc
@@ -53,8 +53,9 @@
   if (access_type == ServiceAccessType::IMPLICIT_ACCESS &&
       browser_state->IsOffTheRecord())
     return nullptr;
-  return base::WrapRefCounted(static_cast<password_manager::PasswordStore*>(
-      GetInstance()->GetServiceForBrowserState(browser_state, true).get()));
+  return base::WrapRefCounted(
+      static_cast<password_manager::PasswordStoreInterface*>(
+          GetInstance()->GetServiceForBrowserState(browser_state, true).get()));
 }
 
 // static
diff --git a/ios/chrome/browser/rlz/BUILD.gn b/ios/chrome/browser/rlz/BUILD.gn
index 1359598..c16b6e33 100644
--- a/ios/chrome/browser/rlz/BUILD.gn
+++ b/ios/chrome/browser/rlz/BUILD.gn
@@ -16,6 +16,7 @@
     "//ios/chrome/browser/browser_state",
     "//ios/chrome/browser/google",
     "//ios/chrome/browser/search_engines",
+    "//ios/public/provider/chrome/browser/app_distribution:app_distribution_api",
     "//ios/web",
     "//services/network/public/cpp",
   ]
diff --git a/ios/chrome/browser/rlz/rlz_tracker_delegate_impl.cc b/ios/chrome/browser/rlz/rlz_tracker_delegate_impl.cc
index e4cc64e..d2540b0e 100644
--- a/ios/chrome/browser/rlz/rlz_tracker_delegate_impl.cc
+++ b/ios/chrome/browser/rlz/rlz_tracker_delegate_impl.cc
@@ -16,6 +16,7 @@
 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
 #include "ios/chrome/browser/google/google_brand.h"
 #include "ios/chrome/browser/search_engines/template_url_service_factory.h"
+#include "ios/public/provider/chrome/browser/app_distribution/app_distribution_api.h"
 #include "ios/web/public/thread/web_thread.h"
 #include "services/network/public/cpp/shared_url_loader_factory.h"
 
@@ -67,7 +68,8 @@
 }
 
 bool RLZTrackerDelegateImpl::GetBrand(std::string* brand) {
-  return ios::google_brand::GetBrand(brand);
+  brand->assign(ios::provider::GetBrandCode());
+  return true;
 }
 
 bool RLZTrackerDelegateImpl::IsBrandOrganic(const std::string& brand) {
diff --git a/ios/chrome/browser/search_engines/BUILD.gn b/ios/chrome/browser/search_engines/BUILD.gn
index 7d9983f..391db8f 100644
--- a/ios/chrome/browser/search_engines/BUILD.gn
+++ b/ios/chrome/browser/search_engines/BUILD.gn
@@ -37,6 +37,7 @@
     "//components/version_info",
     "//ios/chrome/browser",
     "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/google",
     "//ios/chrome/browser/history",
     "//ios/chrome/browser/webdata_services",
     "//ios/chrome/common",
diff --git a/ios/chrome/browser/search_engines/ui_thread_search_terms_data.cc b/ios/chrome/browser/search_engines/ui_thread_search_terms_data.cc
index 5184cab..c1aa616 100644
--- a/ios/chrome/browser/search_engines/ui_thread_search_terms_data.cc
+++ b/ios/chrome/browser/search_engines/ui_thread_search_terms_data.cc
@@ -11,6 +11,7 @@
 #include "components/omnibox/browser/omnibox_field_trial.h"
 #include "components/version_info/version_info.h"
 #include "ios/chrome/browser/application_context.h"
+#include "ios/chrome/browser/google/google_brand.h"
 #include "ios/chrome/browser/system_flags.h"
 #include "ios/chrome/common/channel_info.h"
 #include "ios/public/provider/chrome/browser/app_distribution/app_distribution_api.h"
@@ -24,18 +25,6 @@
 #endif
 
 namespace ios {
-#if BUILDFLAG(ENABLE_RLZ)
-namespace {
-
-// True if a build is strictly organic, according to its brand code.
-bool IsOrganic(const std::string& brand) {
-  // An empty brand string on iOS is used for organic installation. All other
-  // iOS brand string are non-organic.
-  return brand.empty();
-}
-
-}  // anonymous namespace
-#endif
 
 UIThreadSearchTermsData::UIThreadSearchTermsData() {
   DCHECK(!web::WebThread::IsThreadInitialized(web::WebThread::UI) ||
@@ -65,7 +54,7 @@
   std::u16string rlz_string;
 #if BUILDFLAG(ENABLE_RLZ)
   // For organic brandcode do not use rlz at all.
-  if (!IsOrganic(ios::provider::GetBrandCode())) {
+  if (!ios::google_brand::IsOrganic(ios::provider::GetBrandCode())) {
     // This call will may return false until the value has been cached. This
     // normally would mean that a few omnibox searches might not send the RLZ
     // data but this is not really a problem (as the value will eventually be
diff --git a/ios/chrome/browser/sync/ios_chrome_sync_client.h b/ios/chrome/browser/sync/ios_chrome_sync_client.h
index f3121d4..35704e3 100644
--- a/ios/chrome/browser/sync/ios_chrome_sync_client.h
+++ b/ios/chrome/browser/sync/ios_chrome_sync_client.h
@@ -20,7 +20,7 @@
 }
 
 namespace password_manager {
-class PasswordStore;
+class PasswordStoreInterface;
 }
 
 namespace browser_sync {
@@ -72,7 +72,7 @@
   // respective backend threads.
   scoped_refptr<autofill::AutofillWebDataService> profile_web_data_service_;
   scoped_refptr<autofill::AutofillWebDataService> account_web_data_service_;
-  scoped_refptr<password_manager::PasswordStore> password_store_;
+  scoped_refptr<password_manager::PasswordStoreInterface> password_store_;
 
   // The task runner for the |web_data_service_|, if any.
   scoped_refptr<base::SingleThreadTaskRunner> db_thread_;
diff --git a/ios/chrome/browser/sync/ios_chrome_sync_client.mm b/ios/chrome/browser/sync/ios_chrome_sync_client.mm
index 2967adb0..404560b4 100644
--- a/ios/chrome/browser/sync/ios_chrome_sync_client.mm
+++ b/ios/chrome/browser/sync/ios_chrome_sync_client.mm
@@ -28,7 +28,7 @@
 #include "components/invalidation/impl/profile_invalidation_provider.h"
 #include "components/keyed_service/core/service_access_type.h"
 #include "components/metrics/demographics/user_demographics.h"
-#include "components/password_manager/core/browser/password_store.h"
+#include "components/password_manager/core/browser/password_store_interface.h"
 #include "components/reading_list/core/reading_list_model.h"
 #include "components/sync/base/report_unrecoverable_error.h"
 #include "components/sync/base/sync_base_switches.h"
@@ -99,7 +99,7 @@
   db_thread_ = profile_web_data_service_
                    ? profile_web_data_service_->GetDBTaskRunner()
                    : nullptr;
-  password_store_ = IOSChromePasswordStoreFactory::GetForBrowserState(
+  password_store_ = IOSChromePasswordStoreFactory::GetInterfaceForBrowserState(
       browser_state_, ServiceAccessType::IMPLICIT_ACCESS);
 
   component_factory_ =
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/BUILD.gn b/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/BUILD.gn
index f25624ad..d7b3902 100644
--- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/BUILD.gn
+++ b/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/BUILD.gn
@@ -53,7 +53,9 @@
   sources = [ "consistency_promo_signin_coordinator_egtest.mm" ]
   deps = [
     "//base",
+    "//ios/chrome/browser:pref_names",
     "//ios/chrome/browser/ui/authentication:eg_test_support+eg2",
+    "//ios/chrome/browser/ui/authentication/signin:constants",
     "//ios/chrome/test/earl_grey:eg_test_support+eg2",
     "//ios/testing/earl_grey:eg_test_support+eg2",
     "//ios/third_party/earl_grey2:test_lib",
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_mediator.mm b/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_mediator.mm
index 1934680..dc3510e 100644
--- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_mediator.mm
+++ b/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_mediator.mm
@@ -4,9 +4,8 @@
 
 #import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_mediator.h"
 
-#import "ios/chrome/browser/chrome_browser_provider_observer_bridge.h"
 #import "ios/chrome/browser/signin/chrome_account_manager_service.h"
-#import "ios/chrome/browser/signin/chrome_identity_service_observer_bridge.h"
+#import "ios/chrome/browser/signin/chrome_account_manager_service_observer_bridge.h"
 #import "ios/chrome/browser/ui/authentication/resized_avatar_cache.h"
 #import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_consumer.h"
 #import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/identity_item_configurator.h"
@@ -18,17 +17,14 @@
 #endif
 
 @interface ConsistencyAccountChooserMediator () <
-    ChromeBrowserProviderObserver,
-    ChromeIdentityServiceObserver> {
-  std::unique_ptr<ChromeIdentityServiceObserverBridge> _identityServiceObserver;
-  std::unique_ptr<ChromeBrowserProviderObserverBridge> _browserProviderObserver;
+    ChromeAccountManagerServiceObserver> {
+  std::unique_ptr<ChromeAccountManagerServiceObserverBridge>
+      _accountManagerServiceObserver;
 }
 
 @property(nonatomic, strong) ResizedAvatarCache* avatarCache;
 // Configurators based on ChromeIdentity list.
 @property(nonatomic, strong) NSArray* sortedIdentityItemConfigurators;
-@property(nonatomic, assign, readonly)
-    ios::ChromeIdentityService* chromeIdentityService;
 // Account manager service to retrieve Chrome identities.
 @property(nonatomic, assign) ChromeAccountManagerService* accountManagerService;
 
@@ -42,10 +38,9 @@
   if (self = [super init]) {
     DCHECK(accountManagerService);
     _accountManagerService = accountManagerService;
-    _identityServiceObserver =
-        std::make_unique<ChromeIdentityServiceObserverBridge>(self);
-    _browserProviderObserver =
-        std::make_unique<ChromeBrowserProviderObserverBridge>(self);
+    _accountManagerServiceObserver =
+        std::make_unique<ChromeAccountManagerServiceObserverBridge>(
+            self, _accountManagerService);
     _avatarCache = [[ResizedAvatarCache alloc] init];
     _selectedIdentity = selectedIdentity;
     [self loadIdentityItemConfigurators];
@@ -63,10 +58,6 @@
 
 #pragma mark - Properties
 
-- (ios::ChromeIdentityService*)chromeIdentityService {
-  return ios::GetChromeBrowserProvider().GetChromeIdentityService();
-}
-
 - (void)setSelectedIdentity:(ChromeIdentity*)identity {
   DCHECK(identity);
   if (_selectedIdentity == identity) {
@@ -74,8 +65,8 @@
   }
   ChromeIdentity* previousSelectedIdentity = _selectedIdentity;
   _selectedIdentity = identity;
-  [self profileUpdate:previousSelectedIdentity];
-  [self profileUpdate:_selectedIdentity];
+  [self identityChanged:previousSelectedIdentity];
+  [self identityChanged:_selectedIdentity];
 }
 
 #pragma mark - Private
@@ -121,26 +112,9 @@
   configurator.selected = [identity isEqual:self.selectedIdentity];
 }
 
-#pragma mark - ChromeBrowserProviderObserver
+#pragma mark - ChromeAccountManagerServiceObserver
 
-- (void)chromeIdentityServiceDidChange:(ios::ChromeIdentityService*)identity {
-  DCHECK(!_identityServiceObserver.get());
-  _identityServiceObserver =
-      std::make_unique<ChromeIdentityServiceObserverBridge>(self);
-}
-
-- (void)chromeBrowserProviderWillBeDestroyed {
-  _browserProviderObserver.reset();
-}
-
-#pragma mark - ChromeIdentityServiceObserver
-
-- (void)identityListChanged {
-  [self loadIdentityItemConfigurators];
-  [self.consumer reloadAllIdentities];
-}
-
-- (void)profileUpdate:(ChromeIdentity*)identity {
+- (void)identityChanged:(ChromeIdentity*)identity {
   IdentityItemConfigurator* configurator = nil;
   for (IdentityItemConfigurator* cursor in self
            .sortedIdentityItemConfigurators) {
@@ -154,8 +128,9 @@
   [self.consumer reloadIdentityForIdentityItemConfigurator:configurator];
 }
 
-- (void)chromeIdentityServiceWillBeDestroyed {
-  _identityServiceObserver.reset();
+- (void)identityListChanged {
+  [self loadIdentityItemConfigurators];
+  [self.consumer reloadAllIdentities];
 }
 
 #pragma mark - ConsistencyAccountChooserTableViewControllerModelDelegate
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_coordinator_egtest.mm b/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_coordinator_egtest.mm
index 6471ce8..f0becbc 100644
--- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_coordinator_egtest.mm
+++ b/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_coordinator_egtest.mm
@@ -2,10 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#import "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h"
 #import "ios/chrome/browser/ui/authentication/signin_earl_grey.h"
 #import "ios/chrome/browser/ui/authentication/signin_earl_grey_app_interface.h"
 #import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui.h"
 #import "ios/chrome/browser/ui/authentication/signin_matchers.h"
+#import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
 #import "ios/chrome/test/earl_grey/chrome_test_case.h"
 #import "ios/testing/earl_grey/earl_grey_test.h"
@@ -25,6 +28,13 @@
 
 @implementation ConsistencyPromoSigninCoordinatorTestCase
 
+- (void)setUp {
+  [super setUp];
+  // Resets the number of dismissals for web sign-in.
+  [ChromeEarlGrey setIntegerValue:0
+                      forUserPref:prefs::kSigninWebSignDismissalCount];
+}
+
 // Tests that ConsistencyPromoSigninCoordinator shows up, and then skips it.
 - (void)testDismissConsistencyPromoSignin {
   FakeChromeIdentity* fakeIdentity = [SigninEarlGrey fakeIdentity1];
@@ -38,4 +48,34 @@
   [SigninEarlGreyUI verifyWebSigninIsVisible:NO];
 }
 
+// Tests that ConsistencyPromoSigninCoordinator is not shown after the last
+// dismissal (based on kDefaultWebSignInDismissalCount value).
+- (void)testDismissalCount {
+  // Setup.
+  GREYAssertTrue(kDefaultWebSignInDismissalCount > 0,
+                 @"The default dismissal max value should be more than 0");
+  [ChromeEarlGrey setIntegerValue:kDefaultWebSignInDismissalCount - 1
+                      forUserPref:prefs::kSigninWebSignDismissalCount];
+  FakeChromeIdentity* fakeIdentity = [SigninEarlGrey fakeIdentity1];
+  [SigninEarlGrey addFakeIdentity:fakeIdentity];
+  // Show the web sign-in consistency dialog for the last time.
+  [SigninEarlGreyAppInterface triggerConsistencyPromoSigninDialog];
+  [SigninEarlGreyUI verifyWebSigninIsVisible:YES];
+  [[EarlGrey
+      selectElementWithMatcher:chrome_test_util::WebSigninSkipButtonMatcher()]
+      performAction:grey_tap()];
+  [SigninEarlGreyUI verifyWebSigninIsVisible:NO];
+  GREYAssertEqual(
+      kDefaultWebSignInDismissalCount,
+      [ChromeEarlGrey userIntegerPref:prefs::kSigninWebSignDismissalCount],
+      @"Dismissal count should be increased to the max value");
+  // Asks for the web sign-in consistency that should not succeed.
+  [SigninEarlGreyAppInterface triggerConsistencyPromoSigninDialog];
+  [SigninEarlGreyUI verifyWebSigninIsVisible:NO];
+  GREYAssertEqual(
+      kDefaultWebSignInDismissalCount,
+      [ChromeEarlGrey userIntegerPref:prefs::kSigninWebSignDismissalCount],
+      @"Dismissal count should be at the max value");
+}
+
 @end
diff --git a/ios/chrome/browser/ui/authentication/signin/signin_constants.h b/ios/chrome/browser/ui/authentication/signin/signin_constants.h
index 8f64dda..7b40ab4 100644
--- a/ios/chrome/browser/ui/authentication/signin/signin_constants.h
+++ b/ios/chrome/browser/ui/authentication/signin/signin_constants.h
@@ -78,4 +78,8 @@
   SigninTrustedVaultDialogIntentDegradedRecoverability,
 };
 
+// Max dismissal count for web sign-in consistency dialog (the dismissal value
+// is reset as soon as the user shows sign-in intent).
+extern const int kDefaultWebSignInDismissalCount;
+
 #endif  // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_SIGNIN_CONSTANTS_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/signin_constants.mm b/ios/chrome/browser/ui/authentication/signin/signin_constants.mm
index 1695922..4dc1983 100644
--- a/ios/chrome/browser/ui/authentication/signin/signin_constants.mm
+++ b/ios/chrome/browser/ui/authentication/signin/signin_constants.mm
@@ -22,3 +22,8 @@
     @"WebSigninContinueAsButtonAccessibilityIdentifier";
 NSString* const kWebSigninSkipButtonAccessibilityIdentifier =
     @"WebSigninSkipButtonAccessibilityIdentifier";
+
+const char* kWebSigninConsistencyConsecutiveActiveDismissalLimitParam =
+    "consecutive_active_dismissal_limit";
+
+const int kDefaultWebSignInDismissalCount = 3;
diff --git a/ios/chrome/browser/ui/authentication/signin/signin_coordinator.mm b/ios/chrome/browser/ui/authentication/signin/signin_coordinator.mm
index 47c5f01..fdf6472e 100644
--- a/ios/chrome/browser/ui/authentication/signin/signin_coordinator.mm
+++ b/ios/chrome/browser/ui/authentication/signin/signin_coordinator.mm
@@ -7,7 +7,6 @@
 #include "base/notreached.h"
 #import "components/pref_registry/pref_registry_syncable.h"
 #import "components/prefs/pref_service.h"
-#import "components/signin/public/base/account_consistency_method.h"
 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
 #import "ios/chrome/browser/main/browser.h"
 #import "ios/chrome/browser/pref_names.h"
@@ -19,11 +18,10 @@
 #import "ios/chrome/browser/ui/authentication/signin/trusted_vault_reauthentication/trusted_vault_reauthentication_coordinator.h"
 #import "ios/chrome/browser/ui/authentication/signin/user_signin/logging/first_run_signin_logger.h"
 #import "ios/chrome/browser/ui/authentication/signin/user_signin/logging/upgrade_signin_logger.h"
+#import "ios/chrome/browser/ui/authentication/signin/user_signin/logging/user_signin_logger.h"
 #import "ios/chrome/browser/ui/authentication/signin/user_signin/user_signin_constants.h"
 #import "ios/chrome/browser/ui/authentication/signin/user_signin/user_signin_coordinator.h"
 #import "ios/chrome/browser/ui/ui_feature_flags.h"
-#import "ios/public/provider/chrome/browser/chrome_browser_provider.h"
-#import "ios/public/provider/chrome/browser/signin/chrome_identity_service.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
@@ -32,17 +30,6 @@
 using signin_metrics::AccessPoint;
 using signin_metrics::PromoAction;
 
-namespace {
-
-// Parameter for web signin dismissal count.
-// This parameter is releated to kMICEWebSignIn feature.
-const char* kConsecutiveActiveDismissalLimitParam =
-    "consecutive_active_dismissal_limit";
-// Default web sign-in dismissal count.
-constexpr int kDefaultSignInWebSignInDismissalCount = 3;
-
-}  // namespace
-
 @implementation SigninCoordinator
 
 + (void)registerBrowserStatePrefs:(user_prefs::PrefRegistrySyncable*)registry {
@@ -183,11 +170,9 @@
             SUPPRESSED_SIGNIN_NOT_ALLOWED);
     return nil;
   }
-  const int maxDismissalCount = base::GetFieldTrialParamByFeatureAsInt(
-      signin::kMICEWebSignIn, kConsecutiveActiveDismissalLimitParam,
-      kDefaultSignInWebSignInDismissalCount);
-  if (userPrefService->GetInteger(prefs::kSigninWebSignDismissalCount) >=
-      maxDismissalCount) {
+  const int currentDismissalCount =
+      userPrefService->GetInteger(prefs::kSigninWebSignDismissalCount);
+  if (currentDismissalCount >= kDefaultWebSignInDismissalCount) {
     RecordConsistencyPromoUserAction(
         signin_metrics::AccountConsistencyPromoAction::
             SUPPRESSED_CONSECUTIVE_DISMISSALS);
diff --git a/ios/chrome/browser/ui/authentication/signin_earl_grey_ui.h b/ios/chrome/browser/ui/authentication/signin_earl_grey_ui.h
index 5588a1c..f6f93e39 100644
--- a/ios/chrome/browser/ui/authentication/signin_earl_grey_ui.h
+++ b/ios/chrome/browser/ui/authentication/signin_earl_grey_ui.h
@@ -52,10 +52,6 @@
 // This method should be used only if SimplifySignOutIOS is turned on.
 + (void)signOutWithConfirmationChoice:(SignOutConfirmationChoice)confirmation;
 
-// Taps on the settings link in the sign-in view. The sign-in view has to be
-// opened before calling this method.
-+ (void)tapSettingsLink;
-
 // Taps the sign in confirmation page, scrolls first to make the OK button
 // visible on short devices (e.g. iPhone 5s).
 + (void)tapSigninConfirmationDialog;
diff --git a/ios/chrome/browser/ui/authentication/signin_earl_grey_ui.mm b/ios/chrome/browser/ui/authentication/signin_earl_grey_ui.mm
index 34fc770..52a59dd 100644
--- a/ios/chrome/browser/ui/authentication/signin_earl_grey_ui.mm
+++ b/ios/chrome/browser/ui/authentication/signin_earl_grey_ui.mm
@@ -127,14 +127,6 @@
       confirmationLabelID:confirmationLabelID];
 }
 
-+ (void)tapSettingsLink {
-  [[EarlGrey
-      selectElementWithMatcher:grey_allOf(grey_accessibilityLabel(@"settings"),
-                                          grey_accessibilityTrait(
-                                              UIAccessibilityTraitLink),
-                                          nil)] performAction:grey_tap()];
-}
-
 + (void)tapSigninConfirmationDialog {
   // To confirm the dialog, the scroll view content has to be scrolled to the
   // bottom to transform "MORE" button into the validation button.
diff --git a/ios/chrome/browser/ui/autofill/autofill_app_interface.mm b/ios/chrome/browser/ui/autofill/autofill_app_interface.mm
index fb3f86d..4f389af 100644
--- a/ios/chrome/browser/ui/autofill/autofill_app_interface.mm
+++ b/ios/chrome/browser/ui/autofill/autofill_app_interface.mm
@@ -17,8 +17,8 @@
 #import "components/autofill/ios/browser/credit_card_save_manager_test_observer_bridge.h"
 #include "components/autofill/ios/browser/ios_test_event_waiter.h"
 #include "components/keyed_service/core/service_access_type.h"
-#include "components/password_manager/core/browser/password_store.h"
 #include "components/password_manager/core/browser/password_store_consumer.h"
+#include "components/password_manager/core/browser/password_store_interface.h"
 #include "ios/chrome/browser/application_context.h"
 #include "ios/chrome/browser/autofill/personal_data_manager_factory.h"
 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
@@ -41,13 +41,13 @@
 const char16_t kExamplePassword[] = u"concrete password";
 
 // Gets the current password store.
-scoped_refptr<password_manager::PasswordStore> GetPasswordStore() {
+scoped_refptr<password_manager::PasswordStoreInterface> GetPasswordStore() {
   // ServiceAccessType governs behaviour in Incognito: only modifications with
   // EXPLICIT_ACCESS, which correspond to user's explicit gesture, succeed.
   // This test does not deal with Incognito, and should not run in Incognito
   // context. Therefore IMPLICIT_ACCESS is used to let the test fail if in
   // Incognito context.
-  return IOSChromePasswordStoreFactory::GetForBrowserState(
+  return IOSChromePasswordStoreFactory::GetInterfaceForBrowserState(
       chrome_test_util::GetOriginalBrowserState(),
       ServiceAccessType::IMPLICIT_ACCESS);
 }
diff --git a/ios/chrome/browser/ui/bookmarks/bookmarks_folders_egtest.mm b/ios/chrome/browser/ui/bookmarks/bookmarks_folders_egtest.mm
index 507c7372c..f1d4194 100644
--- a/ios/chrome/browser/ui/bookmarks/bookmarks_folders_egtest.mm
+++ b/ios/chrome/browser/ui/bookmarks/bookmarks_folders_egtest.mm
@@ -183,7 +183,9 @@
   // Swipe action to try to delete the newly created folder while its name its
   // being edited.
   [[EarlGrey
-      selectElementWithMatcher:TappableBookmarkNodeWithLabel(@"New Folder")]
+      selectElementWithMatcher:grey_allOf(grey_accessibilityID(@"New Folder"),
+                                          grey_minimumVisiblePercent(0.7),
+                                          nil)]
       performAction:grey_swipeFastInDirection(kGREYDirectionLeft)];
 
   // Verify the delete confirmation button doesn't show up.
diff --git a/ios/chrome/browser/ui/settings/google_services/google_services_settings_coordinator.mm b/ios/chrome/browser/ui/settings/google_services/google_services_settings_coordinator.mm
index e3f0b861c..429909d 100644
--- a/ios/chrome/browser/ui/settings/google_services/google_services_settings_coordinator.mm
+++ b/ios/chrome/browser/ui/settings/google_services/google_services_settings_coordinator.mm
@@ -15,6 +15,7 @@
 #import "ios/chrome/browser/main/browser.h"
 #include "ios/chrome/browser/signin/authentication_service.h"
 #import "ios/chrome/browser/signin/authentication_service_factory.h"
+#import "ios/chrome/browser/signin/chrome_account_manager_service_factory.h"
 #include "ios/chrome/browser/signin/identity_manager_factory.h"
 #include "ios/chrome/browser/sync/sync_service_factory.h"
 #include "ios/chrome/browser/sync/sync_setup_service.h"
@@ -117,6 +118,9 @@
       initWithUserPrefService:self.browser->GetBrowserState()->GetPrefs()
              localPrefService:GetApplicationContext()->GetLocalState()
              syncSetupService:syncSetupService
+        accountManagerService:ChromeAccountManagerServiceFactory::
+                                  GetForBrowserState(
+                                      self.browser->GetBrowserState())
                          mode:self.mode];
   self.mediator.consumer = viewController;
   self.mediator.authService = self.authService;
diff --git a/ios/chrome/browser/ui/settings/google_services/google_services_settings_mediator.h b/ios/chrome/browser/ui/settings/google_services/google_services_settings_mediator.h
index 1a9f551..83203d5 100644
--- a/ios/chrome/browser/ui/settings/google_services/google_services_settings_mediator.h
+++ b/ios/chrome/browser/ui/settings/google_services/google_services_settings_mediator.h
@@ -14,6 +14,7 @@
 #import "ios/chrome/browser/ui/settings/google_services/google_services_settings_view_controller_model_delegate.h"
 
 class AuthenticationService;
+class ChromeAccountManagerService;
 @protocol GoogleServicesSettingsCommandHandler;
 @class GoogleServicesSettingsViewController;
 class PrefService;
@@ -57,6 +58,8 @@
 - (instancetype)initWithUserPrefService:(PrefService*)userPrefService
                        localPrefService:(PrefService*)localPrefService
                        syncSetupService:(SyncSetupService*)syncSetupService
+                  accountManagerService:
+                      (ChromeAccountManagerService*)accountManagerService
                                    mode:(GoogleServicesSettingsMode)mode
     NS_DESIGNATED_INITIALIZER;
 
diff --git a/ios/chrome/browser/ui/settings/google_services/google_services_settings_mediator.mm b/ios/chrome/browser/ui/settings/google_services/google_services_settings_mediator.mm
index a372fe6..53ae010 100644
--- a/ios/chrome/browser/ui/settings/google_services/google_services_settings_mediator.mm
+++ b/ios/chrome/browser/ui/settings/google_services/google_services_settings_mediator.mm
@@ -20,7 +20,8 @@
 #include "ios/chrome/browser/pref_names.h"
 #import "ios/chrome/browser/signin/authentication_service.h"
 #import "ios/chrome/browser/signin/authentication_service_factory.h"
-#include "ios/chrome/browser/signin/chrome_identity_service_observer_bridge.h"
+#import "ios/chrome/browser/signin/chrome_account_manager_service.h"
+#import "ios/chrome/browser/signin/chrome_account_manager_service_observer_bridge.h"
 #include "ios/chrome/browser/sync/sync_observer_bridge.h"
 #import "ios/chrome/browser/ui/authentication/cells/table_view_account_item.h"
 #import "ios/chrome/browser/ui/authentication/resized_avatar_cache.h"
@@ -113,7 +114,7 @@
 
 @interface GoogleServicesSettingsMediator () <
     BooleanObserver,
-    ChromeIdentityServiceObserver,
+    ChromeAccountManagerServiceObserver,
     IdentityManagerObserverBridgeDelegate,
     SyncObserverModelBridge> {
   // Sync observer.
@@ -121,8 +122,9 @@
   // Identity manager observer.
   std::unique_ptr<signin::IdentityManagerObserverBridge>
       _identityManagerObserverBridge;
-  // Chrome identity observer.
-  std::unique_ptr<ChromeIdentityServiceObserverBridge> _identityServiceObserver;
+  // account manager observer.
+  std::unique_ptr<ChromeAccountManagerServiceObserverBridge>
+      _accountManagerServiceObserver;
 }
 
 // Returns YES if the user is authenticated.
@@ -191,6 +193,9 @@
 // policies.
 @property(nonatomic, assign, readonly) PrefService* localPrefService;
 
+// Account manager service to retrieve Chrome identities.
+@property(nonatomic, assign) ChromeAccountManagerService* accountManagerService;
+
 @end
 
 @implementation GoogleServicesSettingsMediator
@@ -200,6 +205,8 @@
 - (instancetype)initWithUserPrefService:(PrefService*)userPrefService
                        localPrefService:(PrefService*)localPrefService
                        syncSetupService:(SyncSetupService*)syncSetupService
+                  accountManagerService:
+                      (ChromeAccountManagerService*)accountManagerService
                                    mode:(GoogleServicesSettingsMode)mode {
   self = [super init];
   if (self) {
@@ -237,6 +244,7 @@
                                 kUrlKeyedAnonymizedDataCollectionEnabled];
     _anonymizedDataCollectionPreference.observer = self;
     _resizedAvatarCache = [[ResizedAvatarCache alloc] init];
+    _accountManagerService = accountManagerService;
   }
   return self;
 }
@@ -978,7 +986,9 @@
       new signin::IdentityManagerObserverBridge(self.identityManager, self));
   DCHECK(self.syncService);
   _syncObserver.reset(new SyncObserverBridge(self, self.syncService));
-  _identityServiceObserver.reset(new ChromeIdentityServiceObserverBridge(self));
+  _accountManagerServiceObserver.reset(
+      new ChromeAccountManagerServiceObserverBridge(
+          self, self.accountManagerService));
 }
 
 #pragma mark - GoogleServicesSettingsServiceDelegate
@@ -1149,15 +1159,11 @@
   [self updateNonPersonalizedSectionWithNotification:YES];
 }
 
-#pragma mark - ChromeIdentityServiceObserver
+#pragma mark - ChromeAccountManagerServiceObserver
 
-- (void)profileUpdate:(ChromeIdentity*)identity {
+- (void)identityChanged:(ChromeIdentity*)identity {
   [self updateIdentitySectionAndNotifyConsumer];
   [self updateLeakCheckItemAndReload];
 }
 
-- (void)chromeIdentityServiceWillBeDestroyed {
-  _identityServiceObserver.reset();
-}
-
 @end
diff --git a/ios/chrome/browser/ui/settings/password/passwords_settings_app_interface.mm b/ios/chrome/browser/ui/settings/password/passwords_settings_app_interface.mm
index d093120..02147e8 100644
--- a/ios/chrome/browser/ui/settings/password/passwords_settings_app_interface.mm
+++ b/ios/chrome/browser/ui/settings/password/passwords_settings_app_interface.mm
@@ -12,8 +12,8 @@
 #import "base/test/ios/wait_util.h"
 #include "components/keyed_service/core/service_access_type.h"
 #include "components/password_manager/core/browser/password_form.h"
-#include "components/password_manager/core/browser/password_store.h"
 #include "components/password_manager/core/browser/password_store_consumer.h"
+#include "components/password_manager/core/browser/password_store_interface.h"
 #include "components/password_manager/core/common/password_manager_pref_names.h"
 #include "components/prefs/pref_service.h"
 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
@@ -33,13 +33,13 @@
 
 namespace {
 
-scoped_refptr<password_manager::PasswordStore> GetPasswordStore() {
+scoped_refptr<password_manager::PasswordStoreInterface> GetPasswordStore() {
   // ServiceAccessType governs behaviour in Incognito: only modifications with
   // EXPLICIT_ACCESS, which correspond to user's explicit gesture, succeed.
   // This test does not deal with Incognito, and should not run in Incognito
   // context. Therefore IMPLICIT_ACCESS is used to let the test fail if in
   // Incognito context.
-  return IOSChromePasswordStoreFactory::GetForBrowserState(
+  return IOSChromePasswordStoreFactory::GetInterfaceForBrowserState(
       chrome_test_util::GetOriginalBrowserState(),
       ServiceAccessType::IMPLICIT_ACCESS);
 }
diff --git a/ios/chrome/browser/ui/settings/settings_table_view_controller.mm b/ios/chrome/browser/ui/settings/settings_table_view_controller.mm
index 399849fd..04d0da5 100644
--- a/ios/chrome/browser/ui/settings/settings_table_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/settings_table_view_controller.mm
@@ -16,7 +16,6 @@
 #include "components/autofill/core/common/autofill_prefs.h"
 #include "components/keyed_service/core/service_access_type.h"
 #include "components/password_manager/core/browser/manage_passwords_referrer.h"
-#include "components/password_manager/core/browser/password_store.h"
 #include "components/password_manager/core/common/password_manager_pref_names.h"
 #import "components/prefs/ios/pref_observer_bridge.h"
 #include "components/prefs/pref_member.h"
@@ -1076,8 +1075,8 @@
     TableViewDetailIconCell* detailCell =
         base::mac::ObjCCastStrict<TableViewDetailIconCell>(cell);
     if (itemType == SettingsItemTypePasswords) {
-      scoped_refptr<password_manager::PasswordStore> passwordStore =
-          IOSChromePasswordStoreFactory::GetForBrowserState(
+      scoped_refptr<password_manager::PasswordStoreInterface> passwordStore =
+          IOSChromePasswordStoreFactory::GetInterfaceForBrowserState(
               _browserState, ServiceAccessType::EXPLICIT_ACCESS);
       if (!passwordStore) {
         // The password store factory returns a NULL password store if something
diff --git a/ios/chrome/test/earl_grey/chrome_earl_grey.mm b/ios/chrome/test/earl_grey/chrome_earl_grey.mm
index 4a02aef..75bbf81 100644
--- a/ios/chrome/test/earl_grey/chrome_earl_grey.mm
+++ b/ios/chrome/test/earl_grey/chrome_earl_grey.mm
@@ -355,11 +355,11 @@
   NSString* spec = base::SysUTF8ToNSString(URL.spec());
   [ChromeEarlGreyAppInterface startLoadingURL:spec];
   if (wait) {
+    [self waitForWebStateVisible];
     [self waitForPageToFinishLoading];
     EG_TEST_HELPER_ASSERT_TRUE(
         [ChromeEarlGreyAppInterface waitForWindowIDInjectionIfNeeded],
         @"WindowID failed to inject");
-    [self waitForWebStateVisible];
   }
 }
 
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1
index a4c6ec7d6..487c270f 100644
--- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@
-fe4ee959923c5bbf29d791ade8e38d7765d06460
\ No newline at end of file
+fc9d64973ee2fc57eefcff9154b7dd63ed819a02
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1
index 3bfbf586..21a0e26 100644
--- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@
-56e89deebcc0c9ffbf7c9b8ecbc05ec4b9da16b1
\ No newline at end of file
+5302527b99b6e2dd894ec355d0353b2c71638ae7
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.arm64.zip.sha1
index ce637dd..22003b7 100644
--- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.arm64.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@
-e3757f85ee97e8e1dc9245192a12e217cf8f8d4b
\ No newline at end of file
+4a58b70f3862da43d20d26e0456da8e72649fdb0
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.x64.zip.sha1
index 3603f1a23..43cd22e1 100644
--- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.x64.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@
-8fd742698b4bdfef14c595ff37afa8a479b3711a
\ No newline at end of file
+74cf751dbcc4477a6a2a65357a1843f66c1fe6b1
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1
index bc68e50..f8f76d8 100644
--- a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@
-c2a96d94579d1401326c2c54415d857f51a11d26
\ No newline at end of file
+bdd225b96137f7fa4daf57d07cc33f0d0fce1b7d
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1
index f40de24..fed6b538 100644
--- a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@
-ae9ef76f8cf16cdaa4ab82b5a8071f60cd3f53a6
\ No newline at end of file
+f92db6ffcfe256844f551baee90525ea370e0db2
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1
index 4688258..154c615 100644
--- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@
-9835f436c53f82a41942616558efdb82cd83315b
\ No newline at end of file
+4941817d54f1309129b9ad58c5ea47b86355fce6
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1
index 58281b5..f29bde5 100644
--- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@
-8d33563877efabd142c2fd01e4b058eb403a2292
\ No newline at end of file
+23295db59b05c974e2f5e51436d386b350532eba
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1
index 993525d..c12081a9 100644
--- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1
+++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@
-3ad68058d142d69a51a55743e783182c7c926541
\ No newline at end of file
+a071050eeb2d5ac0f7cadb96d60fc5a21c280957
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1
index 34072d5..f939e52b 100644
--- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1
+++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@
-d822d5902a68f2231340f512007131a8039a2bec
\ No newline at end of file
+7da5e8ee4059ff299fc3a2beeebaa0d50fb47850
\ No newline at end of file
diff --git a/media/gpu/chromeos/video_decoder_pipeline.cc b/media/gpu/chromeos/video_decoder_pipeline.cc
index e72d7c1..5eeaa29 100644
--- a/media/gpu/chromeos/video_decoder_pipeline.cc
+++ b/media/gpu/chromeos/video_decoder_pipeline.cc
@@ -242,11 +242,6 @@
     std::move(init_cb).Run(StatusCode::kDecoderUnsupportedConfig);
     return;
   }
-  if (config.profile() == VIDEO_CODEC_PROFILE_UNKNOWN) {
-    VLOGF(1) << "VideoCodecProfile is VIDEO_CODEC_PROFILE_UNKNOWN.";
-    std::move(init_cb).Run(StatusCode::kDecoderUnsupportedConfig);
-    return;
-  }
 #if BUILDFLAG(USE_CHROMEOS_PROTECTED_MEDIA)
   if (config.is_encrypted() && !cdm_context) {
     VLOGF(1) << "Encrypted streams require a CdmContext";
diff --git a/media/gpu/test/video_encoder/bitstream_file_writer.cc b/media/gpu/test/video_encoder/bitstream_file_writer.cc
index 620e40f..90b0b79 100644
--- a/media/gpu/test/video_encoder/bitstream_file_writer.cc
+++ b/media/gpu/test/video_encoder/bitstream_file_writer.cc
@@ -135,7 +135,7 @@
     const uint8_t spatial_idx = original_spatial_indices_[metadata.spatial_idx];
     if (spatial_idx > *spatial_layer_index_to_write_ ||
         (spatial_idx < *spatial_layer_index_to_write_ &&
-         metadata.referenced_by_upper_spatial_layers)) {
+         !metadata.referenced_by_upper_spatial_layers)) {
       // Skip |bitstream| because it contains a frame not needed by desired
       // spatial layers.
       return;
diff --git a/media/gpu/v4l2/v4l2_video_decoder.cc b/media/gpu/v4l2/v4l2_video_decoder.cc
index 34ea14e..9125d5d7 100644
--- a/media/gpu/v4l2/v4l2_video_decoder.cc
+++ b/media/gpu/v4l2/v4l2_video_decoder.cc
@@ -8,7 +8,6 @@
 
 #include "base/bind.h"
 #include "base/callback_helpers.h"
-#include "base/containers/contains.h"
 #include "base/logging.h"
 #include "base/memory/ptr_util.h"
 #include "base/task/post_task.h"
@@ -167,7 +166,8 @@
 
     device_ = V4L2Device::Create();
     if (!device_) {
-      SetErrorState("failed to create V4L2 device");
+      VLOGF(1) << "Failed to create V4L2 device.";
+      SetState(State::kError);
       std::move(init_cb).Run(StatusCode::kV4l2NoDevice);
       return;
     }
@@ -180,9 +180,15 @@
   DCHECK(!output_queue_);
 
   profile_ = config.profile();
-  DCHECK_NE(profile_, VIDEO_CODEC_PROFILE_UNKNOWN);
   aspect_ratio_ = config.aspect_ratio();
 
+  if (profile_ == VIDEO_CODEC_PROFILE_UNKNOWN) {
+    VLOGF(1) << "Unknown profile.";
+    SetState(State::kError);
+    std::move(init_cb).Run(StatusCode::kV4l2NoDecoder);
+    return;
+  }
+
   // Call init_cb
   output_cb_ = std::move(output_cb);
   SetState(State::kInitialized);
@@ -222,10 +228,8 @@
 
   can_use_decoder_ = num_instances_.Increment() < kMaxNumOfInstances;
   if (!can_use_decoder_) {
-    SetErrorState(
-        base::StringPrintf("failed to initialize backend, reached maximum "
-                           "number of decoder instances(%d)",
-                           kMaxNumOfInstances));
+    VLOGF(1) << "Reached maximum number of decoder instances ("
+             << kMaxNumOfInstances << ")";
     return StatusCode::kDecoderCreationFailed;
   }
 
@@ -249,8 +253,7 @@
   if (!api_and_format.has_value()) {
     num_instances_.Decrement();
     can_use_decoder_ = false;
-    SetErrorState(base::StringPrintf("no V4L2 API found for profile %s",
-                                     GetProfileName(profile_).c_str()));
+    VLOGF(1) << "No V4L2 API found for profile: " << GetProfileName(profile_);
     return StatusCode::kV4l2NoDecoder;
   }
 
@@ -258,21 +261,16 @@
   const __u32 kCapsRequired = V4L2_CAP_VIDEO_M2M_MPLANE | V4L2_CAP_STREAMING;
   if (device_->Ioctl(VIDIOC_QUERYCAP, &caps) ||
       (caps.capabilities & kCapsRequired) != kCapsRequired) {
-    SetErrorState(
-        base::StringPrintf("capability check failed, needed 0x%x, got 0x%x",
-                           kCapsRequired, caps.capabilities));
+    VLOGF(1) << "ioctl() failed: VIDIOC_QUERYCAP, "
+             << "caps check failed: 0x" << std::hex << caps.capabilities;
     return StatusCode::kV4l2FailedFileCapabilitiesCheck;
   }
 
   // Create Input/Output V4L2Queue
   input_queue_ = device_->GetQueue(V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE);
-  if (!input_queue_) {
-    SetErrorState("failed to create |input_queue_|");
-    return StatusCode::kV4l2FailedResourceAllocation;
-  }
   output_queue_ = device_->GetQueue(V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE);
-  if (!output_queue_) {
-    SetErrorState("failed to create |output_queue_|");
+  if (!input_queue_ || !output_queue_) {
+    VLOGF(1) << "Failed to create V4L2 queue.";
     return StatusCode::kV4l2FailedResourceAllocation;
   }
 
@@ -293,27 +291,24 @@
   }
 
   if (!backend_->Initialize()) {
-    SetErrorState("failed to initialize backend");
+    VLOGF(1) << "Failed to initialize backend.";
     return StatusCode::kV4l2FailedResourceAllocation;
   }
 
   if (!SetupInputFormat(input_format_fourcc)) {
-    SetErrorState(
-        base::StringPrintf("Failed to setup input format (%s)",
-                           FourccToString(input_format_fourcc).c_str()));
+    VLOGF(1) << "Failed to setup input format.";
     return StatusCode::kV4l2BadFormat;
   }
 
   if (input_queue_->AllocateBuffers(kNumInputBuffers, V4L2_MEMORY_MMAP) == 0) {
-    SetErrorState(base::StringPrintf("failed to allocate %d input buffers",
-                                     kNumInputBuffers));
+    VLOGF(1) << "Failed to allocate input buffer.";
     return StatusCode::kV4l2FailedResourceAllocation;
   }
 
   // Start streaming input queue and polling. This is required for the stateful
   // decoder, and doesn't hurt for the stateless one.
   if (!StartStreamV4L2Queue(false)) {
-    SetErrorState("failed to start streaming");
+    VLOGF(1) << "Failed to start streaming.";
     return StatusCode::kV4L2FailedToStartStreamQueue;
   }
 
@@ -328,8 +323,9 @@
   // Check if the format is supported.
   std::vector<uint32_t> formats = device_->EnumerateSupportedPixelformats(
       V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE);
-  if (!base::Contains(formats, input_format_fourcc)) {
-    DVLOGF(3) << "Input fourcc " << FourccToString(input_format_fourcc)
+  if (std::find(formats.begin(), formats.end(), input_format_fourcc) ==
+      formats.end()) {
+    DVLOGF(3) << "Input fourcc " << input_format_fourcc
               << " not supported by device.";
     return false;
   }
@@ -508,6 +504,7 @@
   if (state_ == State::kInitialized) {
     const StatusCode status = InitializeBackend();
     if (status != StatusCode::kOk) {
+      SetState(State::kError);
       std::move(trampoline_decode_cb).Run(status);
       return;
     }
@@ -522,20 +519,18 @@
   DCHECK_CALLED_ON_VALID_SEQUENCE(decoder_sequence_checker_);
   DVLOGF(3);
 
-  if (!input_queue_->Streamon()) {
-    SetErrorState("failed to streamon V4L2 input queue");
-    return false;
-  }
-  if (start_output_queue && !output_queue_->Streamon()) {
-    SetErrorState("failed to streamon V4L2 output queue");
+  if (!input_queue_->Streamon() ||
+      (start_output_queue && !output_queue_->Streamon())) {
+    VLOGF(1) << "Failed to streamon V4L2 queue.";
+    SetState(State::kError);
     return false;
   }
 
   if (!device_->StartPolling(
           base::BindRepeating(&V4L2VideoDecoder::ServiceDeviceTask, weak_this_),
-          base::BindRepeating(&V4L2VideoDecoder::SetErrorState, weak_this_,
-                              "V4L2DevicePoller error"))) {
-    SetErrorState("failed to start polling V4L2Device");
+          base::BindRepeating(&V4L2VideoDecoder::SetState, weak_this_,
+                              State::kError))) {
+    SetState(State::kError);
     return false;
   }
 
@@ -547,7 +542,7 @@
   DVLOGF(3);
 
   if (!device_->StopPolling()) {
-    SetErrorState("failed to stop polling V4L2Device");
+    SetState(State::kError);
     return false;
   }
 
@@ -628,18 +623,18 @@
     return;
 
   if (!output_queue_->DeallocateBuffers()) {
-    SetErrorState("failed to deallocate buffers");
+    SetState(State::kError);
     return;
   }
 
   if (!backend_->ApplyResolution(pic_size, visible_rect, num_output_frames_)) {
-    SetErrorState("failed to apply resolution");
+    SetState(State::kError);
     return;
   }
 
   if (!SetupOutputFormat(pic_size, visible_rect)) {
-    // TODO(b/158716673): improve error reporting from SetupOutputFormat().
-    SetErrorState("failed to setup output format");
+    VLOGF(1) << "Failed to setup output format.";
+    SetState(State::kError);
     return;
   }
 
@@ -649,27 +644,20 @@
       (type == V4L2_MEMORY_DMABUF) ? VIDEO_MAX_FRAME : num_output_frames_;
 
   if (output_queue_->AllocateBuffers(v4l2_num_buffers, type) == 0) {
-    SetErrorState(
-        base::StringPrintf("failed to allocate %d |output_queue_| buffers",
-                           v4l2_num_buffers)
-            .c_str());
+    VLOGF(1) << "Failed to request output buffers.";
+    SetState(State::kError);
     return;
   }
-  const auto actual_v4l2_num_buffers = output_queue_->AllocatedBuffersCount();
-  // TODO(mcasas): Is this comparison right or should we
-  // s/num_output_frames_/v4l2_num_buffers/?
-  if (actual_v4l2_num_buffers < num_output_frames_) {
-    SetErrorState(
-        base::StringPrintf(
-            "allocated num buffers (%d) is less than the expected (%d)",
-            actual_v4l2_num_buffers, num_output_frames_)
-            .c_str());
+  if (output_queue_->AllocatedBuffersCount() < num_output_frames_) {
+    VLOGF(1) << "Could not allocate requested number of output buffers.";
+    SetState(State::kError);
     return;
   }
 
-  // StartStreamV4L2Queue() already calls SetErrorState(...) inside.
-  if (!StartStreamV4L2Queue(true))
+  if (!StartStreamV4L2Queue(true)) {
+    SetState(State::kError);
     return;
+  }
 
   // Now notify |backend_| that changing resolution is done successfully.
   // Note: |backend_| is owned by this, using base::Unretained() is safe.
@@ -698,7 +686,7 @@
 
     std::tie(success, dequeued_buffer) = output_queue_->DequeueBuffer();
     if (!success) {
-      SetErrorState("failed to dequeue buffer from |output_queue_|");
+      SetState(State::kError);
       return;
     }
     if (!dequeued_buffer)
@@ -713,7 +701,7 @@
 
     std::tie(success, dequeued_buffer) = input_queue_->DequeueBuffer();
     if (!success) {
-      SetErrorState("failed to dequeue buffer from |input_queue_|");
+      SetState(State::kError);
       return;
     }
     if (!dequeued_buffer)
@@ -763,8 +751,7 @@
   if (state_ == new_state)
     return;
   if (state_ == State::kError) {
-    DVLOGF(3)
-        << "V4L2VideoDecoder is in State::kError, ignoring state transition.";
+    DVLOGF(3) << "Already in kError state.";
     return;
   }
 
@@ -808,18 +795,11 @@
   return;
 }
 
-void V4L2VideoDecoder::SetErrorState(std::string message) {
-  LOG(ERROR) << message;
-  MEDIA_LOG(ERROR, media_log_) << "V4L2VideoDecoder: " << message;
-  SetState(State::kError);
-}
-
 void V4L2VideoDecoder::OnBackendError() {
   DCHECK_CALLED_ON_VALID_SEQUENCE(decoder_sequence_checker_);
   DVLOGF(2);
 
-  // TODO(b/158716673): improve error reporting from backends.
-  SetErrorState("V4L2VideoDecoderBackend signalled an error");
+  SetState(State::kError);
 }
 
 bool V4L2VideoDecoder::IsDecoding() const {
diff --git a/media/gpu/v4l2/v4l2_video_decoder.h b/media/gpu/v4l2/v4l2_video_decoder.h
index 4f0584e..784816e 100644
--- a/media/gpu/v4l2/v4l2_video_decoder.h
+++ b/media/gpu/v4l2/v4l2_video_decoder.h
@@ -145,13 +145,9 @@
                                 const gfx::Rect& visible_rect,
                                 const size_t num_output_frames);
 
-  // Change the |state_| and check the state transition is valid.
+  // Change the state and check the state transition is valid.
   void SetState(State new_state);
 
-  // Tell SetState() to change the |state_| to kError and send |message| to
-  // MediaLog and to LOG(ERROR).
-  void SetErrorState(std::string message);
-
   // Continue backend initialization. Decoder will not take a hardware context
   // until InitializeBackend() is called.
   StatusCode InitializeBackend();
diff --git a/media/video/gpu_memory_buffer_video_frame_pool.cc b/media/video/gpu_memory_buffer_video_frame_pool.cc
index 71a0372d..a7835794 100644
--- a/media/video/gpu_memory_buffer_video_frame_pool.cc
+++ b/media/video/gpu_memory_buffer_video_frame_pool.cc
@@ -48,12 +48,17 @@
 
 namespace media {
 
-bool GpuMemoryBufferVideoFramePool::MultiPlaneVideoSharedImagesEnabled() {
+const base::Feature kMultiPlaneSoftwareVideoSharedImages {
+  "MultiPlaneSoftwareVideoSharedImages",
 #if defined(OS_MAC)
-  return true;
+      base::FEATURE_ENABLED_BY_DEFAULT
 #else
-  return false;
+      base::FEATURE_DISABLED_BY_DEFAULT
 #endif
+};
+
+bool GpuMemoryBufferVideoFramePool::MultiPlaneVideoSharedImagesEnabled() {
+  return base::FeatureList::IsEnabled(kMultiPlaneSoftwareVideoSharedImages);
 }
 
 // Implementation of a pool of GpuMemoryBuffers used to back VideoFrames.
diff --git a/net/base/cache_type.h b/net/base/cache_type.h
index 3f2989b..afb12b4 100644
--- a/net/base/cache_type.h
+++ b/net/base/cache_type.h
@@ -19,8 +19,11 @@
   PNACL_CACHE,                // Backing store the PNaCl translation cache
   GENERATED_BYTE_CODE_CACHE,  // Backing store for renderer generated data like
                               // bytecode for JavaScript.
-  GENERATED_NATIVE_CODE_CACHE,  // Backing store for renderer generated data
-                                // like native code for WebAssembly.
+  GENERATED_NATIVE_CODE_CACHE,      // Backing store for renderer generated data
+                                    // like native code for WebAssembly.
+  GENERATED_WEBUI_BYTE_CODE_CACHE,  // Backing store for renderer generated data
+                                    // like bytecode for JavaScript from WebUI
+                                    // pages.
 };
 
 // The types of disk cache backend, only used at backend instantiation.
diff --git a/net/base/features.cc b/net/base/features.cc
index c4dcfe0..8ba810c9 100644
--- a/net/base/features.cc
+++ b/net/base/features.cc
@@ -259,5 +259,8 @@
 const base::Feature kSamePartyCookiesConsideredFirstParty{
     "SamePartyCookiesConsideredFirstParty", base::FEATURE_DISABLED_BY_DEFAULT};
 
+const base::Feature kPartitionedCookies{"PartitionedCookies",
+                                        base::FEATURE_DISABLED_BY_DEFAULT};
+
 }  // namespace features
 }  // namespace net
diff --git a/net/base/features.h b/net/base/features.h
index 58d2013..78287bc 100644
--- a/net/base/features.h
+++ b/net/base/features.h
@@ -381,6 +381,12 @@
 // privacy mode is disabled in same-party contexts.)
 NET_EXPORT extern const base::Feature kSamePartyCookiesConsideredFirstParty;
 
+// When enabled, sites can opt-in to having their cookies partitioned by
+// top-level site with the Partitioned attribute. Partitioned cookies will only
+// be sent when the browser is on the same top-level site that it was on when
+// the cookie was set.
+NET_EXPORT extern const base::Feature kPartitionedCookies;
+
 }  // namespace features
 }  // namespace net
 
diff --git a/net/base/network_change_notifier_fuchsia_unittest.cc b/net/base/network_change_notifier_fuchsia_unittest.cc
index e8ac281..893bfa7 100644
--- a/net/base/network_change_notifier_fuchsia_unittest.cc
+++ b/net/base/network_change_notifier_fuchsia_unittest.cc
@@ -78,9 +78,9 @@
 
 fuchsia::net::interfaces::Properties DefaultInterfaceProperties(
     fuchsia::hardware::network::DeviceClass device_class =
-        fuchsia::hardware::network::DeviceClass::UNKNOWN) {
-  // For most tests a live interface with an IPv4 address and an unknown class
-  // is sufficient.
+        fuchsia::hardware::network::DeviceClass::ETHERNET) {
+  // For most tests a live interface with an IPv4 address and ethernet class is
+  // sufficient.
   fuchsia::net::interfaces::Properties interface;
   interface.set_id(kDefaultInterfaceId);
   interface.set_online(true);
@@ -94,15 +94,15 @@
 }
 
 fuchsia::net::interfaces::Properties SecondaryInterfaceProperties() {
-  // For most tests a live interface with an IPv4 address and an unknown class
-  // is sufficient.
+  // For most tests a live interface with an IPv4 address and ethernet class is
+  // sufficient.
   fuchsia::net::interfaces::Properties interface;
   interface.set_id(kSecondaryInterfaceId);
   interface.set_online(true);
   interface.set_has_default_ipv4_route(false);
   interface.set_has_default_ipv6_route(false);
   interface.set_device_class(fuchsia::net::interfaces::DeviceClass::WithDevice(
-      fuchsia::hardware::network::DeviceClass::UNKNOWN));
+      fuchsia::hardware::network::DeviceClass::ETHERNET));
   interface.set_addresses(MakeSingleItemVec(
       InterfaceAddressFrom(kSecondaryIPv4Address, kSecondaryIPv4Prefix)));
   return interface;
@@ -434,7 +434,7 @@
   // Set a live interface with an IP address and create the notifier.
   watcher_.SetInitial(DefaultInterfaceProperties());
   CreateNotifier();
-  EXPECT_EQ(NetworkChangeNotifier::ConnectionType::CONNECTION_UNKNOWN,
+  EXPECT_EQ(NetworkChangeNotifier::ConnectionType::CONNECTION_ETHERNET,
             notifier_->GetCurrentConnectionType());
   // Push an event with no side-effects.
   watcher_.PushEvent(MakeChangeEvent(kDefaultInterfaceId, [](auto*) {}));
@@ -477,7 +477,7 @@
 TEST_F(NetworkChangeNotifierFuchsiaTest, IpChange) {
   watcher_.SetInitial(DefaultInterfaceProperties());
   CreateNotifier();
-  EXPECT_EQ(NetworkChangeNotifier::ConnectionType::CONNECTION_UNKNOWN,
+  EXPECT_EQ(NetworkChangeNotifier::ConnectionType::CONNECTION_ETHERNET,
             notifier_->GetCurrentConnectionType());
 
   watcher_.PushEvent(MakeChangeEvent(
@@ -496,7 +496,7 @@
       InterfaceAddressFrom(kDefaultIPv6Address, kDefaultIPv6Prefix)));
   watcher_.SetInitial(std::move(props));
   CreateNotifier();
-  EXPECT_EQ(NetworkChangeNotifier::ConnectionType::CONNECTION_UNKNOWN,
+  EXPECT_EQ(NetworkChangeNotifier::ConnectionType::CONNECTION_ETHERNET,
             notifier_->GetCurrentConnectionType());
 
   watcher_.PushEvent(MakeChangeEvent(
@@ -516,7 +516,7 @@
 
   watcher_.SetInitial(std::move(props));
   CreateNotifier();
-  EXPECT_EQ(NetworkChangeNotifier::ConnectionType::CONNECTION_UNKNOWN,
+  EXPECT_EQ(NetworkChangeNotifier::ConnectionType::CONNECTION_ETHERNET,
             notifier_->GetCurrentConnectionType());
 
   watcher_.PushEvent(MakeChangeEvent(
@@ -536,7 +536,7 @@
 TEST_F(NetworkChangeNotifierFuchsiaTest, Ipv6AdditionalIpChange) {
   watcher_.SetInitial(DefaultInterfaceProperties());
   CreateNotifier();
-  EXPECT_EQ(NetworkChangeNotifier::ConnectionType::CONNECTION_UNKNOWN,
+  EXPECT_EQ(NetworkChangeNotifier::ConnectionType::CONNECTION_ETHERNET,
             notifier_->GetCurrentConnectionType());
 
   watcher_.PushEvent(MakeChangeEvent(
@@ -556,7 +556,7 @@
 TEST_F(NetworkChangeNotifierFuchsiaTest, InterfaceDown) {
   watcher_.SetInitial(DefaultInterfaceProperties());
   CreateNotifier();
-  EXPECT_EQ(NetworkChangeNotifier::ConnectionType::CONNECTION_UNKNOWN,
+  EXPECT_EQ(NetworkChangeNotifier::ConnectionType::CONNECTION_ETHERNET,
             notifier_->GetCurrentConnectionType());
 
   watcher_.PushEvent(MakeChangeEvent(
@@ -583,14 +583,14 @@
       }));
 
   EXPECT_TRUE(type_observer_->RunAndExpectConnectionTypes(
-      {NetworkChangeNotifier::ConnectionType::CONNECTION_UNKNOWN}));
+      {NetworkChangeNotifier::ConnectionType::CONNECTION_ETHERNET}));
   EXPECT_TRUE(ip_observer_->RunAndExpectCallCount(1));
 }
 
 TEST_F(NetworkChangeNotifierFuchsiaTest, InterfaceDeleted) {
   watcher_.SetInitial(DefaultInterfaceProperties());
   CreateNotifier();
-  EXPECT_EQ(NetworkChangeNotifier::ConnectionType::CONNECTION_UNKNOWN,
+  EXPECT_EQ(NetworkChangeNotifier::ConnectionType::CONNECTION_ETHERNET,
             notifier_->GetCurrentConnectionType());
 
   watcher_.PushEvent(
diff --git a/net/disk_cache/blockfile/histogram_macros.h b/net/disk_cache/blockfile/histogram_macros.h
index a5de85cc..f709e2d0 100644
--- a/net/disk_cache/blockfile/histogram_macros.h
+++ b/net/disk_cache/blockfile/histogram_macros.h
@@ -104,6 +104,7 @@
         break;                                                       \
       case net::GENERATED_BYTE_CODE_CACHE:                           \
       case net::GENERATED_NATIVE_CODE_CACHE:                         \
+      case net::GENERATED_WEBUI_BYTE_CODE_CACHE:                     \
         break;                                                       \
     }                                                                \
   }
diff --git a/net/disk_cache/cache_util.cc b/net/disk_cache/cache_util.cc
index 2a4c34d..c290381 100644
--- a/net/disk_cache/cache_util.cc
+++ b/net/disk_cache/cache_util.cc
@@ -179,17 +179,20 @@
        percent_relative_size) /
       100;
 
-  if (available < 0)
-    return static_cast<int32_t>(scaled_default_disk_cache_size);
+  int64_t preferred_cache_size = scaled_default_disk_cache_size;
 
-  int64_t preferred_cache_size = PreferredCacheSizeInternal(available);
+  // If available disk space is known, use it to compute a better value for
+  // preferred_cache_size.
+  if (available >= 0) {
+    preferred_cache_size = PreferredCacheSizeInternal(available);
 
-  // If the preferred cache size is less than 20% of the available space, scale
-  // for the field trial, capping the scaled value at 20% of the available
-  // space.
-  if (preferred_cache_size < available / 5) {
-    preferred_cache_size = std::min(
-        (preferred_cache_size * percent_relative_size) / 100, available / 5);
+    // If the preferred cache size is less than 20% of the available space,
+    // scale for the field trial, capping the scaled value at 20% of the
+    // available space.
+    if (preferred_cache_size < available / 5) {
+      preferred_cache_size = std::min(
+          (preferred_cache_size * percent_relative_size) / 100, available / 5);
+    }
   }
 
   // Limit cache size to somewhat less than kint32max to avoid potential
@@ -204,6 +207,9 @@
   // Make the size limit 50% larger in that case.
   if (type == net::GENERATED_NATIVE_CODE_CACHE) {
     size_limit = (size_limit / 2) * 3;
+  } else if (type == net::GENERATED_WEBUI_BYTE_CODE_CACHE) {
+    size_limit =
+        std::min(size_limit, static_cast<int64_t>(kMaxWebUICodeCacheSize));
   }
 
   DCHECK_LT(size_limit, std::numeric_limits<int32_t>::max());
diff --git a/net/disk_cache/cache_util_unittest.cc b/net/disk_cache/cache_util_unittest.cc
index 7f8df01e..39edcbe 100644
--- a/net/disk_cache/cache_util_unittest.cc
+++ b/net/disk_cache/cache_util_unittest.cc
@@ -151,6 +151,15 @@
     EXPECT_EQ(test_case.expected_without_trial,
               PreferredCacheSize(test_case.available))
         << test_case.available;
+
+    // Preferred size for WebUI code cache matches expected_without_trial but
+    // should never be more than 5 MB.
+    int expected_webui_code_cache_size =
+        std::min(5 * 1024 * 1024, test_case.expected_without_trial);
+    EXPECT_EQ(expected_webui_code_cache_size,
+              PreferredCacheSize(test_case.available,
+                                 net::GENERATED_WEBUI_BYTE_CODE_CACHE))
+        << test_case.available;
   }
 
   // Check that the cache size cap is 50% higher for native code caches.
@@ -189,6 +198,15 @@
       EXPECT_EQ(test_case.expected_without_trial,
                 PreferredCacheSize(test_case.available,
                                    net::GENERATED_BYTE_CODE_CACHE));
+
+      // Preferred size for WebUI code cache is not scaled by the trial, and
+      // should never be more than 5 MB.
+      int expected_webui_code_cache_size =
+          std::min(5 * 1024 * 1024, test_case.expected_without_trial);
+      EXPECT_EQ(expected_webui_code_cache_size,
+                PreferredCacheSize(test_case.available,
+                                   net::GENERATED_WEBUI_BYTE_CODE_CACHE))
+          << test_case.available;
     }
 
     // Check that the cache size cap is 50% higher for native code caches but is
diff --git a/net/disk_cache/disk_cache.h b/net/disk_cache/disk_cache.h
index 4500dba..e15e891 100644
--- a/net/disk_cache/disk_cache.h
+++ b/net/disk_cache/disk_cache.h
@@ -551,6 +551,13 @@
   int available_len = 0;
 };
 
+// The maximum size of cache that can be created for type
+// GENERATED_WEBUI_BYTE_CODE_CACHE. There are only a handful of commonly
+// accessed WebUI pages, which can each cache 0.5 - 1.5 MB of code. There is no
+// point in having a very large WebUI code cache, even if lots of disk space is
+// available.
+constexpr int kMaxWebUICodeCacheSize = 5 * 1024 * 1024;
+
 }  // namespace disk_cache
 
 #endif  // NET_DISK_CACHE_DISK_CACHE_H_
diff --git a/net/disk_cache/simple/simple_backend_impl.cc b/net/disk_cache/simple/simple_backend_impl.cc
index 75ef840..d79a9cac 100644
--- a/net/disk_cache/simple/simple_backend_impl.cc
+++ b/net/disk_cache/simple/simple_backend_impl.cc
@@ -174,6 +174,14 @@
   }
 }
 
+SimpleEntryImpl::OperationsMode CacheTypeToOperationsMode(net::CacheType type) {
+  return (type == net::DISK_CACHE || type == net::GENERATED_BYTE_CODE_CACHE ||
+          type == net::GENERATED_NATIVE_CODE_CACHE ||
+          type == net::GENERATED_WEBUI_BYTE_CODE_CACHE)
+             ? SimpleEntryImpl::OPTIMISTIC_OPERATIONS
+             : SimpleEntryImpl::NON_OPTIMISTIC_OPERATIONS;
+}
+
 }  // namespace
 
 const base::Feature SimpleBackendImpl::kPrioritizedSimpleCacheTasks{
@@ -228,11 +236,7 @@
           {base::MayBlock(), base::TaskPriority::USER_BLOCKING,
            base::TaskShutdownBehavior::BLOCK_SHUTDOWN})),
       orig_max_size_(max_bytes),
-      entry_operations_mode_((cache_type == net::DISK_CACHE ||
-                              cache_type == net::GENERATED_BYTE_CODE_CACHE ||
-                              cache_type == net::GENERATED_NATIVE_CODE_CACHE)
-                                 ? SimpleEntryImpl::OPTIMISTIC_OPERATIONS
-                                 : SimpleEntryImpl::NON_OPTIMISTIC_OPERATIONS),
+      entry_operations_mode_(CacheTypeToOperationsMode(cache_type)),
       post_doom_waiting_(
           base::MakeRefCounted<SimplePostDoomWaiterTable>(cache_type)),
       net_log_(net_log) {
diff --git a/net/disk_cache/simple/simple_histogram_macros.h b/net/disk_cache/simple/simple_histogram_macros.h
index f6768a0..192907f 100644
--- a/net/disk_cache/simple/simple_histogram_macros.h
+++ b/net/disk_cache/simple/simple_histogram_macros.h
@@ -35,6 +35,7 @@
                            ("SimpleCache.Code." uma_name, ##__VA_ARGS__));  \
         break;                                                              \
       case net::GENERATED_NATIVE_CODE_CACHE:                                \
+      case net::GENERATED_WEBUI_BYTE_CODE_CACHE:                            \
       case net::SHADER_CACHE:                                               \
         break;                                                              \
       default:                                                              \
diff --git a/net/disk_cache/simple/simple_index.cc b/net/disk_cache/simple/simple_index.cc
index 37bd23ac..03485ed16 100644
--- a/net/disk_cache/simple/simple_index.cc
+++ b/net/disk_cache/simple/simple_index.cc
@@ -411,7 +411,9 @@
   eviction_in_progress_ = true;
   eviction_start_time_ = base::TimeTicks::Now();
 
-  bool use_size_heuristic = (cache_type_ != net::GENERATED_BYTE_CODE_CACHE);
+  bool use_size_heuristic =
+      (cache_type_ != net::GENERATED_BYTE_CODE_CACHE &&
+       cache_type_ != net::GENERATED_WEBUI_BYTE_CODE_CACHE);
 
   // Flatten for sorting.
   std::vector<std::pair<uint64_t, const EntrySet::value_type*>> entries;
diff --git a/remoting/host/it2me/it2me_host.cc b/remoting/host/it2me/it2me_host.cc
index 2eb9d3a..f3881a9 100644
--- a/remoting/host/it2me/it2me_host.cc
+++ b/remoting/host/it2me/it2me_host.cc
@@ -483,7 +483,7 @@
       DCHECK(state == It2MeHostState::kDisconnected)
           << It2MeHostStateToString(state);
       break;
-  };
+  }
 
   state_ = state;
 
diff --git a/testing/unexpected_passes_common/__init__.py b/testing/unexpected_passes_common/__init__.py
index fa6e05e2..8a659964 100644
--- a/testing/unexpected_passes_common/__init__.py
+++ b/testing/unexpected_passes_common/__init__.py
@@ -6,7 +6,8 @@
 import sys
 
 CHROMIUM_SRC_DIR = os.path.join(os.path.dirname(__file__), '..', '..')
-sys.path.append(os.path.join(CHROMIUM_SRC_DIR, 'content', 'test', 'gpu'))
+TYP_PATH = os.path.join(CHROMIUM_SRC_DIR, 'third_party', 'catapult',
+                        'third_party', 'typ')
 
-from gpu_tests import path_util
-path_util.SetupTypPath()
\ No newline at end of file
+if TYP_PATH not in sys.path:
+  sys.path.append(TYP_PATH)
diff --git a/testing/unexpected_passes_common/builders.py b/testing/unexpected_passes_common/builders.py
index 77bc43c..a15cc63 100644
--- a/testing/unexpected_passes_common/builders.py
+++ b/testing/unexpected_passes_common/builders.py
@@ -144,7 +144,7 @@
 
     fake_builders = self.GetFakeCiBuilders()
     if ci_builder in fake_builders:
-      mirrored_builders.add(fake_builders[ci_builder])
+      mirrored_builders |= fake_builders[ci_builder]
       logging.debug('%s is a fake CI builder mirrored by %s', ci_builder,
                     fake_builders[ci_builder])
       return mirrored_builders, True
@@ -213,9 +213,9 @@
     """Gets a mapping of fake CI builders to their mirrored trybots.
 
     Returns:
-      A dict of string -> string. Each key is a CI builder that doesn't actually
-      exist and each value is a try builder that mirrors the CI builder but does
-      exist.
+      A dict of string -> set(string). Each key is a CI builder that doesn't
+      actually exist and each value is a set of try builders that mirror the CI
+      builder but do exist.
     """
     raise NotImplementedError()
 
diff --git a/testing/unexpected_passes_common/builders_unittest.py b/testing/unexpected_passes_common/builders_unittest.py
index 91f3924..f0b106d 100755
--- a/testing/unexpected_passes_common/builders_unittest.py
+++ b/testing/unexpected_passes_common/builders_unittest.py
@@ -172,7 +172,7 @@
 
   def testFakeCiBuilder(self):
     """Tests that a fake CI builder gets properly mapped."""
-    self._fake_ci_mock.return_value = {'foo_ci': 'foo_try'}
+    self._fake_ci_mock.return_value = {'foo_ci': {'foo_try'}}
     try_builder, found_mirror = (
         self._builders_instance._GetMirroredBuildersForCiBuilder('foo_ci'))
     self.assertTrue(found_mirror)
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
index 6e9f343..18582bf1 100644
--- a/testing/variations/fieldtrial_testing_config.json
+++ b/testing/variations/fieldtrial_testing_config.json
@@ -5194,6 +5194,25 @@
             ]
         }
     ],
+    "MuteNotificationSnoozeAction": [
+        {
+            "platforms": [
+                "chromeos",
+                "chromeos_lacros",
+                "linux",
+                "mac",
+                "windows"
+            ],
+            "experiments": [
+                {
+                    "name": "Enabled",
+                    "enable_features": [
+                        "MuteNotificationSnoozeAction"
+                    ]
+                }
+            ]
+        }
+    ],
     "MutingCompromisedCredentials": [
         {
             "platforms": [
@@ -8447,24 +8466,6 @@
             ]
         }
     ],
-    "UseNotificationCompatBuilder": [
-        {
-            "platforms": [
-                "android"
-            ],
-            "experiments": [
-                {
-                    "name": "Enabled_20210625",
-                    "enable_features": [
-                        "UseNotificationCompatBuilder"
-                    ],
-                    "disable_features": [
-                        "AllowRemoteContextForNotifications"
-                    ]
-                }
-            ]
-        }
-    ],
     "UseOzonePlatform": [
         {
             "platforms": [
@@ -8696,6 +8697,12 @@
             ],
             "experiments": [
                 {
+                    "name": "Control",
+                    "disable_features": [
+                        "V8ScriptAblation"
+                    ]
+                },
+                {
                     "name": "DelayOnce50ms",
                     "params": {
                         "V8ScriptDelayOnceMs": "50"
diff --git a/third_party/blink/public/mojom/devtools/inspector_issue.mojom b/third_party/blink/public/mojom/devtools/inspector_issue.mojom
index 777e608..9da98504 100644
--- a/third_party/blink/public/mojom/devtools/inspector_issue.mojom
+++ b/third_party/blink/public/mojom/devtools/inspector_issue.mojom
@@ -8,6 +8,7 @@
 import "services/network/public/mojom/cookie_manager.mojom";
 import "services/network/public/mojom/blocked_by_response_reason.mojom";
 import "third_party/blink/public/mojom/fetch/fetch_api_request.mojom";
+import "mojo/public/mojom/base/unguessable_token.mojom";
 
 // A code that uniquely identifies an issue. This type should be descriptive
 // enough for the front-end to provide a clear description of the issue.
@@ -183,6 +184,7 @@
   TrustedWebActivityIssueDetails? twa_issue_details;
   HeavyAdIssueDetails? heavy_ad_issue_details;
   LowTextContrastIssue? low_text_contrast_details;
+  mojo_base.mojom.UnguessableToken? issue_id;
 };
 
 struct InspectorIssueInfo {
diff --git a/third_party/blink/public/web/web_security_policy.h b/third_party/blink/public/web/web_security_policy.h
index d6242be..c6613ea 100644
--- a/third_party/blink/public/web/web_security_policy.h
+++ b/third_party/blink/public/web/web_security_policy.h
@@ -136,6 +136,12 @@
   // Registers an URL scheme as trusted browser UI.
   BLINK_EXPORT static void RegisterURLSchemeAsWebUI(const WebString&);
 
+  // Registers an URL scheme which can use code caching but must check in the
+  // renderer whether the script content has changed rather than relying on a
+  // response time match from the network cache.
+  BLINK_EXPORT static void RegisterURLSchemeAsCodeCacheWithHashing(
+      const WebString&);
+
  private:
   WebSecurityPolicy() = delete;
 };
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 a08b2d3..5b4b91c29 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
@@ -27,11 +27,11 @@
   Member<BoxedV8Module> module_deleted(kMemberDeletedValue);
 
   v8::Local<v8::Module> local_module_a = ModuleTestBase::CompileModule(
-      scope.GetIsolate(), "export const a = 'a';", js_url_a);
+      scope.GetScriptState(), "export const a = 'a';", js_url_a);
   Member<BoxedV8Module> module_a =
       MakeGarbageCollected<BoxedV8Module>(scope.GetIsolate(), local_module_a);
   v8::Local<v8::Module> local_module_b = ModuleTestBase::CompileModule(
-      scope.GetIsolate(), "export const b = 'b';", js_url_b);
+      scope.GetScriptState(), "export const b = 'b';", js_url_b);
   Member<BoxedV8Module> module_b =
       MakeGarbageCollected<BoxedV8Module>(scope.GetIsolate(), local_module_b);
 
diff --git a/third_party/blink/renderer/bindings/core/v8/module_record.cc b/third_party/blink/renderer/bindings/core/v8/module_record.cc
index f776fc4..191b1168 100644
--- a/third_party/blink/renderer/bindings/core/v8/module_record.cc
+++ b/third_party/blink/renderer/bindings/core/v8/module_record.cc
@@ -48,13 +48,14 @@
 }
 
 v8::Local<v8::Module> ModuleRecord::Compile(
-    v8::Isolate* isolate,
+    ScriptState* script_state,
     const ModuleScriptCreationParams& params,
     const ScriptFetchOptions& options,
     const TextPosition& text_position,
     ExceptionState& exception_state,
     mojom::blink::V8CacheOptions v8_cache_options,
     ModuleRecordProduceCacheData** out_produce_cache_data) {
+  v8::Isolate* isolate = script_state->GetIsolate();
   v8::TryCatch try_catch(isolate);
   v8::Local<v8::Module> module;
 
@@ -69,6 +70,12 @@
   v8::ScriptCompiler::CompileOptions compile_options;
   V8CodeCache::ProduceCacheOptions produce_cache_options;
   v8::ScriptCompiler::NoCacheReason no_cache_reason;
+  ExecutionContext* execution_context = ExecutionContext::From(script_state);
+  if (params.CacheHandler()) {
+    params.CacheHandler()->Check(
+        ExecutionContext::GetCodeCacheHostFromContext(execution_context),
+        params.GetSourceText());
+  }
   std::tie(compile_options, produce_cache_options, no_cache_reason) =
       V8CodeCache::GetCompileOptions(v8_cache_options, params.CacheHandler(),
                                      params.GetSourceText().length(),
diff --git a/third_party/blink/renderer/bindings/core/v8/module_record.h b/third_party/blink/renderer/bindings/core/v8/module_record.h
index df82687..b14dfb0 100644
--- a/third_party/blink/renderer/bindings/core/v8/module_record.h
+++ b/third_party/blink/renderer/bindings/core/v8/module_record.h
@@ -59,7 +59,7 @@
 
  public:
   static v8::Local<v8::Module> Compile(
-      v8::Isolate*,
+      ScriptState*,
       const ModuleScriptCreationParams& params,
       const ScriptFetchOptions&,
       const TextPosition&,
diff --git a/third_party/blink/renderer/bindings/core/v8/module_record_test.cc b/third_party/blink/renderer/bindings/core/v8/module_record_test.cc
index 39d0164..e4358db 100644
--- a/third_party/blink/renderer/bindings/core/v8/module_record_test.cc
+++ b/third_party/blink/renderer/bindings/core/v8/module_record_test.cc
@@ -115,7 +115,7 @@
   V8TestingScope scope;
   const KURL js_url("https://example.com/foo.js");
   v8::Local<v8::Module> module = ModuleTestBase::CompileModule(
-      scope.GetIsolate(), "export const a = 42;", js_url);
+      scope.GetScriptState(), "export const a = 42;", js_url);
   ASSERT_FALSE(module.IsEmpty());
 }
 
@@ -123,7 +123,7 @@
   V8TestingScope scope;
   const KURL js_url("https://example.com/foo.js");
   v8::Local<v8::Module> module = ModuleTestBase::CompileModule(
-      scope.GetIsolate(), "123 = 456", js_url, scope.GetExceptionState());
+      scope.GetScriptState(), "123 = 456", js_url, scope.GetExceptionState());
   ASSERT_TRUE(module.IsEmpty());
   EXPECT_TRUE(scope.GetExceptionState().HadException());
 }
@@ -132,7 +132,7 @@
   V8TestingScope scope;
   const KURL js_url("https://example.com/foo.js");
   v8::Local<v8::Module> module = ModuleTestBase::CompileModule(
-      scope.GetIsolate(), "import 'a'; import 'b'; export const c = 'c';",
+      scope.GetScriptState(), "import 'a'; import 'b'; export const c = 'c';",
       js_url);
   ASSERT_FALSE(module.IsEmpty());
 
@@ -149,7 +149,7 @@
   v8::V8::SetFlagsFromString("--harmony-import-assertions");
   const KURL js_url("https://example.com/foo.js");
   v8::Local<v8::Module> module = ModuleTestBase::CompileModule(
-      scope.GetIsolate(),
+      scope.GetScriptState(),
       "import 'a' assert { };"
       "import 'b' assert { type: 'x'};"
       "import 'c' assert { foo: 'y', type: 'z' };",
@@ -179,7 +179,7 @@
 
   const KURL js_url("https://example.com/foo.js");
   v8::Local<v8::Module> module = ModuleTestBase::CompileModule(
-      scope.GetIsolate(), "export const a = 42;", js_url);
+      scope.GetScriptState(), "export const a = 42;", js_url);
   ASSERT_FALSE(module.IsEmpty());
   ScriptValue exception =
       ModuleRecord::Instantiate(scope.GetScriptState(), module, js_url);
@@ -197,19 +197,19 @@
 
   const KURL js_url_a("https://example.com/a.js");
   v8::Local<v8::Module> module_a = ModuleTestBase::CompileModule(
-      scope.GetIsolate(), "export const a = 'a';", js_url_a);
+      scope.GetScriptState(), "export const a = 'a';", js_url_a);
   ASSERT_FALSE(module_a.IsEmpty());
   resolver->PrepareMockResolveResult(module_a);
 
   const KURL js_url_b("https://example.com/b.js");
   v8::Local<v8::Module> module_b = ModuleTestBase::CompileModule(
-      scope.GetIsolate(), "export const b = 'b';", js_url_b);
+      scope.GetScriptState(), "export const b = 'b';", js_url_b);
   ASSERT_FALSE(module_b.IsEmpty());
   resolver->PrepareMockResolveResult(module_b);
 
   const KURL js_url_c("https://example.com/c.js");
   v8::Local<v8::Module> module = ModuleTestBase::CompileModule(
-      scope.GetIsolate(), "import 'a'; import 'b'; export const c = 123;",
+      scope.GetScriptState(), "import 'a'; import 'b'; export const c = 123;",
       js_url_c);
   ASSERT_FALSE(module.IsEmpty());
   ScriptValue exception =
@@ -230,7 +230,7 @@
 
   const KURL js_url_f("https://example.com/failure.js");
   v8::Local<v8::Module> module_failure = ModuleTestBase::CompileModule(
-      scope.GetIsolate(), "nonexistent_function()", js_url_f);
+      scope.GetScriptState(), "nonexistent_function()", js_url_f);
   ASSERT_FALSE(module_failure.IsEmpty());
   ASSERT_TRUE(
       ModuleRecord::Instantiate(state, module_failure, js_url_f).IsEmpty());
@@ -242,8 +242,8 @@
 
   const KURL js_url_c("https://example.com/c.js");
   v8::Local<v8::Module> module = ModuleTestBase::CompileModule(
-      scope.GetIsolate(), "import 'failure'; export const c = 123;", js_url_c,
-      scope.GetExceptionState());
+      scope.GetScriptState(), "import 'failure'; export const c = 123;",
+      js_url_c, scope.GetExceptionState());
   ASSERT_FALSE(module.IsEmpty());
   ASSERT_TRUE(ModuleRecord::Instantiate(state, module, js_url_c).IsEmpty());
   ScriptEvaluationResult evaluation_result2 =
@@ -268,7 +268,8 @@
 
   const KURL js_url("https://example.com/foo.js");
   v8::Local<v8::Module> module = ModuleTestBase::CompileModule(
-      scope.GetIsolate(), "export const a = 42; window.foo = 'bar';", js_url);
+      scope.GetScriptState(), "export const a = 42; window.foo = 'bar';",
+      js_url);
   ASSERT_FALSE(module.IsEmpty());
   ScriptValue exception =
       ModuleRecord::Instantiate(scope.GetScriptState(), module, js_url);
@@ -301,8 +302,8 @@
       MakeGarbageCollected<ModuleRecordTestModulator>(scope.GetScriptState());
 
   const KURL js_url("https://example.com/foo.js");
-  v8::Local<v8::Module> module =
-      ModuleTestBase::CompileModule(scope.GetIsolate(), "throw 'bar';", js_url);
+  v8::Local<v8::Module> module = ModuleTestBase::CompileModule(
+      scope.GetScriptState(), "throw 'bar';", js_url);
   ASSERT_FALSE(module.IsEmpty());
   ScriptValue instantiation_exception =
       ModuleRecord::Instantiate(scope.GetScriptState(), module, js_url);
diff --git a/third_party/blink/renderer/bindings/core/v8/script_streamer.cc b/third_party/blink/renderer/bindings/core/v8/script_streamer.cc
index 31a4c0d6..3dd967b25 100644
--- a/third_party/blink/renderer/bindings/core/v8/script_streamer.cc
+++ b/third_party/blink/renderer/bindings/core/v8/script_streamer.cc
@@ -587,7 +587,15 @@
     }
   }
 
-  if (V8CodeCache::HasCodeCache(script_resource_->CacheHandler())) {
+  // Here we can't call Check on the cache handler because it requires the
+  // script source, which would require having already loaded the script. It is
+  // OK at this point to disable streaming even though we might end up rejecting
+  // the cached data later, because we expect that the cached data is usually
+  // acceptable. If we detect a content mismatch once the content is loaded,
+  // then we reset the code cache entry to just a timestamp, so this condition
+  // will allow streaming the next time we load the resource.
+  if (V8CodeCache::HasCodeCache(script_resource_->CacheHandler(),
+                                SingleCachedMetadataHandler::kAllowUnchecked)) {
     // The resource has a code cache entry, so it's unnecessary to stream
     // and parse the code.
     // TODO(leszeks): Can we even reach this code path with data pipes?
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 fee3f51..e44fb6a 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
@@ -64,12 +64,13 @@
 }  // namespace
 
 bool V8CodeCache::HasCodeCache(
-    const SingleCachedMetadataHandler* cache_handler) {
+    const SingleCachedMetadataHandler* cache_handler,
+    SingleCachedMetadataHandler::GetCachedMetadataBehavior behavior) {
   if (!cache_handler)
     return false;
 
   uint32_t code_cache_tag = V8CodeCache::TagForCodeCache(cache_handler);
-  return cache_handler->GetCachedMetadata(code_cache_tag).get();
+  return cache_handler->GetCachedMetadata(code_cache_tag, behavior).get();
 }
 
 v8::ScriptCompiler::CachedData* V8CodeCache::CreateCachedData(
diff --git a/third_party/blink/renderer/bindings/core/v8/v8_code_cache.h b/third_party/blink/renderer/bindings/core/v8/v8_code_cache.h
index 34e202370..d5d76f9 100644
--- a/third_party/blink/renderer/bindings/core/v8/v8_code_cache.h
+++ b/third_party/blink/renderer/bindings/core/v8/v8_code_cache.h
@@ -12,6 +12,7 @@
 #include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/platform/bindings/script_state.h"
 #include "third_party/blink/renderer/platform/bindings/v8_binding_macros.h"
+#include "third_party/blink/renderer/platform/loader/fetch/url_loader/cached_metadata_handler.h"
 #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
 #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
 #include "v8/include/v8.h"
@@ -25,7 +26,6 @@
 
 class CachedMetadata;
 class KURL;
-class SingleCachedMetadataHandler;
 class ScriptSourceCode;
 class ModuleRecordProduceCacheData;
 
@@ -55,7 +55,10 @@
 
   // Returns true iff the SingleCachedMetadataHandler contains a code cache
   // that can be consumed by V8.
-  static bool HasCodeCache(const SingleCachedMetadataHandler*);
+  static bool HasCodeCache(
+      const SingleCachedMetadataHandler*,
+      SingleCachedMetadataHandler::GetCachedMetadataBehavior behavior =
+          SingleCachedMetadataHandler::kCrashIfUnchecked);
 
   static std::tuple<v8::ScriptCompiler::CompileOptions,
                     ProduceCacheOptions,
diff --git a/third_party/blink/renderer/bindings/core/v8/v8_script_runner.cc b/third_party/blink/renderer/bindings/core/v8/v8_script_runner.cc
index 09987f7..cf089e89 100644
--- a/third_party/blink/renderer/bindings/core/v8/v8_script_runner.cc
+++ b/third_party/blink/renderer/bindings/core/v8/v8_script_runner.cc
@@ -482,6 +482,12 @@
 
     v8::Local<v8::Script> script;
 
+    if (source.CacheHandler()) {
+      source.CacheHandler()->Check(
+          ExecutionContext::GetCodeCacheHostFromContext(execution_context),
+          source.Source());
+    }
+
     v8::ScriptCompiler::CompileOptions compile_options;
     V8CodeCache::ProduceCacheOptions produce_cache_options;
     v8::ScriptCompiler::NoCacheReason no_cache_reason;
diff --git a/third_party/blink/renderer/bindings/core/v8/v8_script_runner_test.cc b/third_party/blink/renderer/bindings/core/v8/v8_script_runner_test.cc
index c8ce3b3..6c6b416 100644
--- a/third_party/blink/renderer/bindings/core/v8/v8_script_runner_test.cc
+++ b/third_party/blink/renderer/bindings/core/v8/v8_script_runner_test.cc
@@ -20,6 +20,7 @@
 #include "third_party/blink/renderer/platform/loader/fetch/script_cached_metadata_handler.h"
 #include "third_party/blink/renderer/platform/loader/fetch/url_loader/cached_metadata_handler.h"
 #include "third_party/blink/renderer/platform/weborigin/kurl.h"
+#include "third_party/blink/renderer/platform/weborigin/scheme_registry.h"
 #include "third_party/blink/renderer/platform/wtf/text/string_utf8_adaptor.h"
 #include "third_party/blink/renderer/platform/wtf/text/text_encoding.h"
 #include "v8/include/v8.h"
@@ -46,8 +47,15 @@
     return WTF::String::Format("a = function() { 1 + 1; } // %01000d\n",
                                counter_);
   }
+  WTF::String DifferentCode() const {
+    return WTF::String::Format("a = function() { 1 + 2; } // %01000d\n",
+                               counter_);
+  }
   KURL Url() const {
-    return KURL(WTF::String::Format("http://bla.com/bla%d", counter_));
+    return KURL(WTF::String::Format(code_cache_with_hashing_scheme_
+                                        ? "codecachewithhashing://bla.com/bla%d"
+                                        : "http://bla.com/bla%d",
+                                    counter_));
   }
   unsigned TagForCodeCache(SingleCachedMetadataHandler* cache_handler) const {
     return V8CodeCache::TagForCodeCache(cache_handler);
@@ -64,6 +72,12 @@
                      ScriptState* script_state,
                      const ScriptSourceCode& source_code,
                      mojom::blink::V8CacheOptions cache_options) {
+    ExecutionContext* execution_context = ExecutionContext::From(script_state);
+    if (source_code.CacheHandler()) {
+      source_code.CacheHandler()->Check(
+          ExecutionContext::GetCodeCacheHostFromContext(execution_context),
+          source_code.Source());
+    }
     v8::ScriptCompiler::CompileOptions compile_options;
     V8CodeCache::ProduceCacheOptions produce_cache_options;
     v8::ScriptCompiler::NoCacheReason no_cache_reason;
@@ -75,7 +89,6 @@
     if (compiled_script.IsEmpty()) {
       return false;
     }
-    ExecutionContext* execution_context = ExecutionContext::From(script_state);
     V8CodeCache::ProduceCache(
         isolate,
         ExecutionContext::GetCodeCacheHostFromContext(execution_context),
@@ -89,13 +102,18 @@
                      v8::ScriptCompiler::CompileOptions compile_options,
                      v8::ScriptCompiler::NoCacheReason no_cache_reason,
                      V8CodeCache::ProduceCacheOptions produce_cache_options) {
+    ExecutionContext* execution_context = ExecutionContext::From(script_state);
+    if (source_code.CacheHandler()) {
+      source_code.CacheHandler()->Check(
+          ExecutionContext::GetCodeCacheHostFromContext(execution_context),
+          source_code.Source());
+    }
     v8::MaybeLocal<v8::Script> compiled_script = V8ScriptRunner::CompileScript(
         script_state, source_code, SanitizeScriptErrors::kSanitize,
         compile_options, no_cache_reason, ReferrerScriptInfo());
     if (compiled_script.IsEmpty()) {
       return false;
     }
-    ExecutionContext* execution_context = ExecutionContext::From(script_state);
     V8CodeCache::ProduceCache(
         isolate,
         ExecutionContext::GetCodeCacheHostFromContext(execution_context),
@@ -109,13 +127,21 @@
     return resource;
   }
 
-  ScriptResource* CreateResource(const WTF::TextEncoding& encoding) {
+  ScriptResource* CreateResource(const WTF::TextEncoding& encoding,
+                                 Vector<uint8_t> serialized_metadata = {},
+                                 absl::optional<String> code = {}) {
     ScriptResource* resource = ScriptResource::CreateForTest(Url(), encoding);
-    String code = Code();
+    if (!code)
+      code = Code();
     ResourceResponse response(Url());
     response.SetHttpStatusCode(200);
     resource->ResponseReceived(response);
-    StringUTF8Adaptor code_utf8(code);
+    if (serialized_metadata.size() != 0) {
+      const uint8_t* begin = serialized_metadata.data();
+      resource->SetSerializedCachedMetadata(
+          base::make_span(begin, serialized_metadata.size()));
+    }
+    StringUTF8Adaptor code_utf8(code.value());
     resource->AppendData(code_utf8.data(), code_utf8.size());
     resource->FinishForTest();
     return resource;
@@ -123,6 +149,7 @@
 
  protected:
   static int counter_;
+  bool code_cache_with_hashing_scheme_ = false;
   base::test::ScopedFeatureList feature_list_;
 };
 
@@ -405,6 +432,139 @@
   EXPECT_EQ(1, counter.GetDataTypeMismatch());
 }
 
+TEST_F(V8ScriptRunnerTest, successfulCodeCacheWithHashing) {
+  feature_list_.InitAndDisableFeature(
+      blink::features::kDiscardCodeCacheAfterFirstUse);
+  V8TestingScope scope;
+  SchemeRegistry::RegisterURLSchemeAsCodeCacheWithHashing(
+      "codecachewithhashing");
+  code_cache_with_hashing_scheme_ = true;
+  ScriptSourceCode source_code(
+      nullptr, CreateResource(UTF8Encoding()),
+      ScriptStreamer::NotStreamingReason::kScriptTooSmall);
+  SingleCachedMetadataHandler* cache_handler = source_code.CacheHandler();
+  EXPECT_TRUE(cache_handler->HashRequired());
+
+  // Cold run - should set the timestamp.
+  EXPECT_TRUE(CompileScript(scope.GetIsolate(), scope.GetScriptState(),
+                            source_code,
+                            mojom::blink::V8CacheOptions::kDefault));
+  EXPECT_TRUE(cache_handler->GetCachedMetadata(TagForTimeStamp(cache_handler)));
+  EXPECT_FALSE(
+      cache_handler->GetCachedMetadata(TagForCodeCache(cache_handler)));
+
+  // Warm run - should produce code cache.
+  EXPECT_TRUE(CompileScript(scope.GetIsolate(), scope.GetScriptState(),
+                            source_code,
+                            mojom::blink::V8CacheOptions::kDefault));
+  EXPECT_TRUE(cache_handler->GetCachedMetadata(TagForCodeCache(cache_handler)));
+
+  // Hot run - should consume code cache.
+  v8::ScriptCompiler::CompileOptions compile_options;
+  V8CodeCache::ProduceCacheOptions produce_cache_options;
+  v8::ScriptCompiler::NoCacheReason no_cache_reason;
+  std::tie(compile_options, produce_cache_options, no_cache_reason) =
+      V8CodeCache::GetCompileOptions(mojom::blink::V8CacheOptions::kDefault,
+                                     source_code);
+  EXPECT_EQ(produce_cache_options,
+            V8CodeCache::ProduceCacheOptions::kNoProduceCache);
+  EXPECT_EQ(compile_options,
+            v8::ScriptCompiler::CompileOptions::kConsumeCodeCache);
+  EXPECT_TRUE(CompileScript(scope.GetIsolate(), scope.GetScriptState(),
+                            source_code, compile_options, no_cache_reason,
+                            produce_cache_options));
+  EXPECT_TRUE(cache_handler->GetCachedMetadata(TagForCodeCache(cache_handler)));
+}
+
+TEST_F(V8ScriptRunnerTest, codeCacheWithFailedHashCheck) {
+  V8TestingScope scope;
+  SchemeRegistry::RegisterURLSchemeAsCodeCacheWithHashing(
+      "codecachewithhashing");
+  code_cache_with_hashing_scheme_ = true;
+
+  ScriptSourceCode source_code_1(
+      nullptr, CreateResource(UTF8Encoding()),
+      ScriptStreamer::NotStreamingReason::kScriptTooSmall);
+  ScriptCachedMetadataHandlerWithHashing* cache_handler_1 =
+      static_cast<ScriptCachedMetadataHandlerWithHashing*>(
+          source_code_1.CacheHandler());
+  EXPECT_TRUE(cache_handler_1->HashRequired());
+
+  // Cold run - should set the timestamp.
+  EXPECT_TRUE(CompileScript(scope.GetIsolate(), scope.GetScriptState(),
+                            source_code_1,
+                            mojom::blink::V8CacheOptions::kDefault));
+  EXPECT_TRUE(
+      cache_handler_1->GetCachedMetadata(TagForTimeStamp(cache_handler_1)));
+  EXPECT_FALSE(
+      cache_handler_1->GetCachedMetadata(TagForCodeCache(cache_handler_1)));
+
+  // A second ScriptSourceCode with matching script text, using the state of
+  // the ScriptCachedMetadataHandler from the first ScriptSourceCode.
+  ScriptSourceCode source_code_2(
+      nullptr,
+      CreateResource(UTF8Encoding(),
+                     cache_handler_1->GetSerializedCachedMetadata()),
+      ScriptStreamer::NotStreamingReason::kScriptTooSmall);
+  ScriptCachedMetadataHandlerWithHashing* cache_handler_2 =
+      static_cast<ScriptCachedMetadataHandlerWithHashing*>(
+          source_code_2.CacheHandler());
+  EXPECT_TRUE(cache_handler_2->HashRequired());
+
+  // Warm run - should produce code cache.
+  EXPECT_TRUE(CompileScript(scope.GetIsolate(), scope.GetScriptState(),
+                            source_code_2,
+                            mojom::blink::V8CacheOptions::kDefault));
+  EXPECT_TRUE(
+      cache_handler_2->GetCachedMetadata(TagForCodeCache(cache_handler_2)));
+
+  // A third ScriptSourceCode with different script text, using the state of
+  // the ScriptCachedMetadataHandler from the second ScriptSourceCode.
+  ScriptSourceCode source_code_3(
+      nullptr,
+      CreateResource(UTF8Encoding(),
+                     cache_handler_2->GetSerializedCachedMetadata(),
+                     DifferentCode()),
+      ScriptStreamer::NotStreamingReason::kScriptTooSmall);
+  ScriptCachedMetadataHandlerWithHashing* cache_handler_3 =
+      static_cast<ScriptCachedMetadataHandlerWithHashing*>(
+          source_code_3.CacheHandler());
+  EXPECT_TRUE(cache_handler_3->HashRequired());
+
+  // Since the third script's text doesn't match the first two, the hash check
+  // should reject the existing code cache data and the cache entry should
+  // be updated back to a timestamp like it would during a cold run.
+  EXPECT_TRUE(CompileScript(scope.GetIsolate(), scope.GetScriptState(),
+                            source_code_3,
+                            mojom::blink::V8CacheOptions::kDefault));
+  EXPECT_TRUE(
+      cache_handler_3->GetCachedMetadata(TagForTimeStamp(cache_handler_3)));
+  EXPECT_FALSE(
+      cache_handler_3->GetCachedMetadata(TagForCodeCache(cache_handler_3)));
+
+  // A fourth ScriptSourceCode with matching script text, using the state of
+  // the ScriptCachedMetadataHandler from the third ScriptSourceCode.
+  ScriptSourceCode source_code_4(
+      nullptr,
+      CreateResource(UTF8Encoding(),
+                     cache_handler_3->GetSerializedCachedMetadata()),
+      ScriptStreamer::NotStreamingReason::kScriptTooSmall);
+  ScriptCachedMetadataHandlerWithHashing* cache_handler_4 =
+      static_cast<ScriptCachedMetadataHandlerWithHashing*>(
+          source_code_4.CacheHandler());
+  EXPECT_TRUE(cache_handler_4->HashRequired());
+
+  // Running the original script again once again sets the timestamp since the
+  // content has changed again.
+  EXPECT_TRUE(CompileScript(scope.GetIsolate(), scope.GetScriptState(),
+                            source_code_4,
+                            mojom::blink::V8CacheOptions::kDefault));
+  EXPECT_TRUE(
+      cache_handler_4->GetCachedMetadata(TagForTimeStamp(cache_handler_4)));
+  EXPECT_FALSE(
+      cache_handler_4->GetCachedMetadata(TagForCodeCache(cache_handler_4)));
+}
+
 }  // namespace
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/bindings/core/v8/v8_wasm_response_extensions.cc b/third_party/blink/renderer/bindings/core/v8/v8_wasm_response_extensions.cc
index 8240b4c4..984f82b6 100644
--- a/third_party/blink/renderer/bindings/core/v8/v8_wasm_response_extensions.cc
+++ b/third_party/blink/renderer/bindings/core/v8/v8_wasm_response_extensions.cc
@@ -212,11 +212,15 @@
 
 void SendCachedData(String response_url,
                     base::Time response_time,
-                    blink::mojom::CodeCacheHost* code_cache_host,
+                    ExecutionContext* execution_context,
                     Vector<uint8_t> serialized_module) {
+  if (!execution_context)
+    return;
   scoped_refptr<CachedMetadata> cached_metadata =
       CachedMetadata::CreateFromSerializedData(std::move(serialized_module));
 
+  blink::mojom::CodeCacheHost* code_cache_host =
+      ExecutionContext::GetCodeCacheHostFromContext(execution_context);
   base::span<const uint8_t> serialized_data = cached_metadata->SerializedData();
   CachedMetadataSender::SendToCodeCacheHost(
       code_cache_host, mojom::blink::CodeCacheType::kWebAssembly, response_url,
@@ -228,11 +232,11 @@
   WasmStreamingClient(const String& response_url,
                       const base::Time& response_time,
                       scoped_refptr<base::SingleThreadTaskRunner> task_runner,
-                      blink::mojom::CodeCacheHost* code_cache_host)
+                      ExecutionContext* execution_context)
       : response_url_(response_url.IsolatedCopy()),
         response_time_(response_time),
         main_thread_task_runner_(std::move(task_runner)),
-        code_cache_host_(code_cache_host) {}
+        execution_context_(execution_context) {}
 
   void OnModuleCompiled(v8::CompiledWasmModule compiled_module) override {
     TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"),
@@ -273,7 +277,7 @@
     // TODO(mythria): Add support for worklets and remove this code that uses
     // per-process interface.
     if (!main_thread_task_runner_.get()) {
-      SendCachedData(response_url_, response_time_, nullptr,
+      SendCachedData(response_url_, response_time_, execution_context_.Lock(),
                      std::move(serialized_data));
       return;
     }
@@ -281,8 +285,7 @@
     main_thread_task_runner_->PostTask(
         FROM_HERE, ConvertToBaseOnceCallback(WTF::CrossThreadBindOnce(
                        &SendCachedData, response_url_, response_time_,
-                       WTF::CrossThreadUnretained(code_cache_host_),
-                       std::move(serialized_data))));
+                       execution_context_, std::move(serialized_data))));
   }
 
   void SetBuffer(scoped_refptr<CachedMetadata> cached_module) {
@@ -294,7 +297,7 @@
   base::Time response_time_;
   scoped_refptr<CachedMetadata> cached_module_;
   scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner_;
-  blink::mojom::CodeCacheHost* code_cache_host_;
+  CrossThreadWeakPersistent<ExecutionContext> execution_context_;
 
   DISALLOW_COPY_AND_ASSIGN(WasmStreamingClient);
 };
@@ -384,8 +387,7 @@
 
     auto client = std::make_shared<WasmStreamingClient>(
         url, response->GetResponse()->InternalResponse()->ResponseTime(),
-        GetContextTaskRunner(*execution_context),
-        ExecutionContext::GetCodeCacheHostFromContext(execution_context));
+        GetContextTaskRunner(*execution_context), execution_context);
     streaming->SetClient(client);
     scoped_refptr<CachedMetadata> cached_module =
         cache_handler->GetCachedMetadata(kWasmModuleTag);
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 64eee0f3..0bc89d41 100644
--- a/third_party/blink/renderer/core/animation/css/css_animations.cc
+++ b/third_party/blink/renderer/core/animation/css/css_animations.cc
@@ -63,6 +63,7 @@
 #include "third_party/blink/renderer/core/css/parser/css_variable_parser.h"
 #include "third_party/blink/renderer/core/css/properties/computed_style_utils.h"
 #include "third_party/blink/renderer/core/css/properties/css_property.h"
+#include "third_party/blink/renderer/core/css/properties/css_property_ref.h"
 #include "third_party/blink/renderer/core/css/property_registry.h"
 #include "third_party/blink/renderer/core/css/resolver/css_to_style_map.h"
 #include "third_party/blink/renderer/core/css/resolver/style_resolver.h"
@@ -118,8 +119,8 @@
     for (unsigned j = 0; j < properties.PropertyCount(); j++) {
       CSSPropertyValueSet::PropertyReference property_reference =
           properties.PropertyAt(j);
-      // TODO(crbug.com/980160): Remove access to static Variable instance.
-      const CSSProperty& property = CSSProperty::Get(property_reference.Id());
+      CSSPropertyRef ref(property_reference.Name(), document);
+      const CSSProperty& property = ref.GetProperty();
       if (property.PropertyID() == CSSPropertyID::kAnimationTimingFunction) {
         const CSSValue& value = property_reference.Value();
         scoped_refptr<TimingFunction> timing_function;
@@ -138,20 +139,7 @@
         const CSSProperty& physical_property =
             property.ResolveDirectionAwareProperty(text_direction,
                                                    writing_mode);
-
-        // Calling ResolveDirectionAwareProperty on the static Variable instance
-        // must return the same instance.
-        DCHECK((&physical_property == &property) ||
-               !Variable::IsStaticInstance(property));
-        // We can not call GetCSSPropertyName on the static Variable instance,
-        // but since (&physical_property == &property), we can get the name from
-        // the original |property_reference|.
-        //
-        // TODO(crbug.com/980160): Remove static Variable instance.
-        const CSSPropertyName& name =
-            Variable::IsStaticInstance(physical_property)
-                ? property_reference.Name()
-                : physical_property.GetCSSPropertyName();
+        const CSSPropertyName& name = physical_property.GetCSSPropertyName();
         keyframe->SetCSSPropertyValue(name, property_reference.Value());
       }
     }
diff --git a/third_party/blink/renderer/core/animation/keyframe_effect_model.cc b/third_party/blink/renderer/core/animation/keyframe_effect_model.cc
index 7f99c61..edbd590 100644
--- a/third_party/blink/renderer/core/animation/keyframe_effect_model.cc
+++ b/third_party/blink/renderer/core/animation/keyframe_effect_model.cc
@@ -210,11 +210,12 @@
   if (!should_snapshot_property_callback(property))
     return false;
 
-  PropertySpecificKeyframeGroup* keyframe_group =
-      keyframe_groups_->DeprecatedAtOrEmptyValue(property);
-  if (!keyframe_group)
+  auto it = keyframe_groups_->find(property);
+  if (it == keyframe_groups_->end())
     return false;
 
+  PropertySpecificKeyframeGroup* keyframe_group = it->value;
+
   bool updated = false;
   for (auto& keyframe : keyframe_group->keyframes_) {
     if (!should_snapshot_keyframe_callback(*keyframe))
diff --git a/third_party/blink/renderer/core/exported/web_security_policy.cc b/third_party/blink/renderer/core/exported/web_security_policy.cc
index f82a4f6a..45cef7e 100644
--- a/third_party/blink/renderer/core/exported/web_security_policy.cc
+++ b/third_party/blink/renderer/core/exported/web_security_policy.cc
@@ -152,4 +152,9 @@
   SchemeRegistry::RegisterURLSchemeAsWebUI(scheme);
 }
 
+void WebSecurityPolicy::RegisterURLSchemeAsCodeCacheWithHashing(
+    const WebString& scheme) {
+  SchemeRegistry::RegisterURLSchemeAsCodeCacheWithHashing(scheme);
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/fetch/fetch_manager.cc b/third_party/blink/renderer/core/fetch/fetch_manager.cc
index 899c6520..9062172c 100644
--- a/third_party/blink/renderer/core/fetch/fetch_manager.cc
+++ b/third_party/blink/renderer/core/fetch/fetch_manager.cc
@@ -294,6 +294,7 @@
   Vector<KURL> url_list_;
   Member<ExecutionContext> execution_context_;
   Member<ScriptCachedMetadataHandler> cached_metadata_handler_;
+  TraceWrapperV8Reference<v8::Value> exception_;
 };
 
 FetchManager::Loader::Loader(ExecutionContext* execution_context,
@@ -314,6 +315,15 @@
       execution_context_(execution_context) {
   DCHECK(world_);
   url_list_.push_back(fetch_request_data->Url());
+  ScriptState* state = resolver_->GetScriptState();
+  v8::Isolate* isolate = state->GetIsolate();
+  // Only use a handle scope as we should be in the right context already.
+  v8::HandleScope scope(isolate);
+  // Create the exception at this point so we get the stack-trace that belongs
+  // to the fetch() call.
+  v8::Local<v8::Value> exception =
+      V8ThrowException::CreateTypeError(isolate, "Failed to fetch");
+  exception_.Set(isolate, exception);
 }
 
 FetchManager::Loader::~Loader() {
@@ -330,6 +340,7 @@
   visitor->Trace(signal_);
   visitor->Trace(execution_context_);
   visitor->Trace(cached_metadata_handler_);
+  visitor->Trace(exception_);
   ThreadableLoaderClient::Trace(visitor);
 }
 
@@ -901,8 +912,8 @@
     if (dom_exception) {
       resolver_->Reject(dom_exception);
     } else {
-      v8::Local<v8::Value> value = V8ThrowException::CreateTypeError(
-          state->GetIsolate(), "Failed to fetch");
+      v8::Local<v8::Value> value = exception_.NewLocal(state->GetIsolate());
+      exception_.Clear();
       if (RuntimeEnabledFeatures::ExceptionMetaDataForDevToolsEnabled()) {
         ThreadDebugger* debugger = ThreadDebugger::From(state->GetIsolate());
         if (devtools_request_id) {
diff --git a/third_party/blink/renderer/core/frame/csp/content_security_policy.cc b/third_party/blink/renderer/core/frame/csp/content_security_policy.cc
index ef20d0f..dced602 100644
--- a/third_party/blink/renderer/core/frame/csp/content_security_policy.cc
+++ b/third_party/blink/renderer/core/frame/csp/content_security_policy.cc
@@ -31,6 +31,7 @@
 #include "base/debug/dump_without_crashing.h"
 #include "services/network/public/cpp/web_sandbox_flags.h"
 #include "services/network/public/mojom/web_sandbox_flags.mojom-blink.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/public/mojom/fetch/fetch_api_request.mojom-blink.h"
 #include "third_party/blink/public/mojom/security_context/insecure_request_policy.mojom-blink.h"
 #include "third_party/blink/public/platform/platform.h"
@@ -763,11 +764,12 @@
 bool ContentSecurityPolicy::AllowTrustedTypeAssignmentFailure(
     const String& message,
     const String& sample,
-    const String& sample_prefix) {
+    const String& sample_prefix,
+    absl::optional<base::UnguessableToken> issue_id) {
   bool allow = true;
   for (const auto& policy : policies_) {
     allow &= CSPDirectiveListAllowTrustedTypeAssignmentFailure(
-        *policy, this, message, sample, sample_prefix);
+        *policy, this, message, sample, sample_prefix, issue_id);
   }
   return allow;
 }
@@ -988,7 +990,8 @@
     RedirectStatus redirect_status,
     Element* element,
     const String& source,
-    const String& source_prefix) {
+    const String& source_prefix,
+    absl::optional<base::UnguessableToken> issue_id) {
   DCHECK(violation_type == kURLViolation || blocked_url.IsEmpty());
 
   // TODO(lukasza): Support sending reports from OOPIFs -
@@ -1042,7 +1045,7 @@
 
   ReportContentSecurityPolicyIssue(*violation_data, header_type, violation_type,
                                    context_frame, element,
-                                   source_location.get());
+                                   source_location.get(), issue_id);
 }
 
 void ContentSecurityPolicy::PostViolationReport(
@@ -1174,7 +1177,8 @@
     ContentSecurityPolicyViolationType violation_type,
     LocalFrame* frame_ancestor,
     Element* element,
-    SourceLocation* source_location) {
+    SourceLocation* source_location,
+    absl::optional<base::UnguessableToken> issue_id) {
   auto cspDetails = mojom::blink::ContentSecurityPolicyIssueDetails::New();
   cspDetails->is_report_only =
       header_type == ContentSecurityPolicyType::kReport;
@@ -1209,6 +1213,9 @@
 
   auto details = mojom::blink::InspectorIssueDetails::New();
   details->csp_issue_details = std::move(cspDetails);
+  if (issue_id) {
+    details->issue_id = issue_id;
+  }
 
   mojom::blink::InspectorIssueInfoPtr info =
       mojom::blink::InspectorIssueInfo::New(
diff --git a/third_party/blink/renderer/core/frame/csp/content_security_policy.h b/third_party/blink/renderer/core/frame/csp/content_security_policy.h
index ad14f79..17ca9a3 100644
--- a/third_party/blink/renderer/core/frame/csp/content_security_policy.h
+++ b/third_party/blink/renderer/core/frame/csp/content_security_policy.h
@@ -31,6 +31,7 @@
 
 #include "services/network/public/mojom/content_security_policy.mojom-blink.h"
 #include "services/network/public/mojom/web_sandbox_flags.mojom-blink-forward.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/public/mojom/devtools/console_message.mojom-blink.h"
 #include "third_party/blink/public/mojom/devtools/inspector_issue.mojom-blink.h"
 #include "third_party/blink/public/mojom/fetch/fetch_api_request.mojom-blink-forward.h"
@@ -294,7 +295,8 @@
   bool AllowTrustedTypeAssignmentFailure(
       const String& message,
       const String& sample = String(),
-      const String& sample_prefix = String());
+      const String& sample_prefix = String(),
+      absl::optional<base::UnguessableToken> issue_id = absl::nullopt);
 
   void UsesScriptHashAlgorithms(uint8_t content_security_policy_hash_algorithm);
   void UsesStyleHashAlgorithms(uint8_t content_security_policy_hash_algorithm);
@@ -319,21 +321,26 @@
   // available).
   // If |sourceLocation| is not set, the source location will be the context's
   // current location.
-  void ReportViolation(const String& directive_text,
-                       CSPDirectiveName effective_type,
-                       const String& console_message,
-                       const KURL& blocked_url,
-                       const Vector<String>& report_endpoints,
-                       bool use_reporting_api,
-                       const String& header,
-                       network::mojom::ContentSecurityPolicyType,
-                       ContentSecurityPolicyViolationType,
-                       std::unique_ptr<SourceLocation>,
-                       LocalFrame* = nullptr,
-                       RedirectStatus = RedirectStatus::kFollowedRedirect,
-                       Element* = nullptr,
-                       const String& source = g_empty_string,
-                       const String& source_prefix = g_empty_string);
+  // If an inspector issue is reported, and |issue_id| is present, it will be
+  // reported on the issue. This is useful to provide a link from the
+  // JavaScript TypeError to the inspector issue in the DevTools front-end.
+  void ReportViolation(
+      const String& directive_text,
+      CSPDirectiveName effective_type,
+      const String& console_message,
+      const KURL& blocked_url,
+      const Vector<String>& report_endpoints,
+      bool use_reporting_api,
+      const String& header,
+      network::mojom::ContentSecurityPolicyType,
+      ContentSecurityPolicyViolationType,
+      std::unique_ptr<SourceLocation>,
+      LocalFrame* = nullptr,
+      RedirectStatus = RedirectStatus::kFollowedRedirect,
+      Element* = nullptr,
+      const String& source = g_empty_string,
+      const String& source_prefix = g_empty_string,
+      absl::optional<base::UnguessableToken> issue_id = absl::nullopt);
 
   // Called when mixed content is detected on a page; will trigger a violation
   // report if the 'block-all-mixed-content' directive is specified for a
@@ -483,7 +490,8 @@
       ContentSecurityPolicyViolationType violation_type,
       LocalFrame*,
       Element*,
-      SourceLocation*);
+      SourceLocation*,
+      absl::optional<base::UnguessableToken> issue_id);
 
   Member<ContentSecurityPolicyDelegate> delegate_;
   bool override_inline_style_allowed_ = false;
diff --git a/third_party/blink/renderer/core/frame/csp/csp_directive_list.cc b/third_party/blink/renderer/core/frame/csp/csp_directive_list.cc
index d5cd2b94..25132171 100644
--- a/third_party/blink/renderer/core/frame/csp/csp_directive_list.cc
+++ b/third_party/blink/renderer/core/frame/csp/csp_directive_list.cc
@@ -163,17 +163,19 @@
                    original_type);
 }
 
-void ReportViolation(const network::mojom::blink::ContentSecurityPolicy& csp,
-                     ContentSecurityPolicy* policy,
-                     const String& directive_text,
-                     CSPDirectiveName effective_type,
-                     const String& console_message,
-                     const KURL& blocked_url,
-                     ResourceRequest::RedirectStatus redirect_status,
-                     ContentSecurityPolicy::ContentSecurityPolicyViolationType
-                         violation_type = ContentSecurityPolicy::kURLViolation,
-                     const String& sample = String(),
-                     const String& sample_prefix = String()) {
+void ReportViolation(
+    const network::mojom::blink::ContentSecurityPolicy& csp,
+    ContentSecurityPolicy* policy,
+    const String& directive_text,
+    CSPDirectiveName effective_type,
+    const String& console_message,
+    const KURL& blocked_url,
+    ResourceRequest::RedirectStatus redirect_status,
+    ContentSecurityPolicy::ContentSecurityPolicyViolationType violation_type =
+        ContentSecurityPolicy::kURLViolation,
+    const String& sample = String(),
+    const String& sample_prefix = String(),
+    absl::optional<base::UnguessableToken> issue_id = absl::nullopt) {
   String message = CSPDirectiveListIsReportOnly(csp)
                        ? "[Report Only] " + console_message
                        : console_message;
@@ -187,7 +189,7 @@
                           nullptr,  // localFrame
                           redirect_status,
                           nullptr,  // Element*
-                          sample, sample_prefix);
+                          sample, sample_prefix, issue_id);
 }
 
 void ReportViolationWithLocation(
@@ -570,7 +572,8 @@
     ContentSecurityPolicy* policy,
     const String& message,
     const String& sample,
-    const String& sample_prefix) {
+    const String& sample_prefix,
+    absl::optional<base::UnguessableToken> issue_id) {
   if (!CSPDirectiveListRequiresTrustedTypes(csp))
     return true;
 
@@ -580,7 +583,7 @@
                   CSPDirectiveName::RequireTrustedTypesFor, message, KURL(),
                   RedirectStatus::kNoRedirect,
                   ContentSecurityPolicy::kTrustedTypesSinkViolation, sample,
-                  sample_prefix);
+                  sample_prefix, issue_id);
   return CSPDirectiveListIsReportOnly(csp);
 }
 
diff --git a/third_party/blink/renderer/core/frame/csp/csp_directive_list.h b/third_party/blink/renderer/core/frame/csp/csp_directive_list.h
index df303b69..5a589239 100644
--- a/third_party/blink/renderer/core/frame/csp/csp_directive_list.h
+++ b/third_party/blink/renderer/core/frame/csp/csp_directive_list.h
@@ -45,7 +45,8 @@
     ContentSecurityPolicy* policy,
     const String& message,
     const String& sample,
-    const String& sample_prefix);
+    const String& sample_prefix,
+    absl::optional<base::UnguessableToken> issue_id);
 
 CORE_EXPORT
 bool CSPDirectiveListAllowTrustedTypePolicy(
diff --git a/third_party/blink/renderer/core/inspector/inspector_issue_conversion.cc b/third_party/blink/renderer/core/inspector/inspector_issue_conversion.cc
index 5f05fb01..782b405 100644
--- a/third_party/blink/renderer/core/inspector/inspector_issue_conversion.cc
+++ b/third_party/blink/renderer/core/inspector/inspector_issue_conversion.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/renderer/core/inspector/inspector_issue_conversion.h"
 
 #include "third_party/blink/renderer/core/inspector/inspector_issue.h"
+#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
 
 namespace blink {
 
@@ -431,10 +432,15 @@
     issueDetails.setLowTextContrastIssueDetails(std::move(lowContrastDetails));
   }
 
-  return protocol::Audits::InspectorIssue::create()
-      .setCode(InspectorIssueCodeValue(issue->Code()))
-      .setDetails(issueDetails.build())
-      .build();
+  auto final_issue = protocol::Audits::InspectorIssue::create()
+                         .setCode(InspectorIssueCodeValue(issue->Code()))
+                         .setDetails(issueDetails.build())
+                         .build();
+  if (issue->Details()->issue_id) {
+    String issue_id = String::FromUTF8(issue->Details()->issue_id->ToString());
+    final_issue->setIssueId(issue_id);
+  }
+  return final_issue;
 }
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/layout/ng/custom/layout_worklet_test.cc b/third_party/blink/renderer/core/layout/ng/custom/layout_worklet_test.cc
index 2bc5a7f..de50c90 100644
--- a/third_party/blink/renderer/core/layout/ng/custom/layout_worklet_test.cc
+++ b/third_party/blink/renderer/core/layout/ng/custom/layout_worklet_test.cc
@@ -60,8 +60,8 @@
     EXPECT_TRUE(script_state);
 
     KURL js_url("https://example.com/worklet.js");
-    v8::Local<v8::Module> module = ModuleTestBase::CompileModule(
-        script_state->GetIsolate(), source_code, js_url);
+    v8::Local<v8::Module> module =
+        ModuleTestBase::CompileModule(script_state, source_code, js_url);
     EXPECT_FALSE(module.IsEmpty());
 
     ScriptValue exception =
diff --git a/third_party/blink/renderer/core/layout/ng/ng_fragmentation_utils.cc b/third_party/blink/renderer/core/layout/ng/ng_fragmentation_utils.cc
index 1c85994..5d9e36d 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_fragmentation_utils.cc
+++ b/third_party/blink/renderer/core/layout/ng/ng_fragmentation_utils.cc
@@ -59,19 +59,33 @@
 
 // Return layout overflow block-size that's not clipped (or simply the
 // block-size if it *is* clipped).
-LayoutUnit BlockAxisLayoutOverflow(const NGPhysicalFragment& fragment,
+LayoutUnit BlockAxisLayoutOverflow(const NGLayoutResult& result,
                                    WritingDirectionMode writing_direction) {
-  const auto* box = DynamicTo<NGPhysicalBoxFragment>(fragment);
-  if (box && box->HasNonVisibleOverflow()) {
-    OverflowClipAxes block_axis =
-        writing_direction.IsHorizontal() ? kOverflowClipY : kOverflowClipX;
-    if (box->GetOverflowClipAxes() & block_axis)
-      box = nullptr;
+  const NGPhysicalFragment& fragment = result.PhysicalFragment();
+  LayoutUnit block_size = NGFragment(writing_direction, fragment).BlockSize();
+  if (const auto* box = DynamicTo<NGPhysicalBoxFragment>(fragment)) {
+    if (box->HasNonVisibleOverflow()) {
+      OverflowClipAxes block_axis =
+          writing_direction.IsHorizontal() ? kOverflowClipY : kOverflowClipX;
+      if (box->GetOverflowClipAxes() & block_axis)
+        box = nullptr;
+    }
+    if (box) {
+      WritingModeConverter converter(writing_direction, fragment.Size());
+      block_size =
+          std::max(block_size,
+                   converter.ToLogical(box->LayoutOverflow()).BlockEndOffset());
+    }
+    return block_size;
   }
-  PhysicalRect rect = fragment.LocalRect();
-  if (box)
-    rect.UniteEvenIfEmpty(box->LayoutOverflow());
-  return writing_direction.IsHorizontal() ? rect.Bottom() : rect.Right();
+
+  // Ruby annotations do not take up space in the line box, so we need this to
+  // make sure that we don't let them cross the fragmentation line without
+  // noticing.
+  LayoutUnit annotation_overflow = result.AnnotationOverflow();
+  if (annotation_overflow > LayoutUnit())
+    block_size += annotation_overflow;
+  return block_size;
 }
 
 }  // anonymous namespace
@@ -695,9 +709,8 @@
       return true;
     }
   } else if (refuse_break_before ||
-             BlockAxisLayoutOverflow(physical_fragment,
-                                     space.GetWritingDirection()) <=
-                 space_left) {
+             BlockAxisLayoutOverflow(
+                 layout_result, space.GetWritingDirection()) <= space_left) {
     // The child either fits, or we are not allowed to break. So we can move
     // past this breakpoint.
     if (child.IsBlock() && builder) {
diff --git a/third_party/blink/renderer/core/loader/resource/script_resource.cc b/third_party/blink/renderer/core/loader/resource/script_resource.cc
index d8120ad..2087037 100644
--- a/third_party/blink/renderer/core/loader/resource/script_resource.cc
+++ b/third_party/blink/renderer/core/loader/resource/script_resource.cc
@@ -48,6 +48,7 @@
 #include "third_party/blink/renderer/platform/loader/fetch/text_resource_decoder_options.h"
 #include "third_party/blink/renderer/platform/loader/subresource_integrity.h"
 #include "third_party/blink/renderer/platform/network/mime/mime_type_registry.h"
+#include "third_party/blink/renderer/platform/weborigin/scheme_registry.h"
 #include "third_party/blink/renderer/platform/wtf/functional.h"
 #include "third_party/blink/renderer/platform/wtf/shared_buffer.h"
 
@@ -200,6 +201,13 @@
   }
 }
 
+bool ScriptResource::CodeCacheHashRequired() const {
+  if (cached_metadata_handler_) {
+    return cached_metadata_handler_->HashRequired();
+  }
+  return false;
+}
+
 void ScriptResource::DestroyDecodedDataIfPossible() {
   if (cached_metadata_handler_) {
     // Since we are clearing locally we don't need a CodeCacheHost interface
@@ -261,14 +269,29 @@
   }
 
   cached_metadata_handler_ = nullptr;
-  // Currently we support the metadata caching only for HTTP family.
-  if (GetResourceRequest().Url().ProtocolIsInHTTPFamily() &&
-      response.CurrentRequestUrl().ProtocolIsInHTTPFamily()) {
-    cached_metadata_handler_ =
-        MakeGarbageCollected<ScriptCachedMetadataHandler>(
-            Encoding(), CachedMetadataSender::Create(
-                            response, mojom::blink::CodeCacheType::kJavascript,
-                            GetResourceRequest().RequestorOrigin()));
+  // Currently we support the metadata caching only for HTTP family and any
+  // schemes defined by SchemeRegistry as requiring a hash check.
+  bool http_family = GetResourceRequest().Url().ProtocolIsInHTTPFamily() &&
+                     response.CurrentRequestUrl().ProtocolIsInHTTPFamily();
+  bool code_cache_with_hashing_supported =
+      SchemeRegistry::SchemeSupportsCodeCacheWithHashing(
+          GetResourceRequest().Url().Protocol()) &&
+      GetResourceRequest().Url().ProtocolIs(
+          response.CurrentRequestUrl().Protocol());
+  bool code_cache_supported = http_family || code_cache_with_hashing_supported;
+  if (code_cache_supported) {
+    std::unique_ptr<CachedMetadataSender> sender = CachedMetadataSender::Create(
+        response, mojom::blink::CodeCacheType::kJavascript,
+        GetResourceRequest().RequestorOrigin());
+    if (code_cache_with_hashing_supported) {
+      cached_metadata_handler_ =
+          MakeGarbageCollected<ScriptCachedMetadataHandlerWithHashing>(
+              Encoding(), std::move(sender));
+    } else {
+      cached_metadata_handler_ =
+          MakeGarbageCollected<ScriptCachedMetadataHandler>(Encoding(),
+                                                            std::move(sender));
+    }
   }
 }  // namespace blink
 
diff --git a/third_party/blink/renderer/core/loader/resource/script_resource.h b/third_party/blink/renderer/core/loader/resource/script_resource.h
index f6c5707e..afebd210 100644
--- a/third_party/blink/renderer/core/loader/resource/script_resource.h
+++ b/third_party/blink/renderer/core/loader/resource/script_resource.h
@@ -94,6 +94,8 @@
 
   void SetSerializedCachedMetadata(mojo_base::BigBuffer data) override;
 
+  bool CodeCacheHashRequired() const override;
+
   const ParkableString& SourceText();
 
   // Get the resource's current text. This can return partial data, so should
diff --git a/third_party/blink/renderer/core/loader/resource/script_resource_test.cc b/third_party/blink/renderer/core/loader/resource/script_resource_test.cc
index b9b7562..8711d39 100644
--- a/third_party/blink/renderer/core/loader/resource/script_resource_test.cc
+++ b/third_party/blink/renderer/core/loader/resource/script_resource_test.cc
@@ -7,6 +7,7 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/renderer/platform/loader/fetch/url_loader/cached_metadata_handler.h"
 #include "third_party/blink/renderer/platform/weborigin/kurl.h"
+#include "third_party/blink/renderer/platform/weborigin/scheme_registry.h"
 #include "third_party/blink/renderer/platform/wtf/text/text_encoding.h"
 
 namespace blink {
@@ -88,5 +89,42 @@
   EXPECT_FALSE(new_handler);
 }
 
+TEST(ScriptResourceTest, WebUICodeCacheEnabled) {
+  SchemeRegistry::RegisterURLSchemeAsCodeCacheWithHashing(
+      "codecachewithhashing");
+
+  const KURL url("codecachewithhashing://www.example.com/script.js");
+  ScriptResource* resource = ScriptResource::CreateForTest(url, UTF8Encoding());
+  ResourceResponse response(url);
+  response.SetHttpStatusCode(200);
+
+  resource->ResponseReceived(response);
+  constexpr char kData[5] = "abcd";
+  resource->AppendData(kData, strlen(kData));
+  resource->FinishForTest();
+
+  auto* handler = resource->CacheHandler();
+  EXPECT_TRUE(handler);
+  EXPECT_TRUE(handler->HashRequired());
+  EXPECT_EQ(UTF8Encoding().GetName(), handler->Encoding());
+
+  SchemeRegistry::RemoveURLSchemeAsCodeCacheWithHashing("codecachewithhashing");
+}
+
+TEST(ScriptResourceTest, WebUICodeCacheDisabled) {
+  const KURL url("nocodecachewithhashing://www.example.com/script.js");
+  ScriptResource* resource = ScriptResource::CreateForTest(url, UTF8Encoding());
+  ResourceResponse response(url);
+  response.SetHttpStatusCode(200);
+
+  resource->ResponseReceived(response);
+  constexpr char kData[5] = "abcd";
+  resource->AppendData(kData, strlen(kData));
+  resource->FinishForTest();
+
+  auto* handler = resource->CacheHandler();
+  EXPECT_FALSE(handler);
+}
+
 }  // namespace
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/script/dynamic_module_resolver_test.cc b/third_party/blink/renderer/core/script/dynamic_module_resolver_test.cc
index e4f5de7..42beb0e 100644
--- a/third_party/blink/renderer/core/script/dynamic_module_resolver_test.cc
+++ b/third_party/blink/renderer/core/script/dynamic_module_resolver_test.cc
@@ -248,7 +248,7 @@
   EXPECT_FALSE(capture->WasCalled());
 
   v8::Local<v8::Module> record = ModuleTestBase::CompileModule(
-      scope.GetIsolate(), "export const foo = 'hello';", TestReferrerURL());
+      scope.GetScriptState(), "export const foo = 'hello';", TestReferrerURL());
   ModuleScript* module_script =
       JSModuleScript::CreateForTest(modulator, record, TestDependencyURL());
   EXPECT_TRUE(ModuleRecord::Instantiate(scope.GetScriptState(), record,
@@ -406,7 +406,7 @@
   EXPECT_FALSE(capture->WasCalled());
 
   v8::Local<v8::Module> record = ModuleTestBase::CompileModule(
-      scope.GetIsolate(), "throw Error('bar')", TestReferrerURL());
+      scope.GetScriptState(), "throw Error('bar')", TestReferrerURL());
   ModuleScript* module_script =
       JSModuleScript::CreateForTest(modulator, record, TestDependencyURL());
   EXPECT_TRUE(ModuleRecord::Instantiate(scope.GetScriptState(), record,
@@ -449,7 +449,8 @@
   EXPECT_FALSE(capture->WasCalled());
 
   v8::Local<v8::Module> record = ModuleTestBase::CompileModule(
-      scope.GetIsolate(), "export const foo = 'hello';", TestDependencyURL());
+      scope.GetScriptState(), "export const foo = 'hello';",
+      TestDependencyURL());
   ModuleScript* module_script =
       JSModuleScript::CreateForTest(modulator, record, TestDependencyURL());
   EXPECT_TRUE(ModuleRecord::Instantiate(scope.GetScriptState(), record,
diff --git a/third_party/blink/renderer/core/script/js_module_script.cc b/third_party/blink/renderer/core/script/js_module_script.cc
index 9786370..7dd7a80 100644
--- a/third_party/blink/renderer/core/script/js_module_script.cc
+++ b/third_party/blink/renderer/core/script/js_module_script.cc
@@ -48,7 +48,7 @@
   ModuleRecordProduceCacheData* produce_cache_data = nullptr;
 
   v8::Local<v8::Module> result = ModuleRecord::Compile(
-      isolate, params, options, start_position, exception_state,
+      script_state, params, options, start_position, exception_state,
       modulator->GetV8CacheOptions(), &produce_cache_data);
 
   // CreateInternal processes Steps 4 and 8-10.
diff --git a/third_party/blink/renderer/core/script/module_record_resolver_impl_test.cc b/third_party/blink/renderer/core/script/module_record_resolver_impl_test.cc
index 75050795..b383fe3a 100644
--- a/third_party/blink/renderer/core/script/module_record_resolver_impl_test.cc
+++ b/third_party/blink/renderer/core/script/module_record_resolver_impl_test.cc
@@ -78,7 +78,8 @@
                                          V8TestingScope& scope) {
   KURL js_url("https://example.com/referrer.js");
   v8::Local<v8::Module> referrer_record = ModuleTestBase::CompileModule(
-      scope.GetIsolate(), "import './target.js'; export const a = 42;", js_url);
+      scope.GetScriptState(), "import './target.js'; export const a = 42;",
+      js_url);
   KURL referrer_url("https://example.com/referrer.js");
   auto* referrer_module_script =
       JSModuleScript::CreateForTest(modulator, referrer_record, referrer_url);
@@ -90,7 +91,7 @@
                                        bool has_parse_error = false) {
   KURL js_url("https://example.com/target.js");
   v8::Local<v8::Module> record = ModuleTestBase::CompileModule(
-      scope.GetIsolate(), "export const pi = 3.14;", js_url);
+      scope.GetScriptState(), "export const pi = 3.14;", js_url);
   KURL url("https://example.com/target.js");
   auto* module_script = JSModuleScript::CreateForTest(modulator, record, url);
   if (has_parse_error) {
diff --git a/third_party/blink/renderer/core/script/module_script_test.cc b/third_party/blink/renderer/core/script/module_script_test.cc
index 3e604c4..dccb219 100644
--- a/third_party/blink/renderer/core/script/module_script_test.cc
+++ b/third_party/blink/renderer/core/script/module_script_test.cc
@@ -62,7 +62,7 @@
 
 class ModuleScriptTest : public ::testing::Test, public ParametrizedModuleTest {
  protected:
-  static String LargeSourceText() {
+  static String LargeSourceText(const char* suffix = nullptr) {
     StringBuilder builder;
     // Returns a sufficiently long script that is eligible for V8 code cache.
     builder.Append(String("window.foo = "));
@@ -70,6 +70,8 @@
       builder.Append(String("1 + "));
     }
     builder.Append(String("0;"));
+    if (suffix)
+      builder.Append(String(suffix));
     return builder.ToString();
   }
 
@@ -404,6 +406,175 @@
   ASSERT_FALSE(module_script->V8Module().IsEmpty());
 }
 
+TEST_P(ModuleScriptTest, V8CodeCacheWithHashChecking) {
+  // The order of steps below is chosen so that only the last step's behavior
+  // differs based on this flag. The important tests that verify rejection of
+  // cache data on content mismatches occur before that point.
+  feature_list_.InitAndDisableFeature(
+      blink::features::kDiscardCodeCacheAfterFirstUse);
+
+  using Checkpoint = testing::StrictMock<testing::MockFunction<void(int)>>;
+
+  V8TestingScope scope;
+  Modulator* modulator =
+      MakeGarbageCollected<ModuleScriptTestModulator>(scope.GetScriptState());
+  Modulator::SetModulator(scope.GetScriptState(), modulator);
+
+  auto sender = std::make_unique<MockCachedMetadataSender>();
+  MockCachedMetadataSender* sender_ptr = sender.get();
+  ScriptCachedMetadataHandlerWithHashing* cache_handler =
+      MakeGarbageCollected<ScriptCachedMetadataHandlerWithHashing>(
+          UTF8Encoding(), std::move(sender));
+  const uint32_t kTimeStampTag = V8CodeCache::TagForTimeStamp(cache_handler);
+  const uint32_t kCodeTag = V8CodeCache::TagForCodeCache(cache_handler);
+
+  // Six loads:
+  // 0: cold, should produce timestamp
+  // 1: source text changed, should produce timestamp
+  // 2: warm, should produce code cache
+  // 3: source text changed again, should produce timestamp
+  // 4: warm, should produce code cache
+  // 5: hot, should consume code cache
+  for (int nth_load = 0; nth_load < 6; ++nth_load) {
+    // Running the module script immediately clears the code cache contents if
+    // it detects a hash mismatch. Thus, some checks must occur before it is
+    // called.
+    switch (nth_load) {
+      case 1:
+        EXPECT_TRUE(cache_handler->GetCachedMetadata(kTimeStampTag));
+        EXPECT_FALSE(cache_handler->GetCachedMetadata(kCodeTag));
+        EXPECT_CALL(*sender_ptr, Send(_, _, _));
+        break;
+
+      case 3:
+        EXPECT_FALSE(cache_handler->GetCachedMetadata(kTimeStampTag));
+        EXPECT_TRUE(cache_handler->GetCachedMetadata(kCodeTag));
+        EXPECT_CALL(*sender_ptr, Send(_, _, _));
+        break;
+    }
+
+    // Compile a module script.
+    String source =
+        LargeSourceText((nth_load == 1 || nth_load == 2) ? " " : nullptr);
+    cache_handler->ResetForTesting();
+    JSModuleScript* module_script =
+        CreateJSModuleScript(modulator, source, cache_handler);
+    ASSERT_TRUE(module_script);
+
+    // Check that the module script is instantiated/evaluated correctly.
+    ASSERT_TRUE(ModuleRecord::Instantiate(scope.GetScriptState(),
+                                          module_script->V8Module(),
+                                          module_script->SourceURL())
+                    .IsEmpty());
+    ASSERT_EQ(module_script->RunScriptAndReturnValue().GetResultType(),
+              ScriptEvaluationResult::ResultType::kSuccess);
+    TestFoo(scope);
+
+    Checkpoint checkpoint;
+    ::testing::InSequence s;
+
+    switch (nth_load) {
+      case 0:
+        // For the first time, the cache handler doesn't contain any data, and
+        // we'll set timestamp in ProduceCache() below.
+        EXPECT_FALSE(cache_handler->GetCachedMetadata(kTimeStampTag));
+        EXPECT_FALSE(cache_handler->GetCachedMetadata(kCodeTag));
+        EXPECT_EQ(V8CodeCache::ProduceCacheOptions::kSetTimeStamp,
+                  GetProduceCacheOptions(module_script));
+        EXPECT_CALL(*sender_ptr, Send(_, _, _));
+        break;
+
+      case 1:
+        // For the second time, the timestamp has been cleared and will be
+        // replaced by another timestamp because the content didn't match.
+        EXPECT_FALSE(cache_handler->GetCachedMetadata(kTimeStampTag));
+        EXPECT_FALSE(cache_handler->GetCachedMetadata(kCodeTag));
+        EXPECT_EQ(V8CodeCache::ProduceCacheOptions::kSetTimeStamp,
+                  GetProduceCacheOptions(module_script));
+        EXPECT_CALL(*sender_ptr, Send(_, _, _));
+        break;
+
+      case 2:
+        // For the third time, as timestamp is already set, we'll produce code
+        // cache in ProduceCache() below.
+        EXPECT_TRUE(cache_handler->GetCachedMetadata(kTimeStampTag));
+        EXPECT_FALSE(cache_handler->GetCachedMetadata(kCodeTag));
+        EXPECT_EQ(V8CodeCache::ProduceCacheOptions::kProduceCodeCache,
+                  GetProduceCacheOptions(module_script));
+        EXPECT_CALL(*sender_ptr, Send(_, _, _));
+        break;
+
+      case 3:
+        // For the fourth time, the code cache has been cleared and will get
+        // replaced with a timestamp in ProduceCache() due to a content
+        // mismatch.
+        EXPECT_FALSE(cache_handler->GetCachedMetadata(kTimeStampTag));
+        EXPECT_FALSE(cache_handler->GetCachedMetadata(kCodeTag));
+        EXPECT_EQ(V8CodeCache::ProduceCacheOptions::kSetTimeStamp,
+                  GetProduceCacheOptions(module_script));
+        EXPECT_CALL(*sender_ptr, Send(_, _, _));
+        break;
+
+      case 4:
+        // For the fifth time, as timestamp is already set, we'll produce code
+        // cache in ProduceCache() below.
+        EXPECT_TRUE(cache_handler->GetCachedMetadata(kTimeStampTag));
+        EXPECT_FALSE(cache_handler->GetCachedMetadata(kCodeTag));
+        EXPECT_EQ(V8CodeCache::ProduceCacheOptions::kProduceCodeCache,
+                  GetProduceCacheOptions(module_script));
+        EXPECT_CALL(*sender_ptr, Send(_, _, _));
+        break;
+
+      case 5:
+        // For the sixth time, the code cache is already there and we've
+        // consumed the code cache and won't do anything in ProduceCache().
+        EXPECT_FALSE(cache_handler->GetCachedMetadata(kTimeStampTag));
+        EXPECT_TRUE(cache_handler->GetCachedMetadata(kCodeTag));
+        EXPECT_EQ(V8CodeCache::ProduceCacheOptions::kNoProduceCache,
+                  GetProduceCacheOptions(module_script));
+        break;
+    }
+
+    EXPECT_CALL(checkpoint, Call(3));
+
+    module_script->ProduceCache();
+
+    checkpoint.Call(3);
+
+    switch (nth_load) {
+      case 0:
+        EXPECT_TRUE(cache_handler->GetCachedMetadata(kTimeStampTag));
+        EXPECT_FALSE(cache_handler->GetCachedMetadata(kCodeTag));
+        break;
+
+      case 1:
+        EXPECT_TRUE(cache_handler->GetCachedMetadata(kTimeStampTag));
+        EXPECT_FALSE(cache_handler->GetCachedMetadata(kCodeTag));
+        break;
+
+      case 2:
+        EXPECT_FALSE(cache_handler->GetCachedMetadata(kTimeStampTag));
+        EXPECT_TRUE(cache_handler->GetCachedMetadata(kCodeTag));
+        break;
+
+      case 3:
+        EXPECT_TRUE(cache_handler->GetCachedMetadata(kTimeStampTag));
+        EXPECT_FALSE(cache_handler->GetCachedMetadata(kCodeTag));
+        break;
+
+      case 4:
+        EXPECT_FALSE(cache_handler->GetCachedMetadata(kTimeStampTag));
+        EXPECT_TRUE(cache_handler->GetCachedMetadata(kCodeTag));
+        break;
+
+      case 5:
+        EXPECT_FALSE(cache_handler->GetCachedMetadata(kTimeStampTag));
+        EXPECT_TRUE(cache_handler->GetCachedMetadata(kCodeTag));
+        break;
+    }
+  }
+}
+
 // Instantiate tests once with TLA and once without:
 INSTANTIATE_TEST_SUITE_P(ModuleScriptTestGroup,
                          ModuleScriptTest,
diff --git a/third_party/blink/renderer/core/testing/module_test_base.cc b/third_party/blink/renderer/core/testing/module_test_base.cc
index 13b07bf..73ffae7 100644
--- a/third_party/blink/renderer/core/testing/module_test_base.cc
+++ b/third_party/blink/renderer/core/testing/module_test_base.cc
@@ -15,15 +15,15 @@
 namespace blink {
 
 v8::Local<v8::Module> ModuleTestBase::CompileModule(
-    v8::Isolate* isolate,
+    ScriptState* script_state,
     const char* source,
     const KURL& url,
     ExceptionState& exception_state) {
-  return CompileModule(isolate, String(source), url, exception_state);
+  return CompileModule(script_state, String(source), url, exception_state);
 }
 
 v8::Local<v8::Module> ModuleTestBase::CompileModule(
-    v8::Isolate* isolate,
+    ScriptState* script_state,
     String source,
     const KURL& url,
     ExceptionState& exception_state) {
@@ -31,7 +31,7 @@
       /*source_url=*/url, /*base_url=*/url,
       ScriptSourceLocationType::kExternalFile, ModuleType::kJavaScript,
       ParkableString(source.Impl()), nullptr);
-  return ModuleRecord::Compile(isolate, params, ScriptFetchOptions(),
+  return ModuleRecord::Compile(script_state, params, ScriptFetchOptions(),
                                TextPosition::MinimumPosition(),
                                exception_state);
 }
diff --git a/third_party/blink/renderer/core/testing/module_test_base.h b/third_party/blink/renderer/core/testing/module_test_base.h
index 91b017ea..d67e433 100644
--- a/third_party/blink/renderer/core/testing/module_test_base.h
+++ b/third_party/blink/renderer/core/testing/module_test_base.h
@@ -18,12 +18,12 @@
 class ModuleTestBase {
  public:
   static v8::Local<v8::Module> CompileModule(
-      v8::Isolate*,
+      ScriptState*,
       const char*,
       const KURL&,
       ExceptionState& state = DummyExceptionStateForTesting().ReturnThis());
   static v8::Local<v8::Module> CompileModule(
-      v8::Isolate*,
+      ScriptState*,
       String,
       const KURL&,
       ExceptionState& state = DummyExceptionStateForTesting().ReturnThis());
diff --git a/third_party/blink/renderer/core/trustedtypes/trusted_types_util.cc b/third_party/blink/renderer/core/trustedtypes/trusted_types_util.cc
index 4d33e88..e3810ce 100644
--- a/third_party/blink/renderer/core/trustedtypes/trusted_types_util.cc
+++ b/third_party/blink/renderer/core/trustedtypes/trusted_types_util.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/core/trustedtypes/trusted_types_util.h"
 
+#include "base/unguessable_token.h"
 #include "third_party/blink/public/mojom/devtools/console_message.mojom-blink-forward.h"
 #include "third_party/blink/public/mojom/reporting/reporting.mojom-blink.h"
 #include "third_party/blink/public/platform/platform.h"
@@ -15,6 +16,8 @@
 #include "third_party/blink/renderer/core/execution_context/execution_context.h"
 #include "third_party/blink/renderer/core/frame/csp/content_security_policy.h"
 #include "third_party/blink/renderer/core/inspector/console_message.h"
+#include "third_party/blink/renderer/core/inspector/identifiers_factory.h"
+#include "third_party/blink/renderer/core/inspector/main_thread_debugger.h"
 #include "third_party/blink/renderer/core/probe/core_probes.h"
 #include "third_party/blink/renderer/core/script/script_element_base.h"
 #include "third_party/blink/renderer/core/trustedtypes/trusted_html.h"
@@ -184,6 +187,11 @@
     execution_context->GetTrustedTypes()->CountTrustedTypeAssignmentError();
 
   String prefix = GetSamplePrefix(exception_state.GetContext(), value);
+  // This issue_id is used to generate a link in the DevTools front-end from
+  // the JavaScript TypeError to the inspector issue which is reported by
+  // ContentSecurityPolicy::ReportViolation via the call to
+  // AllowTrustedTypeAssignmentFailure below.
+  base::UnguessableToken issue_id = base::UnguessableToken::Create();
   bool allow =
       execution_context->GetContentSecurityPolicy()
           ->AllowTrustedTypeAssignmentFailure(
@@ -191,7 +199,7 @@
               prefix == "Function" ? value.Substring(static_cast<wtf_size_t>(
                                          strlen(kAnonymousPrefix)))
                                    : value,
-              prefix);
+              prefix, issue_id);
 
   // TODO(1087743): Add a console message for Trusted Type-related Function
   // constructor failures, to warn the developer of the outstanding issues
@@ -215,6 +223,15 @@
 
   if (!allow) {
     exception_state.ThrowTypeError(GetMessage(kind));
+    v8::Local<v8::Value> exception = exception_state.GetException();
+    if (!exception.IsEmpty()) {
+      v8::Isolate* isolate = execution_context->GetIsolate();
+      ThreadDebugger* debugger = ThreadDebugger::From(isolate);
+      debugger->GetV8Inspector()->associateExceptionData(
+          v8::Local<v8::Context>(), exception,
+          V8AtomicString(isolate, "issueId"),
+          V8String(isolate, IdentifiersFactory::IdFromToken(issue_id)));
+    }
   }
   return !allow;
 }
diff --git a/third_party/blink/renderer/modules/csspaint/background_color_paint_definition.h b/third_party/blink/renderer/modules/csspaint/background_color_paint_definition.h
index cf83575..9e2e375 100644
--- a/third_party/blink/renderer/modules/csspaint/background_color_paint_definition.h
+++ b/third_party/blink/renderer/modules/csspaint/background_color_paint_definition.h
@@ -18,6 +18,7 @@
 
 class Image;
 class LocalFrame;
+class Node;
 class PaintWorkletProxyClient;
 
 class MODULES_EXPORT BackgroundColorPaintDefinition final
diff --git a/third_party/blink/renderer/modules/csspaint/clip_path_paint_definition.h b/third_party/blink/renderer/modules/csspaint/clip_path_paint_definition.h
index 62b10329..e5f31723 100644
--- a/third_party/blink/renderer/modules/csspaint/clip_path_paint_definition.h
+++ b/third_party/blink/renderer/modules/csspaint/clip_path_paint_definition.h
@@ -15,6 +15,7 @@
 class FloatRect;
 class Image;
 class LocalFrame;
+class Node;
 class PaintWorkletProxyClient;
 
 class MODULES_EXPORT ClipPathPaintDefinition final
diff --git a/third_party/blink/renderer/modules/media_controls/elements/media_control_timeline_element.cc b/third_party/blink/renderer/modules/media_controls/elements/media_control_timeline_element.cc
index 7f6a296..e207fc4b 100644
--- a/third_party/blink/renderer/modules/media_controls/elements/media_control_timeline_element.cc
+++ b/third_party/blink/renderer/modules/media_controls/elements/media_control_timeline_element.cc
@@ -36,7 +36,6 @@
 namespace {
 
 const int kThumbRadius = 6;
-const base::TimeDelta kRenderTimelineInterval = base::TimeDelta::FromSeconds(1);
 
 // Only respond to main button of primary pointer(s).
 bool IsValidPointerEvent(const blink::Event& event) {
@@ -83,13 +82,6 @@
 
 void MediaControlTimelineElement::SetPosition(double current_time,
                                               bool suppress_aria) {
-  if (is_live_ && !live_anchor_time_ && current_time != 0) {
-    live_anchor_time_.emplace();
-    live_anchor_time_->clock_time_ = base::TimeTicks::Now();
-    live_anchor_time_->media_time_ = MediaElement().currentTime();
-  }
-
-  MaybeUpdateTimelineInterval();
   setValue(String::Number(current_time));
 
   if (!suppress_aria)
@@ -99,11 +91,8 @@
 }
 
 void MediaControlTimelineElement::SetDuration(double duration) {
-  is_live_ = std::isinf(duration);
-  double duration_value = duration;
-  SetFloatingPointAttribute(html_names::kMaxAttr,
-                            is_live_ ? 0.0 : duration_value);
-  SetFloatingPointAttribute(html_names::kMinAttr, 0.0);
+  double duration_value = std::isfinite(duration) ? duration : 0;
+  SetFloatingPointAttribute(html_names::kMaxAttr, duration_value);
   RenderBarSegments();
 }
 
@@ -120,12 +109,10 @@
   if (BeginScrubbingEvent(event)) {
     Platform::Current()->RecordAction(
         UserMetricsAction("Media.Controls.ScrubbingBegin"));
-    is_scrubbing_ = true;
     GetMediaControls().BeginScrubbing(MediaControlsImpl::IsTouchEvent(&event));
   } else if (EndScrubbingEvent(event)) {
     Platform::Current()->RecordAction(
         UserMetricsAction("Media.Controls.ScrubbingEnd"));
-    is_scrubbing_ = false;
     GetMediaControls().EndScrubbing();
   }
 
@@ -176,58 +163,6 @@
       event, GetLayoutObject());
 }
 
-void MediaControlTimelineElement::OnMediaPlaying() {
-  if (!is_live_)
-    return;
-
-  if (render_timeline_timer_.IsRunning())
-    render_timeline_timer_.Stop();
-}
-
-void MediaControlTimelineElement::OnMediaStoppedPlaying() {
-  if (!is_live_ || is_scrubbing_ || !live_anchor_time_)
-    return;
-
-  render_timeline_timer_.Start(
-      FROM_HERE, kRenderTimelineInterval,
-      WTF::BindRepeating(&MediaControlTimelineElement::UpdateLiveTimeline,
-                         WrapWeakPersistent(this)));
-}
-
-void MediaControlTimelineElement::OnProgress() {
-  MaybeUpdateTimelineInterval();
-  RenderBarSegments();
-}
-
-void MediaControlTimelineElement::UpdateLiveTimeline() {
-  MaybeUpdateTimelineInterval();
-  RenderBarSegments();
-}
-
-void MediaControlTimelineElement::MaybeUpdateTimelineInterval() {
-  if (!is_live_ || !MediaElement().seekable()->length() || !live_anchor_time_)
-    return;
-
-  int last_seekable = MediaElement().seekable()->length() - 1;
-  double seekable_start =
-      MediaElement().seekable()->start(last_seekable, ASSERT_NO_EXCEPTION);
-  double seekable_end =
-      MediaElement().seekable()->end(last_seekable, ASSERT_NO_EXCEPTION);
-  double expected_media_time_now =
-      live_anchor_time_->media_time_ +
-      (base::TimeTicks::Now() - live_anchor_time_->clock_time_).InSecondsF();
-
-  // Cap the current live time in seekable range.
-  if (expected_media_time_now > seekable_end) {
-    live_anchor_time_->media_time_ = seekable_end;
-    live_anchor_time_->clock_time_ = base::TimeTicks::Now();
-    expected_media_time_now = seekable_end;
-  }
-
-  SetFloatingPointAttribute(html_names::kMinAttr, seekable_start);
-  SetFloatingPointAttribute(html_names::kMaxAttr, expected_media_time_now);
-}
-
 void MediaControlTimelineElement::RenderBarSegments() {
   SetupBarSegments();
 
@@ -239,16 +174,6 @@
   // buffered range containing the current play head.
   TimeRanges* buffered_time_ranges = MediaElement().buffered();
   DCHECK(buffered_time_ranges);
-
-  // Calculate |current_time| and |duration| for live media base on the timeline
-  // value since timeline's minimum value is not necessarily zero.
-  if (is_live_) {
-    current_time =
-        value().ToDouble() - GetFloatingPointAttribute(html_names::kMinAttr);
-    duration = GetFloatingPointAttribute(html_names::kMaxAttr) -
-               GetFloatingPointAttribute(html_names::kMinAttr);
-  }
-
   if (std::isnan(duration) || std::isinf(duration) || !duration ||
       std::isnan(current_time)) {
     SetBeforeSegmentPosition(MediaControlSliderElement::Position(0, 0));
diff --git a/third_party/blink/renderer/modules/media_controls/elements/media_control_timeline_element.h b/third_party/blink/renderer/modules/media_controls/elements/media_control_timeline_element.h
index f0c62f0..c40ec8d 100644
--- a/third_party/blink/renderer/modules/media_controls/elements/media_control_timeline_element.h
+++ b/third_party/blink/renderer/modules/media_controls/elements/media_control_timeline_element.h
@@ -5,9 +5,6 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIA_CONTROLS_ELEMENTS_MEDIA_CONTROL_TIMELINE_ELEMENT_H_
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIA_CONTROLS_ELEMENTS_MEDIA_CONTROL_TIMELINE_ELEMENT_H_
 
-#include "base/time/time.h"
-#include "base/timer/timer.h"
-#include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/renderer/modules/media_controls/elements/media_control_slider_element.h"
 #include "third_party/blink/renderer/modules/modules_export.h"
 
@@ -31,10 +28,6 @@
 
   void OnMediaKeyboardEvent(Event* event) { DefaultEventHandler(*event); }
 
-  void OnMediaPlaying();
-  void OnMediaStoppedPlaying();
-  void OnProgress();
-
   void RenderBarSegments();
 
   // Inform the timeline that the Media Controls have been shown or hidden.
@@ -47,18 +40,9 @@
   const char* GetNameForHistograms() const override;
 
  private:
-  // Struct used to track the current live time.
-  struct LiveAnchorTime {
-    base::TimeTicks clock_time_;
-    double media_time_ = 0;
-  };
-
   void DefaultEventHandler(Event&) override;
   bool KeepEventInNode(const Event&) const override;
 
-  void UpdateLiveTimeline();
-  void MaybeUpdateTimelineInterval();
-
   // Checks if we can begin or end a scrubbing event. If the event is a pointer
   // event then it needs to start and end with valid pointer events. If the
   // event is a pointer event followed by a touch event then it can only be
@@ -71,14 +55,6 @@
   bool is_touching_ = false;
 
   bool controls_hidden_ = false;
-
-  bool is_scrubbing_ = false;
-
-  bool is_live_ = false;
-
-  absl::optional<LiveAnchorTime> live_anchor_time_;
-
-  base::RepeatingTimer render_timeline_timer_;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/modules/media_controls/media_controls_impl.cc b/third_party/blink/renderer/modules/media_controls/media_controls_impl.cc
index 1b17f93..a260d500 100644
--- a/third_party/blink/renderer/modules/media_controls/media_controls_impl.cc
+++ b/third_party/blink/renderer/modules/media_controls/media_controls_impl.cc
@@ -1864,13 +1864,11 @@
 void MediaControlsImpl::OnPlaying() {
   StartHideMediaControlsTimer();
   UpdateCSSClassFromState();
-  timeline_->OnMediaPlaying();
 }
 
 void MediaControlsImpl::OnPause() {
   UpdatePlayState();
   UpdateTimeIndicators();
-  timeline_->OnMediaStoppedPlaying();
   MakeOpaque();
 
   StopHideMediaControlsTimer();
@@ -1995,7 +1993,7 @@
 }
 
 void MediaControlsImpl::OnLoadingProgress() {
-  timeline_->OnProgress();
+  timeline_->RenderBarSegments();
 }
 
 void MediaControlsImpl::ComputeWhichControlsFit() {
@@ -2195,7 +2193,6 @@
 }
 
 void MediaControlsImpl::OnWaiting() {
-  timeline_->OnMediaStoppedPlaying();
   UpdateCSSClassFromState();
 }
 
diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_script_cached_metadata_handler.cc b/third_party/blink/renderer/modules/service_worker/service_worker_script_cached_metadata_handler.cc
index 883e608..3d8a8bd 100644
--- a/third_party/blink/renderer/modules/service_worker/service_worker_script_cached_metadata_handler.cc
+++ b/third_party/blink/renderer/modules/service_worker/service_worker_script_cached_metadata_handler.cc
@@ -60,7 +60,8 @@
 
 scoped_refptr<CachedMetadata>
 ServiceWorkerScriptCachedMetadataHandler::GetCachedMetadata(
-    uint32_t data_type_id) const {
+    uint32_t data_type_id,
+    GetCachedMetadataBehavior behavior) const {
   if (!cached_metadata_ || cached_metadata_->DataTypeID() != data_type_id)
     return nullptr;
   return cached_metadata_;
diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_script_cached_metadata_handler.h b/third_party/blink/renderer/modules/service_worker/service_worker_script_cached_metadata_handler.h
index 0ff8c93eb..91df026 100644
--- a/third_party/blink/renderer/modules/service_worker/service_worker_script_cached_metadata_handler.h
+++ b/third_party/blink/renderer/modules/service_worker/service_worker_script_cached_metadata_handler.h
@@ -32,7 +32,8 @@
   void ClearCachedMetadata(blink::mojom::CodeCacheHost*,
                            ClearCacheType) override;
   scoped_refptr<CachedMetadata> GetCachedMetadata(
-      uint32_t data_type_id) const override;
+      uint32_t data_type_id,
+      GetCachedMetadataBehavior behavior = kCrashIfUnchecked) const override;
   String Encoding() const override;
   bool IsServedFromCacheStorage() const override;
   void OnMemoryDump(WebProcessMemoryDump* pmd,
diff --git a/third_party/blink/renderer/modules/webaudio/audio_worklet_global_scope_test.cc b/third_party/blink/renderer/modules/webaudio/audio_worklet_global_scope_test.cc
index eaa35b1..23e0da6 100644
--- a/third_party/blink/renderer/modules/webaudio/audio_worklet_global_scope_test.cc
+++ b/third_party/blink/renderer/modules/webaudio/audio_worklet_global_scope_test.cc
@@ -152,8 +152,8 @@
         global_scope->ScriptController()->GetScriptState();
     EXPECT_TRUE(script_state);
     KURL js_url("https://example.com/worklet.js");
-    v8::Local<v8::Module> module = ModuleTestBase::CompileModule(
-        script_state->GetIsolate(), source_code, js_url);
+    v8::Local<v8::Module> module =
+        ModuleTestBase::CompileModule(script_state, source_code, js_url);
     EXPECT_FALSE(module.IsEmpty());
     ScriptValue exception =
         ModuleRecord::Instantiate(script_state, module, js_url);
diff --git a/third_party/blink/renderer/modules/webaudio/audio_worklet_thread_test.cc b/third_party/blink/renderer/modules/webaudio/audio_worklet_thread_test.cc
index 8de1b80..0125105 100644
--- a/third_party/blink/renderer/modules/webaudio/audio_worklet_thread_test.cc
+++ b/third_party/blink/renderer/modules/webaudio/audio_worklet_thread_test.cc
@@ -123,7 +123,7 @@
     ScriptState::Scope scope(script_state);
     KURL js_url("https://example.com/worklet.js");
     v8::Local<v8::Module> module = ModuleTestBase::CompileModule(
-        script_state->GetIsolate(), "var counter = 0; ++counter;", js_url);
+        script_state, "var counter = 0; ++counter;", js_url);
     EXPECT_FALSE(module.IsEmpty());
     ScriptValue exception =
         ModuleRecord::Instantiate(script_state, module, js_url);
diff --git a/third_party/blink/renderer/modules/webtransport/web_transport.cc b/third_party/blink/renderer/modules/webtransport/web_transport.cc
index 37832e8..14a3e944 100644
--- a/third_party/blink/renderer/modules/webtransport/web_transport.cc
+++ b/third_party/blink/renderer/modules/webtransport/web_transport.cc
@@ -840,10 +840,13 @@
                                           bool fin_received) {
   DVLOG(1) << "WebTransport::OnIncomingStreamClosed(" << stream_id << ", "
            << fin_received << ") this=" << this;
-  WebTransportStream* stream = stream_map_.DeprecatedAtOrEmptyValue(stream_id);
-  // |stream| can be unset because of races between different ways of closing
-  // |bidirectional streams.
-  if (stream) {
+  auto it = stream_map_.find(stream_id);
+
+  // The stream may have already been removed from the map because of races
+  // between different ways of closing bidirectional streams.
+  if (it != stream_map_.end()) {
+    WebTransportStream* stream = it->value;
+    DCHECK(stream);
     stream->OnIncomingStreamClosed(fin_received);
   }
 }
diff --git a/third_party/blink/renderer/modules/worklet/animation_and_paint_worklet_thread_test.cc b/third_party/blink/renderer/modules/worklet/animation_and_paint_worklet_thread_test.cc
index 928441f..16d0a25a 100644
--- a/third_party/blink/renderer/modules/worklet/animation_and_paint_worklet_thread_test.cc
+++ b/third_party/blink/renderer/modules/worklet/animation_and_paint_worklet_thread_test.cc
@@ -83,7 +83,7 @@
     ScriptState::Scope scope(script_state);
     const KURL js_url("https://example.com/foo.js");
     v8::Local<v8::Module> module = ModuleTestBase::CompileModule(
-        script_state->GetIsolate(), "var counter = 0; ++counter;", js_url);
+        script_state, "var counter = 0; ++counter;", js_url);
     EXPECT_FALSE(module.IsEmpty());
     ScriptValue exception =
         ModuleRecord::Instantiate(script_state, module, js_url);
diff --git a/third_party/blink/renderer/platform/bindings/exception_state.h b/third_party/blink/renderer/platform/bindings/exception_state.h
index 051d742..9ba5753 100644
--- a/third_party/blink/renderer/platform/bindings/exception_state.h
+++ b/third_party/blink/renderer/platform/bindings/exception_state.h
@@ -206,7 +206,7 @@
 
   const String& Message() const { return message_; }
 
-  v8::Local<v8::Value> GetException() {
+  virtual v8::Local<v8::Value> GetException() {
     DCHECK(!exception_.IsEmpty());
     return exception_.NewLocal(isolate_);
   }
@@ -319,6 +319,9 @@
   void ThrowWasmCompileError(const String& message) override;
   void RethrowV8Exception(v8::Local<v8::Value>) override;
   ExceptionState& ReturnThis() { return *this; }
+  v8::Local<v8::Value> GetException() override {
+    return v8::Local<v8::Value>();
+  }
 };
 
 // Syntax sugar for DummyExceptionStateForTesting.
diff --git a/third_party/blink/renderer/platform/loader/fetch/raw_resource.h b/third_party/blink/renderer/platform/loader/fetch/raw_resource.h
index 3608238f..e13e7fc 100644
--- a/third_party/blink/renderer/platform/loader/fetch/raw_resource.h
+++ b/third_party/blink/renderer/platform/loader/fetch/raw_resource.h
@@ -40,7 +40,9 @@
 class RawResourceClient;
 class ResourceFetcher;
 
-class PLATFORM_EXPORT RawResource final : public Resource {
+// TODO(chromium:1210399): Make RawResource final again once
+// ResourceLoaderCodeCacheTest is moved to blink_unittests.
+class PLATFORM_EXPORT RawResource : public Resource {
  public:
   static RawResource* FetchSynchronously(FetchParameters&,
                                          ResourceFetcher*,
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource.cc b/third_party/blink/renderer/platform/loader/fetch/resource.cc
index e0d73a1..75b91ab 100644
--- a/third_party/blink/renderer/platform/loader/fetch/resource.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/resource.cc
@@ -528,6 +528,10 @@
   DCHECK(!GetResponse().IsNull());
 }
 
+bool Resource::CodeCacheHashRequired() const {
+  return false;
+}
+
 String Resource::ReasonNotDeletable() const {
   StringBuilder builder;
   if (HasClientsOrObservers()) {
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource.h b/third_party/blink/renderer/platform/loader/fetch/resource.h
index f6983bc3..af5d5d36 100644
--- a/third_party/blink/renderer/platform/loader/fetch/resource.h
+++ b/third_party/blink/renderer/platform/loader/fetch/resource.h
@@ -273,6 +273,13 @@
   // should implement the resource-specific behavior.
   virtual void SetSerializedCachedMetadata(mojo_base::BigBuffer data);
 
+  // Gets whether the serialized cached metadata must contain a hash of the
+  // source text. For resources other than ScriptResource, this is always false.
+  // TODO(chromium:1210399): This can be true in non-ScriptResource in unit
+  // tests. Fix this once ResourceLoaderCodeCacheTest is moved to
+  // blink_unittests.
+  virtual bool CodeCacheHashRequired() const;
+
   AtomicString HttpContentType() const;
 
   bool WasCanceled() const { return error_ && error_->IsCancellation(); }
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_load_timing.cc b/third_party/blink/renderer/platform/loader/fetch/resource_load_timing.cc
index 94af06e..c0e09a2d 100644
--- a/third_party/blink/renderer/platform/loader/fetch/resource_load_timing.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/resource_load_timing.cc
@@ -5,7 +5,6 @@
 #include "third_party/blink/renderer/platform/loader/fetch/resource_load_timing.h"
 
 #include "services/network/public/mojom/load_timing_info.mojom-blink.h"
-#include "third_party/blink/renderer/platform/instrumentation/tracing/trace_event.h"
 
 namespace blink {
 
@@ -158,8 +157,6 @@
 }
 
 void ResourceLoadTiming::SetSendStart(base::TimeTicks send_start) {
-  TRACE_EVENT_MARK_WITH_TIMESTAMP0("blink.user_timing", "requestStart",
-                                   send_start);
   send_start_ = send_start;
 }
 
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_loader.cc b/third_party/blink/renderer/platform/loader/fetch/resource_loader.cc
index db6acc9..8a087e2 100644
--- a/third_party/blink/renderer/platform/loader/fetch/resource_loader.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/resource_loader.cc
@@ -231,7 +231,10 @@
       : status_(kNoRequestSent),
         code_cache_loader_(std::move(code_cache_loader)),
         url_(url),
-        freeze_mode_(freeze_mode) {
+        freeze_mode_(freeze_mode),
+        should_use_source_hash_(
+            SchemeRegistry::SchemeSupportsCodeCacheWithHashing(
+                url.Protocol())) {
     DCHECK(RuntimeEnabledFeatures::IsolatedCodeCacheEnabled());
   }
 
@@ -285,6 +288,14 @@
   base::Time cached_code_response_time_;
   base::Time resource_response_time_;
   bool use_isolated_code_cache_ = false;
+  bool resource_response_arrived_ = false;
+
+  // Whether this response should use a hash of the source text to check
+  // whether a code cache entry is valid, rather than relying on response time.
+  // This could be computed as-needed based on url_, but doing so would require
+  // converting url_ from WebURL to KURL each time.
+  const bool should_use_source_hash_;
+
   base::WeakPtrFactory<CodeCacheRequest> weak_ptr_factory_{this};
 };
 
@@ -316,6 +327,7 @@
     const base::Time& resource_response_time,
     bool use_isolated_code_cache,
     ResourceLoader* resource_loader) {
+  resource_response_arrived_ = true;
   resource_response_time_ = resource_response_time;
   use_isolated_code_cache_ = use_isolated_code_cache;
   MaybeSendCachedCode(std::move(cached_code_), resource_loader);
@@ -357,7 +369,7 @@
   status_ = kReceivedResponse;
   cached_code_response_time_ = response_time;
 
-  if (resource_response_time_.is_null()) {
+  if (!resource_response_arrived_) {
     // Wait for the response before we can send the cached code.
     // TODO(crbug.com/866889): Pass this as a handle to avoid the overhead of
     // copying this data.
@@ -371,24 +383,43 @@
 void ResourceLoader::CodeCacheRequest::MaybeSendCachedCode(
     mojo_base::BigBuffer data,
     ResourceLoader* resource_loader) {
-  if (status_ != kReceivedResponse || cached_code_response_time_.is_null() ||
-      resource_response_time_.is_null()) {
+  // Wait until both responses have arrived; they can happen in either order.
+  if (status_ != kReceivedResponse || !resource_response_arrived_) {
     return;
   }
 
+  auto ClearCachedCodeIfPresent = [&]() {
+    if (data.size() != 0) {
+      resource_loader->ClearCachedCode();
+    }
+  };
+
   // If the resource was fetched for service worker script or was served from
   // CacheStorage via service worker then they maintain their own code cache.
   // We should not use the isolated cache.
   if (!use_isolated_code_cache_) {
-    resource_loader->ClearCachedCode();
+    ClearCachedCodeIfPresent();
     return;
   }
 
-  // If the timestamps don't match, the code cache data may be for a different
-  // response. See https://crbug.com/1099587.
-  if (resource_response_time_ != cached_code_response_time_) {
-    resource_loader->ClearCachedCode();
-    return;
+  if (should_use_source_hash_) {
+    // This resource should use a source text hash rather than a response time
+    // comparison.
+    if (!resource_loader->resource_->CodeCacheHashRequired()) {
+      // This kind of Resource doesn't support requiring a hash, so we can't
+      // send cached code to it.
+      ClearCachedCodeIfPresent();
+      return;
+    }
+  } else {
+    // If the timestamps don't match or are null, the code cache data may be for
+    // a different response. See https://crbug.com/1099587.
+    if (cached_code_response_time_.is_null() ||
+        resource_response_time_.is_null() ||
+        resource_response_time_ != cached_code_response_time_) {
+      ClearCachedCodeIfPresent();
+      return;
+    }
   }
 
   if (data.size() > 0) {
@@ -461,8 +492,14 @@
     return false;
 
   const ResourceRequestHead& request = resource_->GetResourceRequest();
-  if (!request.Url().ProtocolIsInHTTPFamily())
+  // Aside from http and https, the only other supported protocols are those
+  // listed in the SchemeRegistry as requiring a content equality check.
+  bool should_use_source_hash =
+      SchemeRegistry::SchemeSupportsCodeCacheWithHashing(
+          request.Url().Protocol());
+  if (!request.Url().ProtocolIsInHTTPFamily() && !should_use_source_hash) {
     return false;
+  }
   // When loading the service worker scripts, we don't need to check the
   // GeneratedCodeCache. The code cache corresponding to these scripts is in
   // the service worker's "installed script storage" and would be fetched along
@@ -485,8 +522,13 @@
   // These fetches should be cheap, however, requiring one additional IPC and
   // no browser process disk IO since the cache index is in memory and the
   // resource key should not be present.
+  //
+  // The only case where it's easy to skip a kRaw resource is when a content
+  // equality check is required, because only ScriptResource supports that
+  // requirement.
   return resource_->GetType() == ResourceType::kScript ||
-         resource_->GetType() == ResourceType::kRaw;
+         (resource_->GetType() == ResourceType::kRaw &&
+          !should_use_source_hash);
 }
 
 void ResourceLoader::Start() {
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_loader_test.cc b/third_party/blink/renderer/platform/loader/fetch/resource_loader_test.cc
index 03aa6f5..c421b33 100644
--- a/third_party/blink/renderer/platform/loader/fetch/resource_loader_test.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/resource_loader_test.cc
@@ -30,6 +30,7 @@
 #include "third_party/blink/renderer/platform/testing/code_cache_loader_mock.h"
 #include "third_party/blink/renderer/platform/testing/mock_context_lifecycle_notifier.h"
 #include "third_party/blink/renderer/platform/testing/testing_platform_support_with_mock_scheduler.h"
+#include "third_party/blink/renderer/platform/weborigin/scheme_registry.h"
 #include "third_party/blink/renderer/platform/wtf/text/string_builder.h"
 
 namespace blink {
@@ -77,7 +78,8 @@
   const KURL foo_url_;
   const KURL bar_url_;
 
-  class NoopLoaderFactory final : public ResourceFetcher::LoaderFactory {
+  class NoopLoaderFactory : public ResourceFetcher::LoaderFactory {
+   public:
     std::unique_ptr<WebURLLoader> CreateURLLoader(
         const ResourceRequest& request,
         const ResourceLoaderOptions& options,
@@ -99,10 +101,13 @@
 
   ResourceFetcher* MakeResourceFetcher(
       TestResourceFetcherProperties* properties,
-      FetchContext* context) {
+      FetchContext* context,
+      ResourceFetcher::LoaderFactory* loader_factory = nullptr) {
     return MakeGarbageCollected<ResourceFetcher>(ResourceFetcherInit(
         properties->MakeDetachable(), context, CreateTaskRunner(),
-        CreateTaskRunner(), MakeGarbageCollected<NoopLoaderFactory>(),
+        CreateTaskRunner(),
+        loader_factory ? loader_factory
+                       : MakeGarbageCollected<NoopLoaderFactory>(),
         MakeGarbageCollected<MockContextLifecycleNotifier>(),
         nullptr /* back_forward_cache_loader_helper */));
   }
@@ -836,4 +841,203 @@
   ExpectHistogramsMatching(info);
 }
 
+// TODO(chromium:1210399): Move this to blink_unittests and use ScriptResource.
+class ResourceLoaderCodeCacheTest : public ResourceLoaderTest {
+ public:
+  ResourceLoaderCodeCacheTest() = default;
+
+ protected:
+  class CodeCacheTestLoaderFactory final : public NoopLoaderFactory {
+   public:
+    explicit CodeCacheTestLoaderFactory(
+        scoped_refptr<CodeCacheLoaderMock::Controller> controller)
+        : controller_(std::move(controller)) {}
+    std::unique_ptr<WebCodeCacheLoader> CreateCodeCacheLoader() override {
+      return std::make_unique<CodeCacheLoaderMock>(controller_);
+    }
+
+   private:
+    scoped_refptr<CodeCacheLoaderMock::Controller> controller_;
+  };
+
+  // A version of RawResource that overrides a few virtual methods so that we
+  // can observe how ResourceLoader is calling functions on its Resource.
+  class TestRawResource : public RawResource {
+   public:
+    TestRawResource(const ResourceRequest& resource_request,
+                    ResourceType type,
+                    const ResourceLoaderOptions& options)
+        : RawResource(resource_request, type, options) {}
+
+    bool CodeCacheHashRequired() const override {
+      return code_cache_hash_required_;
+    }
+    void SetSerializedCachedMetadata(mojo_base::BigBuffer data) override {
+      cached_metadata_ = std::move(data);
+    }
+
+    const mojo_base::BigBuffer* CachedMetadata() {
+      return cached_metadata_ ? &*cached_metadata_ : nullptr;
+    }
+
+    void SetCodeCacheHashRequired(bool code_cache_hash_required) {
+      code_cache_hash_required_ = code_cache_hash_required;
+    }
+
+   private:
+    bool code_cache_hash_required_ = false;
+    absl::optional<mojo_base::BigBuffer> cached_metadata_;
+  };
+
+  class TestRawResourceFactory : public NonTextResourceFactory {
+   public:
+    TestRawResourceFactory() : NonTextResourceFactory(ResourceType::kScript) {}
+
+    Resource* Create(const ResourceRequest& request,
+                     const ResourceLoaderOptions& options) const override {
+      return MakeGarbageCollected<TestRawResource>(request, type_, options);
+    }
+  };
+
+  // All relevant variables after running CommonSetup.
+  struct State {
+    STACK_ALLOCATED();
+
+   public:
+    TestRawResource* resource;
+    ResourceLoader* loader;
+    ResourceResponse response;
+    scoped_refptr<CodeCacheLoaderMock::Controller> controller;
+  };
+
+  State CommonSetup(const char* url_string = nullptr) {
+    SchemeRegistry::RegisterURLSchemeAsCodeCacheWithHashing(
+        "codecachewithhashing");
+
+    State state;
+    auto* properties = MakeGarbageCollected<TestResourceFetcherProperties>();
+    FetchContext* context = MakeGarbageCollected<MockFetchContext>();
+    state.controller = base::MakeRefCounted<CodeCacheLoaderMock::Controller>();
+    state.controller->DelayResponse();
+    auto* loader_factory =
+        MakeGarbageCollected<CodeCacheTestLoaderFactory>(state.controller);
+    auto* fetcher = MakeResourceFetcher(properties, context, loader_factory);
+
+    KURL url(url_string ? url_string
+                        : "codecachewithhashing://www.example.com/");
+    ResourceRequest request(url);
+    request.SetRequestContext(mojom::blink::RequestContextType::SCRIPT);
+
+    FetchParameters params = FetchParameters::CreateForTest(std::move(request));
+    state.resource = static_cast<TestRawResource*>(
+        fetcher->RequestResource(params, TestRawResourceFactory(), nullptr));
+    state.resource->SetCodeCacheHashRequired(true);
+    state.loader = state.resource->Loader();
+
+    state.response = ResourceResponse(url);
+    state.response.SetHttpStatusCode(200);
+
+    return state;
+  }
+};
+
+TEST_F(ResourceLoaderCodeCacheTest, WebUICodeCacheEmptyResponseFirst) {
+  State state = CommonSetup();
+
+  state.loader->DidReceiveResponse(WrappedResourceResponse(state.response));
+
+  // Nothing has changed yet because the code cache hasn't yet responded.
+  EXPECT_EQ(state.resource->CachedMetadata(), nullptr);
+
+  // An empty code cache response means no data was found.
+  state.controller->Respond(base::Time(), mojo_base::BigBuffer());
+
+  // No code cache data was present.
+  EXPECT_EQ(state.resource->CachedMetadata(), nullptr);
+}
+
+TEST_F(ResourceLoaderCodeCacheTest, WebUICodeCacheEmptyResponseSecond) {
+  State state = CommonSetup();
+
+  // An empty code cache response means no data was found.
+  state.controller->Respond(base::Time(), mojo_base::BigBuffer());
+
+  // Nothing has changed yet because the content response hasn't arrived yet.
+  EXPECT_EQ(state.resource->CachedMetadata(), nullptr);
+
+  state.loader->DidReceiveResponse(WrappedResourceResponse(state.response));
+
+  // No code cache data was present.
+  EXPECT_EQ(state.resource->CachedMetadata(), nullptr);
+}
+
+TEST_F(ResourceLoaderCodeCacheTest, WebUICodeCacheFullResponseFirst) {
+  State state = CommonSetup();
+
+  state.loader->DidReceiveResponse(WrappedResourceResponse(state.response));
+
+  // Nothing has changed yet because the code cache hasn't yet responded.
+  EXPECT_EQ(state.resource->CachedMetadata(), nullptr);
+
+  const uint8_t data[] = {2, 3, 4, 5};
+  state.controller->Respond(base::Time(), mojo_base::BigBuffer(data));
+
+  // Code cache data was present.
+  ASSERT_TRUE(state.resource->CachedMetadata());
+  EXPECT_EQ(state.resource->CachedMetadata()->size(), 4UL);
+  EXPECT_EQ(state.resource->CachedMetadata()->data()[3], 5UL);
+}
+
+TEST_F(ResourceLoaderCodeCacheTest, WebUICodeCacheFullResponseSecond) {
+  State state = CommonSetup();
+
+  const uint8_t data[] = {2, 3, 4, 5};
+  state.controller->Respond(base::Time(), mojo_base::BigBuffer(data));
+
+  // Nothing has changed yet because the content response hasn't arrived yet.
+  EXPECT_EQ(state.resource->CachedMetadata(), nullptr);
+
+  state.loader->DidReceiveResponse(WrappedResourceResponse(state.response));
+
+  // Code cache data was present.
+  ASSERT_TRUE(state.resource->CachedMetadata());
+  EXPECT_EQ(state.resource->CachedMetadata()->size(), 4UL);
+  EXPECT_EQ(state.resource->CachedMetadata()->data()[3], 5UL);
+}
+
+TEST_F(ResourceLoaderCodeCacheTest,
+       WebUICodeCacheFullResponseSecondResourceDoesNotSupportHashing) {
+  State state = CommonSetup();
+  state.resource->SetCodeCacheHashRequired(false);
+
+  const uint8_t data[] = {2, 3, 4, 5};
+  state.controller->Respond(base::Time(), mojo_base::BigBuffer(data));
+
+  // Nothing has changed yet because the content response hasn't arrived yet.
+  EXPECT_EQ(state.resource->CachedMetadata(), nullptr);
+
+  state.loader->DidReceiveResponse(WrappedResourceResponse(state.response));
+
+  // Since the Resource didn't specify that a hash check is required,
+  // the cached metadata should not be set.
+  EXPECT_EQ(state.resource->CachedMetadata(), nullptr);
+}
+
+TEST_F(ResourceLoaderCodeCacheTest,
+       WebUICodeCacheFullResponseSecondHttpsScheme) {
+  State state = CommonSetup("https://www.example.com/");
+
+  const uint8_t data[] = {2, 3, 4, 5};
+  state.controller->Respond(base::Time(), mojo_base::BigBuffer(data));
+
+  // Nothing has changed yet because the content response hasn't arrived yet.
+  EXPECT_EQ(state.resource->CachedMetadata(), nullptr);
+
+  state.loader->DidReceiveResponse(WrappedResourceResponse(state.response));
+
+  // Since the URL was https, and the response times were not set, the cached
+  // metadata should not be set.
+  EXPECT_EQ(state.resource->CachedMetadata(), nullptr);
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/platform/loader/fetch/script_cached_metadata_handler.cc b/third_party/blink/renderer/platform/loader/fetch/script_cached_metadata_handler.cc
index c18e6da..55b8874 100644
--- a/third_party/blink/renderer/platform/loader/fetch/script_cached_metadata_handler.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/script_cached_metadata_handler.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/renderer/platform/loader/fetch/script_cached_metadata_handler.h"
 
 #include "base/metrics/histogram_macros.h"
+#include "third_party/blink/renderer/platform/crypto.h"
 #include "third_party/blink/renderer/platform/loader/fetch/cached_metadata.h"
 #include "third_party/blink/renderer/platform/loader/fetch/resource.h"
 
@@ -24,6 +25,8 @@
     std::unique_ptr<CachedMetadataSender> sender)
     : sender_(std::move(sender)), encoding_(encoding) {}
 
+ScriptCachedMetadataHandler::~ScriptCachedMetadataHandler() = default;
+
 void ScriptCachedMetadataHandler::Trace(Visitor* visitor) const {
   CachedMetadataHandler::Trace(visitor);
 }
@@ -63,7 +66,8 @@
 }
 
 scoped_refptr<CachedMetadata> ScriptCachedMetadataHandler::GetCachedMetadata(
-    uint32_t data_type_id) const {
+    uint32_t data_type_id,
+    GetCachedMetadataBehavior behavior) const {
   if (!cached_metadata_) {
     RecordState(cached_metadata_discarded_ ? StateOnGet::kWasDiscarded
                                            : StateOnGet::kWasNeverPresent);
@@ -122,4 +126,123 @@
   }
 }
 
+void ScriptCachedMetadataHandlerWithHashing::Check(
+    blink::mojom::CodeCacheHost* code_cache_host,
+    const ParkableString& source_text) {
+  // If we already attempted to Check once and couldn't compute the hash, just
+  // give up.
+  if (hash_state_ == kFailedToCheck)
+    return;
+
+  DigestValue digest;
+  const String& unparked = source_text.ToString();
+  if (!ComputeDigest(kHashAlgorithmSha256,
+                     static_cast<const char*>(unparked.Bytes()),
+                     unparked.CharactersSizeInBytes(), digest)) {
+    // Something went wrong computing the hash. We can't use the cached
+    // metadata, but we don't need to clear it on disk.
+    ClearCachedMetadata(code_cache_host, kClearLocally);
+    hash_state_ = kFailedToCheck;
+    return;
+  }
+  CHECK_EQ(digest.size(), kSha256Bytes);
+
+  if (hash_state_ != kUninitialized) {
+    // Compare the hash of the new source text with the one previously loaded.
+    if (memcmp(digest.data(), hash_, kSha256Bytes) != 0) {
+      // If this handler was previously checked and is now being checked again
+      // with a different hash value, then something bad happened. We expect the
+      // handler to only be used with one script source text.
+      CHECK_NE(hash_state_, kChecked);
+
+      // The cached metadata is invalid because the source file has changed.
+      ClearCachedMetadata(code_cache_host, kClearPersistentStorage);
+    }
+  }
+
+  // Remember the computed hash so that it can be used when saving data to
+  // persistent storage.
+  memcpy(hash_, digest.data(), kSha256Bytes);
+  hash_state_ = kChecked;
+}
+
+void ScriptCachedMetadataHandlerWithHashing::SetSerializedCachedMetadata(
+    mojo_base::BigBuffer data) {
+  // We only expect to receive cached metadata from the platform once. If this
+  // triggers, it indicates an efficiency problem which is most likely
+  // unexpected in code designed to improve performance.
+  DCHECK(!cached_metadata_);
+  DCHECK_EQ(hash_state_, kUninitialized);
+
+  // kChecked and kFailedToCheck states guarantees that hash_ will never be
+  // updated again.
+  CHECK(hash_state_ != kChecked && hash_state_ != kFailedToCheck);
+
+  const uint32_t kMetadataTypeSize = sizeof(uint32_t);
+  const uint32_t kHashingHeaderSize = kMetadataTypeSize + kSha256Bytes;
+
+  // Ensure the data is big enough, otherwise discard the data.
+  if (data.size() < kHashingHeaderSize)
+    return;
+  // Ensure the marker matches, otherwise discard the data.
+  if (*reinterpret_cast<const uint32_t*>(data.data()) !=
+      CachedMetadataHandler::kSingleEntryWithHash) {
+    return;
+  }
+
+  // Split out the data into the hash and the CachedMetadata that follows.
+  memcpy(hash_, data.data() + kMetadataTypeSize, kSha256Bytes);
+  hash_state_ = kDeserialized;
+  cached_metadata_ = CachedMetadata::CreateFromSerializedData(
+      data.data() + kHashingHeaderSize, data.size() - kHashingHeaderSize);
+}
+
+scoped_refptr<CachedMetadata>
+ScriptCachedMetadataHandlerWithHashing::GetCachedMetadata(
+    uint32_t data_type_id,
+    GetCachedMetadataBehavior behavior) const {
+  // The caller should have called Check before attempting to read the cached
+  // metadata. If you just want to know whether cached metadata exists, and it's
+  // okay for that metadata to possibly mismatch with the loaded script content,
+  // then you can pass kAllowUnchecked as the second parameter.
+  if (behavior == kCrashIfUnchecked) {
+    CHECK(hash_state_ == kChecked || hash_state_ == kFailedToCheck);
+  }
+
+  scoped_refptr<CachedMetadata> result =
+      ScriptCachedMetadataHandler::GetCachedMetadata(data_type_id, behavior);
+
+  // The cached metadata should have been cleared if hash computation failed.
+  if (hash_state_ == kFailedToCheck) {
+    CHECK_EQ(result, nullptr);
+  }
+
+  return result;
+}
+
+void ScriptCachedMetadataHandlerWithHashing::CommitToPersistentStorage(
+    blink::mojom::CodeCacheHost* code_cache_host) {
+  Vector<uint8_t> serialized_data = GetSerializedCachedMetadata();
+  Sender()->Send(code_cache_host, serialized_data.data(),
+                 serialized_data.size());
+}
+
+Vector<uint8_t>
+ScriptCachedMetadataHandlerWithHashing::GetSerializedCachedMetadata() const {
+  Vector<uint8_t> serialized_data;
+  if (cached_metadata_ && hash_state_ == kChecked) {
+    uint32_t marker = CachedMetadataHandler::kSingleEntryWithHash;
+    serialized_data.Append(reinterpret_cast<uint8_t*>(&marker), sizeof(marker));
+    serialized_data.Append(hash_, kSha256Bytes);
+    base::span<const uint8_t> data = cached_metadata_->SerializedData();
+    serialized_data.Append(data.data(), data.size());
+  }
+  return serialized_data;
+}
+
+void ScriptCachedMetadataHandlerWithHashing::ResetForTesting() {
+  if (hash_state_ == kChecked)
+    hash_state_ = kDeserialized;
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/platform/loader/fetch/script_cached_metadata_handler.h b/third_party/blink/renderer/platform/loader/fetch/script_cached_metadata_handler.h
index c18f809..3eb36e18 100644
--- a/third_party/blink/renderer/platform/loader/fetch/script_cached_metadata_handler.h
+++ b/third_party/blink/renderer/platform/loader/fetch/script_cached_metadata_handler.h
@@ -27,12 +27,12 @@
 // (not by Resource) by the browser process, and the cached metadata written to
 // the handler is rejected if e.g. the disk cache entry has been updated and the
 // handler refers to an older response.
-class PLATFORM_EXPORT ScriptCachedMetadataHandler final
+class PLATFORM_EXPORT ScriptCachedMetadataHandler
     : public SingleCachedMetadataHandler {
  public:
   ScriptCachedMetadataHandler(const WTF::TextEncoding&,
                               std::unique_ptr<CachedMetadataSender>);
-  ~ScriptCachedMetadataHandler() override = default;
+  ~ScriptCachedMetadataHandler() override;
   void Trace(Visitor*) const override;
   void SetCachedMetadata(blink::mojom::CodeCacheHost*,
                          uint32_t,
@@ -40,7 +40,9 @@
                          size_t) override;
   void ClearCachedMetadata(blink::mojom::CodeCacheHost*,
                            ClearCacheType) override;
-  scoped_refptr<CachedMetadata> GetCachedMetadata(uint32_t) const override;
+  scoped_refptr<CachedMetadata> GetCachedMetadata(
+      uint32_t,
+      GetCachedMetadataBehavior = kCrashIfUnchecked) const override;
 
   // This returns the encoding at the time of ResponseReceived(). Therefore this
   // does NOT reflect encoding detection from body contents, but the actual
@@ -56,21 +58,72 @@
                     const String& dump_prefix) const override;
 
   // Sets the serialized metadata retrieved from the platform's cache.
-  void SetSerializedCachedMetadata(mojo_base::BigBuffer data);
+  virtual void SetSerializedCachedMetadata(mojo_base::BigBuffer data);
   size_t GetCodeCacheSize() const override;
 
+ protected:
+  virtual void CommitToPersistentStorage(blink::mojom::CodeCacheHost*);
+
+  CachedMetadataSender* Sender() const { return sender_.get(); }
+
+  scoped_refptr<CachedMetadata> cached_metadata_;
+
  private:
   friend class ModuleScriptTest;
 
-  void CommitToPersistentStorage(blink::mojom::CodeCacheHost*);
-
-  scoped_refptr<CachedMetadata> cached_metadata_;
   bool cached_metadata_discarded_ = false;
   std::unique_ptr<CachedMetadataSender> sender_;
 
   const WTF::TextEncoding encoding_;
 };
 
+class PLATFORM_EXPORT ScriptCachedMetadataHandlerWithHashing final
+    : public ScriptCachedMetadataHandler {
+ public:
+  ScriptCachedMetadataHandlerWithHashing(
+      const WTF::TextEncoding& encoding,
+      std::unique_ptr<CachedMetadataSender> sender)
+      : ScriptCachedMetadataHandler(encoding, std::move(sender)) {}
+  ~ScriptCachedMetadataHandlerWithHashing() override = default;
+
+  // Sets the serialized metadata retrieved from the platform's cache.
+  void SetSerializedCachedMetadata(mojo_base::BigBuffer data) override;
+
+  bool HashRequired() const override { return true; }
+
+  scoped_refptr<CachedMetadata> GetCachedMetadata(
+      uint32_t,
+      GetCachedMetadataBehavior = kCrashIfUnchecked) const override;
+
+  // Pretend that the current content and hash were loaded from disk, not
+  // created by the current process.
+  void ResetForTesting();
+
+  void Check(blink::mojom::CodeCacheHost*,
+             const ParkableString& source_text) override;
+
+  Vector<uint8_t> GetSerializedCachedMetadata() const;
+
+ protected:
+  void CommitToPersistentStorage(blink::mojom::CodeCacheHost*) override;
+
+ private:
+  static const uint32_t kSha256Bytes = 256 / 8;
+  uint8_t hash_[kSha256Bytes];
+  enum HashState {
+    kUninitialized,  // hash_ has not been written.
+    kDeserialized,   // hash_ contains data from the code cache that has not yet
+                     // been checked for matching the script text.
+
+    // Terminal states: once hash_state_ reaches one of the following, neither
+    // hash_state_ nor hash_ will ever change again.
+
+    kChecked,        // hash_ contains the hash of the script text.
+    kFailedToCheck,  // hash_ contains garbage. Computing the hash failed.
+  };
+  HashState hash_state_ = kUninitialized;
+};
+
 // Describes a few interesting states of the ScriptCachedMetadataHandler when
 // GetCachedMetadata() is called. These values are written to logs. New enum
 // values can be added, but existing enums must never be renumbered or deleted
diff --git a/third_party/blink/renderer/platform/loader/fetch/source_keyed_cached_metadata_handler.cc b/third_party/blink/renderer/platform/loader/fetch/source_keyed_cached_metadata_handler.cc
index 1787f87..2838252 100644
--- a/third_party/blink/renderer/platform/loader/fetch/source_keyed_cached_metadata_handler.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/source_keyed_cached_metadata_handler.cc
@@ -46,7 +46,8 @@
   }
 
   scoped_refptr<CachedMetadata> GetCachedMetadata(
-      uint32_t data_type_id) const override {
+      uint32_t data_type_id,
+      GetCachedMetadataBehavior behavior = kCrashIfUnchecked) const override {
     scoped_refptr<CachedMetadata> cached_metadata =
         parent_->cached_metadata_map_.at(key_);
     if (!cached_metadata || cached_metadata->DataTypeID() != data_type_id)
diff --git a/third_party/blink/renderer/platform/loader/fetch/url_loader/cached_metadata_handler.h b/third_party/blink/renderer/platform/loader/fetch/url_loader/cached_metadata_handler.h
index 17f0d44..a577739 100644
--- a/third_party/blink/renderer/platform/loader/fetch/url_loader/cached_metadata_handler.h
+++ b/third_party/blink/renderer/platform/loader/fetch/url_loader/cached_metadata_handler.h
@@ -18,6 +18,7 @@
 namespace blink {
 
 class CachedMetadata;
+class ParkableString;
 class ResourceResponse;
 class WebProcessMemoryDump;
 
@@ -76,9 +77,11 @@
   // Enum for marking serialized cached metadatas so that the deserializers
   // do not conflict.
   enum CachedMetadataType : uint32_t {
-    kSingleEntry,    // the metadata is a single CachedMetadata entry
-    kSourceKeyedMap  // the metadata is multiple CachedMetadata entries keyed by
-                     // a source string.
+    kSingleEntry,     // the metadata is a single CachedMetadata entry
+    kSourceKeyedMap,  // the metadata is multiple CachedMetadata entries keyed
+                      // by a source string.
+    kSingleEntryWithHash  // the metadata is a content hash followed by a single
+                          // CachedMetadata entry
   };
 
   virtual ~CachedMetadataHandler() = default;
@@ -121,13 +124,43 @@
     disable_send_to_platform_for_testing_ = true;
   }
 
+  // Defines how GetCodeCache should behave if the metadata handler requires a
+  // hash check but Check() hasn't yet been called.
+  enum GetCachedMetadataBehavior {
+    // HasCodeCache should crash the program with a runtime CHECK().
+    kCrashIfUnchecked,
+
+    // HasCodeCache should return true if the metadata handler contains data,
+    // even though that data might be stale because we haven't yet validated
+    // that it matches the current version of the script resource.
+    kAllowUnchecked,
+  };
+
   // Returns cached metadata of the given type associated with this resource.
   // This cached metadata can be pruned at any time.
   virtual scoped_refptr<CachedMetadata> GetCachedMetadata(
-      uint32_t data_type_id) const = 0;
+      uint32_t data_type_id,
+      GetCachedMetadataBehavior behavior = kCrashIfUnchecked) const = 0;
+
+  // Whether this cached metadata is required to contain a source text hash,
+  // which is used in V8CodeCache to check whether the text of a newly-loaded
+  // script matches the text when the code cache entry was written.
+  virtual bool HashRequired() const { return false; }
+
+  // If the handler requires source hashing, then Check does the following:
+  // 1. If cached metadata is present, check the hash on the cached metadata,
+  //    and clear it on a mismatch.
+  // 2. Remember the source hash so that it will be included on any future calls
+  //    that commit data to persistent storage.
+  // Calling Check multiple times with different source_text is disallowed.
+  virtual void Check(blink::mojom::CodeCacheHost*,
+                     const ParkableString& source_text) {
+    // Do nothing.
+  }
 
  protected:
   SingleCachedMetadataHandler() = default;
+
   bool disable_send_to_platform_for_testing_ = false;
 };
 
diff --git a/third_party/blink/renderer/platform/testing/code_cache_loader_mock.cc b/third_party/blink/renderer/platform/testing/code_cache_loader_mock.cc
index df5ba5e..70cdf2a 100644
--- a/third_party/blink/renderer/platform/testing/code_cache_loader_mock.cc
+++ b/third_party/blink/renderer/platform/testing/code_cache_loader_mock.cc
@@ -10,7 +10,23 @@
     blink::mojom::CodeCacheType cache_type,
     const WebURL& url,
     WebCodeCacheLoader::FetchCodeCacheCallback callback) {
-  std::move(callback).Run(base::Time(), mojo_base::BigBuffer());
+  if (controller_ && controller_->delayed_) {
+    // This simple mock doesn't support multiple in-flight loads.
+    CHECK(!controller_->callback_);
+
+    controller_->callback_ = std::move(callback);
+  } else {
+    std::move(callback).Run(base::Time(), mojo_base::BigBuffer());
+  }
+}
+
+void CodeCacheLoaderMock::Controller::DelayResponse() {
+  delayed_ = true;
+}
+void CodeCacheLoaderMock::Controller::Respond(base::Time time,
+                                              mojo_base::BigBuffer data) {
+  CHECK(callback_);
+  std::move(callback_).Run(time, std::move(data));
 }
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/platform/testing/code_cache_loader_mock.h b/third_party/blink/renderer/platform/testing/code_cache_loader_mock.h
index 2f0e4b9..fb06db0 100644
--- a/third_party/blink/renderer/platform/testing/code_cache_loader_mock.h
+++ b/third_party/blink/renderer/platform/testing/code_cache_loader_mock.h
@@ -14,7 +14,29 @@
 // A simple class for mocking WebCodeCacheLoader.
 class CodeCacheLoaderMock : public WebCodeCacheLoader {
  public:
-  CodeCacheLoaderMock() {}
+  // A class which can be owned by both this mock loader and the creator of this
+  // mock loader, which lets the creator control the behavior of the mock loader
+  // without having to retain a reference to the mock loader itself.
+  class Controller : public base::RefCounted<Controller> {
+   public:
+    void DelayResponse();
+    void Respond(base::Time time, mojo_base::BigBuffer data);
+
+   private:
+    friend class CodeCacheLoaderMock;
+    friend class base::RefCounted<Controller>;
+    ~Controller() = default;
+
+    // Whether to delay responses until Respond is called.
+    // Otherwise responses are immediate and empty.
+    bool delayed_ = false;
+
+    // Callback saved by fetch call, if delayed_ was true.
+    WebCodeCacheLoader::FetchCodeCacheCallback callback_;
+  };
+
+  explicit CodeCacheLoaderMock(scoped_refptr<Controller> controller = nullptr)
+      : controller_(std::move(controller)) {}
   CodeCacheLoaderMock(const CodeCacheLoaderMock&) = delete;
   CodeCacheLoaderMock& operator=(const CodeCacheLoaderMock&) = delete;
   ~CodeCacheLoaderMock() override = default;
@@ -25,10 +47,8 @@
       const WebURL& url,
       WebCodeCacheLoader::FetchCodeCacheCallback callback) override;
 
-  base::WeakPtr<CodeCacheLoaderMock> GetWeakPtr();
-
  private:
-  base::WeakPtrFactory<CodeCacheLoaderMock> weak_ptr_factory_{this};
+  scoped_refptr<Controller> controller_;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/platform/weborigin/scheme_registry.cc b/third_party/blink/renderer/platform/weborigin/scheme_registry.cc
index b4d5cca1..110f306b 100644
--- a/third_party/blink/renderer/platform/weborigin/scheme_registry.cc
+++ b/third_party/blink/renderer/platform/weborigin/scheme_registry.cc
@@ -106,6 +106,7 @@
   URLSchemesSet allowing_shared_array_buffer_schemes;
   URLSchemesSet extension_schemes;
   URLSchemesSet web_ui_schemes;
+  URLSchemesSet code_cache_with_hashing_schemes;
 
  private:
   friend const URLSchemesRegistry& GetURLSchemesRegistry();
@@ -502,4 +503,23 @@
   GetMutableURLSchemesRegistryForTest().web_ui_schemes.erase(scheme);
 }
 
+void SchemeRegistry::RegisterURLSchemeAsCodeCacheWithHashing(
+    const String& scheme) {
+  DCHECK_EQ(scheme, scheme.LowerASCII());
+  GetMutableURLSchemesRegistry().code_cache_with_hashing_schemes.insert(scheme);
+}
+
+void SchemeRegistry::RemoveURLSchemeAsCodeCacheWithHashing(
+    const String& scheme) {
+  GetMutableURLSchemesRegistry().code_cache_with_hashing_schemes.erase(scheme);
+}
+
+bool SchemeRegistry::SchemeSupportsCodeCacheWithHashing(const String& scheme) {
+  if (scheme.IsEmpty())
+    return false;
+  DCHECK_EQ(scheme, scheme.LowerASCII());
+  return GetURLSchemesRegistry().code_cache_with_hashing_schemes.Contains(
+      scheme);
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/platform/weborigin/scheme_registry.h b/third_party/blink/renderer/platform/weborigin/scheme_registry.h
index be2d43b..71e85c2 100644
--- a/third_party/blink/renderer/platform/weborigin/scheme_registry.h
+++ b/third_party/blink/renderer/platform/weborigin/scheme_registry.h
@@ -179,6 +179,13 @@
   static void RegisterURLSchemeAsWebUIForTest(const String& scheme);
   static void RemoveURLSchemeAsWebUIForTest(const String& scheme);
 
+  // Schemes which can use code caching but must check in the renderer whether
+  // the script content has changed rather than relying on a response time match
+  // from the network cache.
+  static void RegisterURLSchemeAsCodeCacheWithHashing(const String& scheme);
+  static void RemoveURLSchemeAsCodeCacheWithHashing(const String& scheme);
+  static bool SchemeSupportsCodeCacheWithHashing(const String& scheme);
+
  private:
   static const URLSchemesSet& LocalSchemes();
 };
diff --git a/third_party/blink/renderer/platform/weborigin/scheme_registry_test.cc b/third_party/blink/renderer/platform/weborigin/scheme_registry_test.cc
index 74204c7..d36c196e 100644
--- a/third_party/blink/renderer/platform/weborigin/scheme_registry_test.cc
+++ b/third_party/blink/renderer/platform/weborigin/scheme_registry_test.cc
@@ -139,5 +139,36 @@
   EXPECT_FALSE(SchemeRegistry::IsExtensionScheme(kExtensionScheme));
 }
 
+TEST_F(SchemeRegistryTest, CodeCacheWithHashing) {
+  const char* kChromeUIScheme = "chrome";
+  EXPECT_FALSE(SchemeRegistry::SchemeSupportsCodeCacheWithHashing(kTestScheme));
+  EXPECT_FALSE(
+      SchemeRegistry::SchemeSupportsCodeCacheWithHashing(kChromeUIScheme));
+
+  SchemeRegistry::RegisterURLSchemeAsCodeCacheWithHashing(kTestScheme);
+
+  EXPECT_TRUE(SchemeRegistry::SchemeSupportsCodeCacheWithHashing(kTestScheme));
+  EXPECT_FALSE(
+      SchemeRegistry::SchemeSupportsCodeCacheWithHashing(kChromeUIScheme));
+
+  SchemeRegistry::RegisterURLSchemeAsCodeCacheWithHashing(kChromeUIScheme);
+
+  EXPECT_TRUE(SchemeRegistry::SchemeSupportsCodeCacheWithHashing(kTestScheme));
+  EXPECT_TRUE(
+      SchemeRegistry::SchemeSupportsCodeCacheWithHashing(kChromeUIScheme));
+
+  SchemeRegistry::RemoveURLSchemeAsCodeCacheWithHashing(kTestScheme);
+
+  EXPECT_FALSE(SchemeRegistry::SchemeSupportsCodeCacheWithHashing(kTestScheme));
+  EXPECT_TRUE(
+      SchemeRegistry::SchemeSupportsCodeCacheWithHashing(kChromeUIScheme));
+
+  SchemeRegistry::RemoveURLSchemeAsCodeCacheWithHashing(kChromeUIScheme);
+
+  EXPECT_FALSE(SchemeRegistry::SchemeSupportsCodeCacheWithHashing(kTestScheme));
+  EXPECT_FALSE(
+      SchemeRegistry::SchemeSupportsCodeCacheWithHashing(kChromeUIScheme));
+}
+
 }  // namespace
 }  // namespace blink
diff --git a/third_party/blink/tools/blinkpy/web_tests/stale_expectation_removal/__init__.py b/third_party/blink/tools/blinkpy/web_tests/stale_expectation_removal/__init__.py
index e69de29..faf03ce 100644
--- a/third_party/blink/tools/blinkpy/web_tests/stale_expectation_removal/__init__.py
+++ b/third_party/blink/tools/blinkpy/web_tests/stale_expectation_removal/__init__.py
@@ -0,0 +1,14 @@
+# Copyright 2021 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.
+
+import os
+import sys
+
+CHROMIUM_SRC_DIR = os.path.realpath(
+    os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', '..',
+                 '..'))
+TESTING_DIR = os.path.join(CHROMIUM_SRC_DIR, 'testing')
+
+if TESTING_DIR not in sys.path:
+    sys.path.append(TESTING_DIR)
diff --git a/third_party/blink/tools/blinkpy/web_tests/stale_expectation_removal/builders.py b/third_party/blink/tools/blinkpy/web_tests/stale_expectation_removal/builders.py
new file mode 100644
index 0000000..5502514
--- /dev/null
+++ b/third_party/blink/tools/blinkpy/web_tests/stale_expectation_removal/builders.py
@@ -0,0 +1,65 @@
+# Copyright 2021 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.
+"""Web test-specific impl of the unexpected passes' builders module."""
+
+from unexpected_passes_common import builders
+
+
+class WebTestBuilders(builders.Builders):
+    def _BuilderRunsTestOfInterest(self, test_map, _):
+        tests = test_map.get('isolated_scripts', [])
+        for t in tests:
+            if t.get('isolate_name') in self.GetIsolateNames():
+                return True
+        return False
+
+    def GetIsolateNames(self):
+        return {
+            'blink_web_tests',
+            'webgpu_blink_web_tests',
+        }
+
+    def GetFakeCiBuilders(self):
+        return {
+            # chromium.fyi
+            'linux-blink-rel-dummy': {
+                'linux-blink-rel',
+                'v8_linux_blink_rel',
+            },
+            'mac10.12-blink-rel-dummy': {
+                'mac10.12-blink-rel',
+            },
+            'mac10.13-blink-rel-dummy': {
+                'mac10.13-blink-rel',
+            },
+            'mac10.14-blink-rel-dummy': {
+                'mac10.14-blink-rel',
+            },
+            'mac10.15-blink-rel-dummy': {
+                'mac10.15-blink-rel',
+            },
+            'mac11.0-blink-rel-dummy': {
+                'mac11.0-blink-rel',
+            },
+            'WebKit Linux composite_after_paint Dummy Builder': {
+                'linux_layout_tests_composite_after_paint',
+            },
+            'WebKit Linux layout_ng_disabled Builder': {
+                'linux_layout_tests_layout_ng_disabled',
+            },
+            'win7-blink-rel-dummy': {
+                'win7-blink-rel',
+            },
+            'win10-blink-rel-dummy': {
+                'win10-blink-rel',
+            },
+            'win10.20h2-blink-rel-dummy': {
+                'win10.20h2-blink-rel',
+            },
+        }
+
+    def GetNonChromiumBuilders(self):
+        return {
+            'DevTools Linux (chromium)',
+        }
diff --git a/third_party/blink/tools/blinkpy/web_tests/stale_expectation_removal/builders_unittest.py b/third_party/blink/tools/blinkpy/web_tests/stale_expectation_removal/builders_unittest.py
new file mode 100755
index 0000000..a1ff905
--- /dev/null
+++ b/third_party/blink/tools/blinkpy/web_tests/stale_expectation_removal/builders_unittest.py
@@ -0,0 +1,50 @@
+#!/usr/bin/env vpython3
+# Copyright 2021 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.
+
+import unittest
+
+from blinkpy.web_tests.stale_expectation_removal import builders
+
+
+class BuilderRunsTestOfInterestUnittest(unittest.TestCase):
+    def setUp(self):
+        self.instance = builders.WebTestBuilders()
+
+    def testMatch(self):
+        """Tests that a match can be successfully found."""
+        test_map = {
+            'isolated_scripts': [
+                {
+                    'isolate_name': 'blink_web_tests',
+                },
+            ],
+        }
+        self.assertTrue(
+            self.instance._BuilderRunsTestOfInterest(test_map, None))
+
+        test_map = {
+            'isolated_scripts': [
+                {
+                    'isolate_name': 'webgpu_blink_web_tests',
+                },
+            ],
+        }
+        self.assertTrue(
+            self.instance._BuilderRunsTestOfInterest(test_map, None))
+
+    def testNoMatch(self):
+        test_map = {
+            'isolated_scripts': [
+                {
+                    'isolate_name': 'foo_web_tests',
+                },
+            ],
+        }
+        self.assertFalse(
+            self.instance._BuilderRunsTestOfInterest(test_map, None))
+
+
+if __name__ == '__main__':
+    unittest.main(verbosity=2)
diff --git a/third_party/blink/tools/blinkpy/web_tests/stale_expectation_removal/remove_stale_expectations.py b/third_party/blink/tools/blinkpy/web_tests/stale_expectation_removal/remove_stale_expectations.py
index ffa6fd7..fdea36a 100644
--- a/third_party/blink/tools/blinkpy/web_tests/stale_expectation_removal/remove_stale_expectations.py
+++ b/third_party/blink/tools/blinkpy/web_tests/stale_expectation_removal/remove_stale_expectations.py
@@ -8,6 +8,9 @@
 
 assert sys.version_info[0] == 3
 
+from blinkpy.web_tests.stale_expectation_removal import builders
+from unexpected_passes_common import builders as common_builders
+
 
 def ParseArgs():
     parser = argparse.ArgumentParser(description=(
@@ -78,6 +81,8 @@
     raise RuntimeError(
         'Script is still under active development and not currently functional'
     )
+    builders_instance = builders.WebTestBuilders()
+    common_builders.RegisterInstance(builders_instance)
     return 0
 
 
diff --git a/third_party/blink/web_tests/FlagExpectations/disable-layout-ng b/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
index 0178274..c6338ad 100644
--- a/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
+++ b/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
@@ -649,9 +649,6 @@
 ### virtual/layout_ng_block_frag/
 virtual/layout_ng_block_frag/* [ Skip ]
 
-### virtual/layout_ng_fragment_traversal/
-virtual/layout_ng_fragment_traversal/* [ Skip ]
-
 ### virtual/layout-ng-grid/
 virtual/layout-ng-grid/* [ Skip ]
 
diff --git a/third_party/blink/web_tests/FlagExpectations/highdpi b/third_party/blink/web_tests/FlagExpectations/highdpi
index 653dc48..b5bf9a8 100644
--- a/third_party/blink/web_tests/FlagExpectations/highdpi
+++ b/third_party/blink/web_tests/FlagExpectations/highdpi
@@ -27,7 +27,6 @@
 virtual/gpu-rasterization/* [ Skip ]
 virtual/layout-ng-grid/* [ Skip ]
 virtual/layout_ng_block_frag/* [ Skip ]
-virtual/layout_ng_fragment_traversal/* [ Skip ]
 virtual/layout_ng_svg_text/* [ Skip ]
 virtual/prefer_compositing_to_lcd_text/* [ Skip ]
 virtual/synchronous_html_parser/* [ Skip ]
diff --git a/third_party/blink/web_tests/FlagExpectations/layout-ng-fragment-item b/third_party/blink/web_tests/FlagExpectations/layout-ng-fragment-item
index 153fc6d..21a91a4 100644
--- a/third_party/blink/web_tests/FlagExpectations/layout-ng-fragment-item
+++ b/third_party/blink/web_tests/FlagExpectations/layout-ng-fragment-item
@@ -8,6 +8,5 @@
 crbug.com/1061102 media/picture-in-picture/v2/request-picture-in-picture-twice.html [ Skip ]
 crbug.com/1061102 media/picture-in-picture/v2/request-picture-in-picture.html [ Skip ]
 crbug.com/829028 virtual/layout_ng_block_frag/* [ Skip ]
-crbug.com/982194 virtual/layout_ng_fragment_traversal/* [ Skip ]
 crbug.com/982194 virtual/webrtc-wpt-plan-b/external/wpt/webrtc/protocol/video-codecs.https.html [ Failure ]
 crbug.com/982194 virtual/webrtc-wpt-plan-b/external/wpt/webrtc/simulcast/h264.https.html [ Failure ]
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index 01730fe..8fc6237 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -1127,6 +1127,8 @@
 virtual/layout_ng_block_frag/external/wpt/css/css-multicol/multicol-span-all-fieldset-003.html [ Pass ]
 virtual/layout_ng_block_frag/external/wpt/css/css-multicol/multicol-span-all-margin-bottom-001.xht [ Pass ]
 virtual/layout_ng_block_frag/external/wpt/css/css-multicol/multicol-span-float-001.xht [ Pass ]
+virtual/layout_ng_block_frag/external/wpt/css/css-multicol/multicol-span-float-002.html [ Pass ]
+virtual/layout_ng_block_frag/external/wpt/css/css-multicol/multicol-span-float-003.html [ Pass ]
 virtual/layout_ng_block_frag/external/wpt/css/css-multicol/nested-at-outer-boundary-as-fieldset.html [ Pass ]
 virtual/layout_ng_block_frag/external/wpt/css/css-multicol/nested-with-too-tall-line.html [ Pass ]
 virtual/layout_ng_block_frag/external/wpt/css/css-multicol/non-adjacent-spanners-000.html [ Pass ]
@@ -1156,7 +1158,6 @@
 virtual/layout_ng_block_frag/fast/multicol/vertical-rl/nested-columns.html [ Pass ]
 
 ### Tests failing with LayoutNGBlockFragmentation enabled:
-crbug.com/1236056 virtual/layout_ng_block_frag/external/wpt/css/css-break/ruby-001.html [ Failure ]
 crbug.com/1225630 virtual/layout_ng_block_frag/external/wpt/css/css-multicol/large-actual-column-count.html [ Skip ]
 crbug.com/1151880 virtual/layout_ng_block_frag/fast/multicol/dynamic/relpos-becomes-static-has-abspos.html [ Failure ]
 crbug.com/829028 virtual/layout_ng_block_frag/fast/multicol/float-margin-at-row-boundary.html [ Failure ]
@@ -1178,14 +1179,6 @@
 crbug.com/1079031 virtual/layout_ng_block_frag/fast/multicol/tall-line-in-short-block.html [ Failure ]
 crbug.com/1058792 virtual/layout_ng_block_frag/fast/multicol/vertical-rl/composited-relpos-overlapping-will-change.html [ Failure ]
 
-### With LayoutNGFragmentTraversal (and LayoutNGFragmentItem) enabled:
-
-crbug.com/1225304 virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/positioning/toogle-abspos-on-relpos-inline-child.html [ Failure ]
-
-# Lots of manual tests here; just skip everything - not too interesting for LayoutNGFragmentTraversal anyway:
-virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/cascade/* [ Skip ]
-virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/text/* [ Skip ]
-
 ### With LayoutNGPrinting enabled:
 
 crbug.com/1121942 virtual/layout_ng_printing/printing/fixed-positioned-child-repeats-even-when-html-and-body-are-zero-height.html [ Crash Pass ]
@@ -2826,7 +2819,6 @@
 crbug.com/626703 [ Mac ] external/wpt/url/url-setters.any.html [ Failure Timeout ]
 crbug.com/626703 [ Mac ] external/wpt/url/url-setters.any.worker.html [ Failure Timeout ]
 crbug.com/626703 [ Mac11.0 ] virtual/scroll-unification-synchronous_html_parser/external/wpt/dom/events/scrolling/scrollend-event-fired-after-snap.html [ Timeout ]
-crbug.com/626703 [ Mac11.0 ] virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-228.xht [ Failure Timeout ]
 crbug.com/626703 [ Linux ] external/wpt/streams/readable-byte-streams/non-transferable-buffers.any.serviceworker.html [ Crash ]
 crbug.com/626703 [ Mac ] external/wpt/streams/readable-byte-streams/non-transferable-buffers.any.serviceworker.html [ Crash ]
 crbug.com/626703 [ Win7 ] external/wpt/streams/readable-byte-streams/non-transferable-buffers.any.serviceworker.html [ Crash ]
@@ -2840,15 +2832,12 @@
 crbug.com/626703 [ Mac10.14 ] external/wpt/css/CSS2/backgrounds/background-233.xht [ Failure Timeout ]
 crbug.com/626703 external/wpt/streams/readable-byte-streams/general.any.html [ Timeout ]
 crbug.com/626703 external/wpt/css/CSS2/backgrounds/background-intrinsic-004.xht [ Failure ]
-crbug.com/626703 [ Mac10.14 ] virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-284.xht [ Failure Timeout ]
 crbug.com/626703 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-model/grid-areas-overflowing-grid-container-009.html [ Failure ]
 crbug.com/626703 external/wpt/css/css-sizing/fit-content-length-percentage-001.html [ Failure ]
 crbug.com/626703 external/wpt/css/css-sizing/fit-content-length-percentage-010.html [ Failure ]
 crbug.com/626703 external/wpt/css/css-sizing/fit-content-length-percentage-016.html [ Failure ]
 crbug.com/626703 [ Mac11.0 ] external/wpt/websockets/stream/tentative/constructor.any.sharedworker.html?wss [ Timeout ]
-crbug.com/626703 [ Mac11.0 ] virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-088.xht [ Failure Timeout ]
 crbug.com/626703 external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-to-same-origin.https.html [ Timeout ]
-crbug.com/626703 [ Mac10.14 ] virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-280.xht [ Failure Timeout ]
 crbug.com/626703 [ Mac11.0 ] external/wpt/websockets/stream/tentative/constructor.any.worker.html?wss [ Timeout ]
 crbug.com/626703 external/wpt/css/css-grid/grid-model/grid-areas-overflowing-grid-container-009.html [ Failure ]
 crbug.com/626703 external/wpt/css/css-sizing/fit-content-length-percentage-002.html [ Failure ]
@@ -2857,19 +2846,13 @@
 crbug.com/626703 [ Mac10.14 ] external/wpt/css/CSS2/backgrounds/background-167.xht [ Failure Timeout ]
 crbug.com/626703 external/wpt/streams/readable-byte-streams/general.any.worker.html [ Timeout ]
 crbug.com/626703 [ Mac11.0 ] external/wpt/css/CSS2/backgrounds/background-287.xht [ Failure Timeout ]
-crbug.com/626703 [ Mac11.0 ] virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-264.xht [ Failure Timeout ]
 crbug.com/626703 external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-to-unsafe-none.https.html [ Timeout ]
-crbug.com/626703 [ Mac10.15 ] virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-254.xht [ Crash Failure ]
-crbug.com/626703 [ Mac11.0 ] virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-178.xht [ Failure Timeout ]
 crbug.com/626703 external/wpt/css/CSS2/backgrounds/background-intrinsic-006.xht [ Failure ]
-crbug.com/626703 virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-intrinsic-004.xht [ Failure ]
 crbug.com/626703 [ Mac10.14 ] external/wpt/css/CSS2/backgrounds/background-attachment-005.xht [ Failure Timeout ]
-crbug.com/626703 [ Mac11.0 ] virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-057.xht [ Failure Timeout ]
 crbug.com/626703 external/wpt/css/css-sizing/fit-content-length-percentage-006.html [ Failure ]
 crbug.com/626703 external/wpt/css/css-sizing/fit-content-length-percentage-007.html [ Failure ]
 crbug.com/626703 external/wpt/css/css-sizing/fit-content-length-percentage-009.html [ Failure ]
 crbug.com/626703 [ Mac11.0 ] external/wpt/webauthn/createcredential-pubkeycredparams.https.html [ Crash ]
-crbug.com/626703 virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-intrinsic-006.xht [ Failure ]
 crbug.com/626703 [ Mac11.0 ] virtual/restrict-gamepad/external/wpt/gamepad/idlharness-extensions.https.window.html [ Failure Timeout ]
 crbug.com/626703 [ Mac11.0 ] external/wpt/webauthn/getcredential-passing.https.html [ Crash ]
 crbug.com/626703 external/wpt/css/css-sizing/fit-content-length-percentage-012.html [ Failure ]
@@ -2885,7 +2868,6 @@
 crbug.com/626703 external/wpt/css/css-sizing/fit-content-length-percentage-008.html [ Failure ]
 crbug.com/626703 external/wpt/streams/readable-byte-streams/general.any.serviceworker.html [ Timeout ]
 crbug.com/626703 external/wpt/css/css-sizing/fit-content-length-percentage-011.html [ Failure ]
-crbug.com/626703 [ Mac10.15 ] virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-245.xht [ Failure Timeout ]
 crbug.com/626703 external/wpt/css/css-sizing/fit-content-length-percentage-013.html [ Failure ]
 crbug.com/626703 external/wpt/streams/readable-byte-streams/non-transferable-buffers.any.worker.html [ Crash ]
 crbug.com/626703 external/wpt/css/css-sizing/fit-content-length-percentage-004.html [ Failure ]
@@ -3931,8 +3913,8 @@
 crbug.com/829028 external/wpt/css/css-multicol/spanner-fragmentation-011.html [ Failure ]
 crbug.com/1191124 external/wpt/css/css-multicol/spanner-fragmentation-012.html [ Failure ]
 crbug.com/1224888 external/wpt/css/css-multicol/spanner-in-opacity.html [ Failure ]
-crbug.com/1232773 external/wpt/css/css-multicol/multicol-span-float-002.html [ Failure ]
-crbug.com/1232773 external/wpt/css/css-multicol/multicol-span-float-003.html [ Failure ]
+crbug.com/792446 external/wpt/css/css-multicol/multicol-span-float-002.html [ Failure ]
+crbug.com/792446 external/wpt/css/css-multicol/multicol-span-float-003.html [ Failure ]
 
 crbug.com/1031667 external/wpt/css/css-pseudo/marker-content-007.tentative.html [ Failure ]
 crbug.com/1031667 external/wpt/css/css-pseudo/marker-content-008.tentative.html [ Failure ]
diff --git a/third_party/blink/web_tests/VirtualTestSuites b/third_party/blink/web_tests/VirtualTestSuites
index e742a6d..b507a42 100644
--- a/third_party/blink/web_tests/VirtualTestSuites
+++ b/third_party/blink/web_tests/VirtualTestSuites
@@ -351,14 +351,6 @@
     "args": ["--enable-blink-features=LayoutNGBlockFragmentation"]
   },
   {
-    "prefix": "layout_ng_fragment_traversal",
-    "bases": ["external/wpt/css/CSS2",
-              "external/wpt/css/css-contain",
-              "fast/block",
-              "fast/table"],
-    "args": ["--enable-blink-features=LayoutNGFragmentTraversal"]
-  },
-  {
     "prefix": "layout_ng_printing",
     "bases": ["printing"],
     "args": ["--enable-blink-features=LayoutNGPrinting"]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-break/monolithic-with-overflow-lr.html b/third_party/blink/web_tests/external/wpt/css/css-break/monolithic-with-overflow-lr.html
new file mode 100644
index 0000000..11c9d360
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-break/monolithic-with-overflow-lr.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
+<link rel="help" href="https://www.w3.org/TR/css-break-3/#monolithic">
+<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+<div style="writing-mode:vertical-lr; columns:2; column-gap:0; column-fill:auto; inline-size:100px; block-size:100px; background:red;">
+  <div style="block-size:100px; background:green;"></div>
+  <div style="contain:size; block-size:0;">
+    <div style="block-size:100px; background:green;"></div>
+  </div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-break/monolithic-with-overflow-rl.html b/third_party/blink/web_tests/external/wpt/css/css-break/monolithic-with-overflow-rl.html
new file mode 100644
index 0000000..408cb00
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-break/monolithic-with-overflow-rl.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
+<link rel="help" href="https://www.w3.org/TR/css-break-3/#monolithic">
+<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+<div style="writing-mode:vertical-rl; columns:2; column-gap:0; column-fill:auto; inline-size:100px; block-size:100px; background:red;">
+  <div style="block-size:100px; background:green;"></div>
+  <div style="contain:size; block-size:0;">
+    <div style="block-size:100px; background:green;"></div>
+  </div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-contain/contain-paint-010.html b/third_party/blink/web_tests/external/wpt/css/css-contain/contain-paint-010.html
index a05ce58f..13f4a939 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-contain/contain-paint-010.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-contain/contain-paint-010.html
@@ -9,7 +9,7 @@
 #contain-paint {
   contain: paint;
   width: 100px;
-  height: 100px;
+  height: 50px;
   background: red;
 }
 
@@ -19,10 +19,14 @@
   right: 0;
   background: green;
   width: 100px;
-  height: 100px;
+  height: 50px;
 }
 </style>
 <p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
 <div id="contain-paint">
   <div id="fixed"></div>
 </div>
+<div id="contain-paint" style="display: inline-block">
+  <div id="fixed"></div>
+</div>
+
diff --git a/third_party/blink/web_tests/external/wpt/css/css-contain/parsing/contain-computed-children.html b/third_party/blink/web_tests/external/wpt/css/css-contain/parsing/contain-computed-children.html
new file mode 100644
index 0000000..b955bed
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-contain/parsing/contain-computed-children.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html>
+<meta charset="utf-8">
+<title>CSS Containment Module Level 1: getComputedStyle().contain</title>
+<link rel="help" href="https://drafts.csswg.org/css-contain/#contain-property">
+<meta name="assert" content="computed contain value for children should ignore container contain value.">
+<div id="container"><div id="target"></div></div>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+test(() => {
+  ['none', 'style', 'layout', 'paint', 'size', 'strict', 'content'].forEach(value => {
+    container.style.contain = value;
+    assert_equals(getComputedStyle(target).contain, "none");
+  });
+}, "computed contain value for children should ignore container contain value");
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-contain/parsing/contain-invalid.html b/third_party/blink/web_tests/external/wpt/css/css-contain/parsing/contain-invalid.html
index 4be918e..200a60e 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-contain/parsing/contain-invalid.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-contain/parsing/contain-invalid.html
@@ -12,6 +12,14 @@
 <body>
 <script>
 test_invalid_value("contain", "auto");
+test_invalid_value("contain", "layout layout");
+test_invalid_value("contain", "strict layout");
+test_invalid_value("contain", "paint strict");
+test_invalid_value("contain", "paint layout style paint");
+test_invalid_value("contain", "none none");
+test_invalid_value("contain", "none strict");
+test_invalid_value("contain", "strict strict");
+test_invalid_value("contain", "strict none");
 test_invalid_value("contain", "strict content");
 test_invalid_value("contain", "size layout size");
 test_invalid_value("contain", "paint content");
diff --git a/third_party/blink/web_tests/fast/css/containment/contain-parse-and-apply.html b/third_party/blink/web_tests/fast/css/containment/contain-parse-and-apply.html
deleted file mode 100644
index 004a63e..0000000
--- a/third_party/blink/web_tests/fast/css/containment/contain-parse-and-apply.html
+++ /dev/null
@@ -1,84 +0,0 @@
-<!DOCTYPE html>
-<style>
-#none { contain: none; }
-#style { contain: style; }
-#layout { contain: layout; }
-#paint { contain: paint; }
-#size { contain: size; }
-#strict { contain: strict; }
-#content { contain: content; }
-</style>
-<body>
-<div id="none"><div></div></div>
-<div id="style"><div></div></div>
-<div id="layout"><div></div></div>
-<div id="paint"><div></div></div>
-<div id="size"><div></div></div>
-<div id="strict"><div></div></div>
-<div id="content"><div></div></div>
-<div id="test"></div>
-<script src="../../../resources/js-test.js"></script>
-<script>
-function computedContainValue(element) {
-    return window.getComputedStyle(element).contain;
-}
-function getContainValue(query)
-{
-    var element = document.querySelector(query);
-    return computedContainValue(element);
-}
-
-shouldBeEqualToString("getContainValue('#none')", "none");
-shouldBeEqualToString("getContainValue('#style')", "style");
-shouldBeEqualToString("getContainValue('#layout')", "layout");
-shouldBeEqualToString("getContainValue('#paint')", "paint");
-shouldBeEqualToString("getContainValue('#size')", "size");
-shouldBeEqualToString("getContainValue('#strict')", "strict");
-shouldBeEqualToString("getContainValue('#content')", "content");
-
-var children = document.querySelectorAll("div > div");
-for (var i = 0; i < children.length; i++) {
-    shouldBeEqualToString("computedContainValue(children[i])", "none");
-}
-
-var test = document.querySelector('#test');
-
-test.style.setProperty("contain", "layout paint style size");
-shouldBeEqualToString("getContainValue('#test')", "strict");
-
-test.style.setProperty("contain", "layout paint");
-shouldBeEqualToString("getContainValue('#test')", "layout paint");
-
-test.style.setProperty("contain", "style layout paint");
-shouldBeEqualToString("getContainValue('#test')", "content");
-
-test.style.setProperty("contain", "strict");
-shouldBeEqualToString("getContainValue('#test')", "strict");
-
-test.style.setProperty("contain", "none");
-shouldBeEqualToString("getContainValue('#test')", "none");
-
-test.style.setProperty("contain", "layout layout");
-shouldBeEqualToString("getContainValue('#test')", "none");
-
-test.style.setProperty("contain", "strict layout");
-shouldBeEqualToString("getContainValue('#test')", "none");
-
-test.style.setProperty("contain", "paint strict");
-shouldBeEqualToString("getContainValue('#test')", "none");
-
-test.style.setProperty("contain", "paint layout style paint");
-shouldBeEqualToString("getContainValue('#test')", "none");
-
-test.style.setProperty("contain", "style paint");
-shouldBeEqualToString("getContainValue('#test')", "style paint");
-
-test.style.setProperty("contain", "none strict");
-shouldBeEqualToString("getContainValue('#test')", "style paint");
-
-test.style.setProperty("contain", "strict strict");
-shouldBeEqualToString("getContainValue('#test')", "style paint");
-
-test.style.setProperty("contain", "strict none");
-shouldBeEqualToString("getContainValue('#test')", "style paint");
-</script>
diff --git a/third_party/blink/web_tests/fast/css/containment/paint-containment-with-fixed-position.html b/third_party/blink/web_tests/fast/css/containment/paint-containment-with-fixed-position.html
deleted file mode 100644
index f028d8c..0000000
--- a/third_party/blink/web_tests/fast/css/containment/paint-containment-with-fixed-position.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<!DOCTYPE html>
-<style>
-div {
-    width: 100px;
-    height: 50px;
-}
-.container {
-    contain: paint;
-    background-color: green;
-}
-.fixed {
-    position: fixed;
-    top: 0px;
-    left: 100px;
-    background-color: red;
-}
-.inline {
-    display: inline-block;
-}
-</style>
-<body>
-<div class="container"><div class="fixed"></div></div>
-<div class="container inline"><div class="fixed"></div></div>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/flag-specific/highdpi/virtual/layout_ng_fragment_traversal/fast/block/float/overhanging-tall-block-expected.png b/third_party/blink/web_tests/flag-specific/highdpi/virtual/layout_ng_fragment_traversal/fast/block/float/overhanging-tall-block-expected.png
deleted file mode 100644
index 9875b0d..0000000
--- a/third_party/blink/web_tests/flag-specific/highdpi/virtual/layout_ng_fragment_traversal/fast/block/float/overhanging-tall-block-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/highdpi/virtual/layout_ng_fragment_traversal/fast/block/positioning/auto/vertical-lr/007-expected.png b/third_party/blink/web_tests/flag-specific/highdpi/virtual/layout_ng_fragment_traversal/fast/block/positioning/auto/vertical-lr/007-expected.png
deleted file mode 100644
index 406527a..0000000
--- a/third_party/blink/web_tests/flag-specific/highdpi/virtual/layout_ng_fragment_traversal/fast/block/positioning/auto/vertical-lr/007-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/highdpi/virtual/layout_ng_fragment_traversal/fast/block/positioning/auto/vertical-rl/007-expected.png b/third_party/blink/web_tests/flag-specific/highdpi/virtual/layout_ng_fragment_traversal/fast/block/positioning/auto/vertical-rl/007-expected.png
deleted file mode 100644
index 4cecad1..0000000
--- a/third_party/blink/web_tests/flag-specific/highdpi/virtual/layout_ng_fragment_traversal/fast/block/positioning/auto/vertical-rl/007-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/highdpi/virtual/layout_ng_fragment_traversal/fast/block/positioning/vertical-lr/001-expected.png b/third_party/blink/web_tests/flag-specific/highdpi/virtual/layout_ng_fragment_traversal/fast/block/positioning/vertical-lr/001-expected.png
deleted file mode 100644
index 6b7cf46..0000000
--- a/third_party/blink/web_tests/flag-specific/highdpi/virtual/layout_ng_fragment_traversal/fast/block/positioning/vertical-lr/001-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/highdpi/virtual/layout_ng_fragment_traversal/fast/block/positioning/vertical-rl/001-expected.png b/third_party/blink/web_tests/flag-specific/highdpi/virtual/layout_ng_fragment_traversal/fast/block/positioning/vertical-rl/001-expected.png
deleted file mode 100644
index 59bd40d..0000000
--- a/third_party/blink/web_tests/flag-specific/highdpi/virtual/layout_ng_fragment_traversal/fast/block/positioning/vertical-rl/001-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/highdpi/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/003-vertical-expected.png b/third_party/blink/web_tests/flag-specific/highdpi/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/003-vertical-expected.png
deleted file mode 100644
index a6cae3f..0000000
--- a/third_party/blink/web_tests/flag-specific/highdpi/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/003-vertical-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/issues/content-security-policy-issue-trusted-types-exception-expected.txt b/third_party/blink/web_tests/http/tests/inspector-protocol/issues/content-security-policy-issue-trusted-types-exception-expected.txt
new file mode 100644
index 0000000..60cfb327
--- /dev/null
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/issues/content-security-policy-issue-trusted-types-exception-expected.txt
@@ -0,0 +1,4 @@
+Verify that Trusted Types sink violation issue is generated.
+
+Issue id on issue matches id on exception: true
+
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/issues/content-security-policy-issue-trusted-types-exception.js b/third_party/blink/web_tests/http/tests/inspector-protocol/issues/content-security-policy-issue-trusted-types-exception.js
new file mode 100644
index 0000000..3160220
--- /dev/null
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/issues/content-security-policy-issue-trusted-types-exception.js
@@ -0,0 +1,17 @@
+(async function(testRunner) {
+  const {page, session, dp} = await testRunner.startBlank(
+      `Verify that Trusted Types sink violation issue is generated.\n`);
+
+  await dp.Audits.enable();
+  await dp.Runtime.enable();
+  page.navigate(
+      'https://devtools.test:8443/inspector-protocol/resources/content-security-policy-issue-trusted-types-sink.php');
+  const [issue, exception] = await Promise.all(
+      [dp.Audits.onceIssueAdded(), dp.Runtime.onceExceptionThrown()]);
+
+  const issueIdFromException =
+      exception?.params?.exceptionDetails?.exceptionMetaData?.issueId;
+  testRunner.log(`Issue id on issue matches id on exception: ${
+      issue.params.issue.issueId === issueIdFromException}`);
+  testRunner.completeTest();
+})
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/issues/content-security-policy-issue-trusted-types-sink-expected.txt b/third_party/blink/web_tests/http/tests/inspector-protocol/issues/content-security-policy-issue-trusted-types-sink-expected.txt
index 7823d1c..273fd2c 100644
--- a/third_party/blink/web_tests/http/tests/inspector-protocol/issues/content-security-policy-issue-trusted-types-sink-expected.txt
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/issues/content-security-policy-issue-trusted-types-sink-expected.txt
@@ -16,6 +16,7 @@
                 violatedDirective : require-trusted-types-for
             }
         }
+        issueId : <string>
     }
 }
 
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/resources/inspector-protocol-test.js b/third_party/blink/web_tests/http/tests/inspector-protocol/resources/inspector-protocol-test.js
index 6e59846..07b6afe 100644
--- a/third_party/blink/web_tests/http/tests/inspector-protocol/resources/inspector-protocol-test.js
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/resources/inspector-protocol-test.js
@@ -15,11 +15,31 @@
   }
 
   static get stabilizeNames() {
-    return ['id', 'nodeId', 'objectId', 'scriptId', 'timestamp',
-        'backendNodeId', 'parentId', 'frameId', 'loaderId', 'baseURL',
-        'documentURL', 'styleSheetId', 'executionContextId', 'openerId',
-        'targetId', 'browserContextId', 'sessionId', 'receivedBytes',
-        'ownerNode', 'guid', 'requestId', 'openerFrameId'];
+    return [
+      'id',
+      'nodeId',
+      'objectId',
+      'scriptId',
+      'timestamp',
+      'backendNodeId',
+      'parentId',
+      'frameId',
+      'loaderId',
+      'baseURL',
+      'documentURL',
+      'styleSheetId',
+      'executionContextId',
+      'openerId',
+      'targetId',
+      'browserContextId',
+      'sessionId',
+      'receivedBytes',
+      'ownerNode',
+      'guid',
+      'requestId',
+      'openerFrameId',
+      'issueId',
+    ];
   }
 
   startDumpingProtocolMessages() {
diff --git a/third_party/blink/web_tests/http/tests/media/media-controls-live-timeline.html b/third_party/blink/web_tests/http/tests/media/media-controls-live-timeline.html
deleted file mode 100644
index 85a6729..0000000
--- a/third_party/blink/web_tests/http/tests/media/media-controls-live-timeline.html
+++ /dev/null
@@ -1,39 +0,0 @@
-<title>Test timeline work properly when playing live video.</title>
-<script src="/w3c/resources/testharness.js"></script>
-<script src="/w3c/resources/testharnessreport.js"></script>
-<script src="media-source/mediasource-util.js"></script>
-<script src="../../media-resources/media-controls.js"></script>
-<video controls></video>
-<script>
-  const epsilon = 0.1;
-  const pause_delay = 1;  // 1 second.
-
-  mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData){
-    mediaElement.play();
-    mediaSource.duration = +Infinity;
-    let timeline = timelineElement(mediaElement);
-
-    // Append all media data for complete playback.
-    test.expectEvent(sourceBuffer, 'updateend', 'sourceBuffer end update.');
-    test.expectEvent(mediaElement, 'loadedmetadata', 'Reached HAVE_METADATA');
-    test.expectEvent(mediaElement, 'playing', 'Playing media.');
-    sourceBuffer.appendBuffer(mediaData);
-
-    test.waitForExpectedEvents(function() {
-      test.waitForCurrentTimeChange(mediaElement, function() {
-        assert_approx_equals(Number(timeline.value), Number(timeline.max),
-                             epsilon, "timline thumb should be near the end");
-
-        mediaElement.onpause = test.step_func(function() {
-          setTimeout(test.step_func_done(function() {
-            assert_approx_equals(Number(timeline.max) - Number(timeline.value),
-                                 pause_delay, epsilon,
-                                 "timeline thumb should be 1s away from the end");
-          }), pause_delay * 1000 /* convert to milliseconds */);
-        });
-
-        mediaElement.pause();
-      });
-    });
-  }, "Timeline work properly when playing live video");
-</script>
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-012-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-012-expected.png
deleted file mode 100644
index 6f04419..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-012-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-019-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-019-expected.png
deleted file mode 100644
index 53e7a7f..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-019-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-027-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-027-expected.png
deleted file mode 100644
index 34e87f2..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-027-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-032-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-032-expected.png
deleted file mode 100644
index 34e87f2..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-032-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-039-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-039-expected.png
deleted file mode 100644
index 34e87f2..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-039-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-042-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-042-expected.png
deleted file mode 100644
index ee0324b..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-042-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-044-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-044-expected.png
deleted file mode 100644
index 34e87f2..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-044-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-045-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-045-expected.png
deleted file mode 100644
index ee0324b..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-045-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-046-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-046-expected.png
deleted file mode 100644
index ad3c79cc..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-046-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-049-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-049-expected.png
deleted file mode 100644
index ad3c79cc..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-049-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-054-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-054-expected.png
deleted file mode 100644
index ee0324b..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-054-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-057-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-057-expected.png
deleted file mode 100644
index ee0324b..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-057-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-062-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-062-expected.png
deleted file mode 100644
index 34e87f2..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-062-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-065-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-065-expected.png
deleted file mode 100644
index 34e87f2..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-065-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-066-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-066-expected.png
deleted file mode 100644
index ee0324b..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-066-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-067-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-067-expected.png
deleted file mode 100644
index ad3c79cc..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-067-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-069-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-069-expected.png
deleted file mode 100644
index ee0324b..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-069-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-072-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-072-expected.png
deleted file mode 100644
index ad3c79cc..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-072-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-079-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-079-expected.png
deleted file mode 100644
index ad3c79cc..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-079-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-084-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-084-expected.png
deleted file mode 100644
index ad3c79cc..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-084-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-086-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-086-expected.png
deleted file mode 100644
index 8222fc77..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-086-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-088-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-088-expected.png
deleted file mode 100644
index 8222fc77..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-088-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-089-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-089-expected.png
deleted file mode 100644
index b4bf8fa..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-089-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-091-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-091-expected.png
deleted file mode 100644
index b4bf8fa..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-091-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-092-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-092-expected.png
deleted file mode 100644
index 8222fc77..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-092-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-094-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-094-expected.png
deleted file mode 100644
index 8222fc77..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-094-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-098-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-098-expected.png
deleted file mode 100644
index 8222fc77..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-098-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-099-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-099-expected.png
deleted file mode 100644
index b4bf8fa..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-099-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-100-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-100-expected.png
deleted file mode 100644
index 8222fc77..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-100-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-102-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-102-expected.png
deleted file mode 100644
index b4bf8fa..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-102-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-105-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-105-expected.png
deleted file mode 100644
index b4bf8fa..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-105-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-108-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-108-expected.png
deleted file mode 100644
index b4bf8fa..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-108-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-110-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-110-expected.png
deleted file mode 100644
index 8222fc77..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-110-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-112-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-112-expected.png
deleted file mode 100644
index 8222fc77..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-112-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-113-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-113-expected.png
deleted file mode 100644
index b4bf8fa..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-113-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-115-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-115-expected.png
deleted file mode 100644
index b4bf8fa..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-115-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-116-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-116-expected.png
deleted file mode 100644
index 8222fc77..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-116-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-118-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-118-expected.png
deleted file mode 100644
index 8222fc77..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-118-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-119-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-119-expected.png
deleted file mode 100644
index 11fed97..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-119-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-121-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-121-expected.png
deleted file mode 100644
index 11fed97..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-121-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-122-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-122-expected.png
deleted file mode 100644
index 8222fc77..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-122-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-123-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-123-expected.png
deleted file mode 100644
index b4bf8fa..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-123-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-124-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-124-expected.png
deleted file mode 100644
index 8222fc77..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-124-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-125-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-125-expected.png
deleted file mode 100644
index 11fed97..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-125-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-126-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-126-expected.png
deleted file mode 100644
index b4bf8fa..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-126-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-127-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-127-expected.png
deleted file mode 100644
index 11fed97..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-127-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-129-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-129-expected.png
deleted file mode 100644
index b4bf8fa..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-129-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-131-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-131-expected.png
deleted file mode 100644
index 11fed97..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-131-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-132-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-132-expected.png
deleted file mode 100644
index b4bf8fa..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-132-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-133-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-133-expected.png
deleted file mode 100644
index 11fed97..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-133-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-134-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-134-expected.png
deleted file mode 100644
index 8222fc77..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-134-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-136-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-136-expected.png
deleted file mode 100644
index 8222fc77..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-136-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-140-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-140-expected.png
deleted file mode 100644
index 8222fc77..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-140-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-142-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-142-expected.png
deleted file mode 100644
index 8222fc77..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-142-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-143-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-143-expected.png
deleted file mode 100644
index 11fed97..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-143-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-145-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-145-expected.png
deleted file mode 100644
index 11fed97..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-145-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-146-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-146-expected.png
deleted file mode 100644
index 8222fc77..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-146-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-148-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-148-expected.png
deleted file mode 100644
index 8222fc77..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-148-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-149-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-149-expected.png
deleted file mode 100644
index 11fed97..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-149-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-151-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-151-expected.png
deleted file mode 100644
index 11fed97..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-151-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-155-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-155-expected.png
deleted file mode 100644
index 11fed97..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-155-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-157-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-157-expected.png
deleted file mode 100644
index 11fed97..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-157-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-158-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-158-expected.png
deleted file mode 100644
index 8222fc77..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-158-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-159-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-159-expected.png
deleted file mode 100644
index b4bf8fa..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-159-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-160-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-160-expected.png
deleted file mode 100644
index 8222fc77..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-160-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-162-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-162-expected.png
deleted file mode 100644
index b4bf8fa..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-162-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-164-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-164-expected.png
deleted file mode 100644
index 8222fc77..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-164-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-165-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-165-expected.png
deleted file mode 100644
index b4bf8fa..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-165-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-166-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-166-expected.png
deleted file mode 100644
index 8222fc77..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-166-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-167-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-167-expected.png
deleted file mode 100644
index 11fed97..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-167-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-168-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-168-expected.png
deleted file mode 100644
index b4bf8fa..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-168-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-169-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-169-expected.png
deleted file mode 100644
index 11fed97..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-169-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-170-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-170-expected.png
deleted file mode 100644
index 8222fc77..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-170-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-172-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-172-expected.png
deleted file mode 100644
index 8222fc77..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-172-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-173-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-173-expected.png
deleted file mode 100644
index 11fed97..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-173-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-175-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-175-expected.png
deleted file mode 100644
index 11fed97..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-175-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-176-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-176-expected.png
deleted file mode 100644
index b4bf8fa..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-176-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-178-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-178-expected.png
deleted file mode 100644
index b4bf8fa..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-178-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-179-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-179-expected.png
deleted file mode 100644
index 11fed97..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-179-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-181-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-181-expected.png
deleted file mode 100644
index 11fed97..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-181-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-183-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-183-expected.png
deleted file mode 100644
index b4bf8fa..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-183-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-186-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-186-expected.png
deleted file mode 100644
index b4bf8fa..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-186-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-189-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-189-expected.png
deleted file mode 100644
index b4bf8fa..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-189-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-191-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-191-expected.png
deleted file mode 100644
index 11fed97..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-191-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-192-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-192-expected.png
deleted file mode 100644
index b4bf8fa..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-192-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-193-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-193-expected.png
deleted file mode 100644
index 11fed97..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-193-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-197-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-197-expected.png
deleted file mode 100644
index 5f6be79..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-197-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-199-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-199-expected.png
deleted file mode 100644
index 11fed97..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-199-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-200-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-200-expected.png
deleted file mode 100644
index b4bf8fa..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-200-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-202-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-202-expected.png
deleted file mode 100644
index b4bf8fa..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-202-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-203-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-203-expected.png
deleted file mode 100644
index 11fed97..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-203-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-205-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-205-expected.png
deleted file mode 100644
index 11fed97..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-205-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-206-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-206-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-206-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-207-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-207-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-207-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-208-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-208-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-208-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-209-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-209-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-209-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-210-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-210-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-210-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-211-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-211-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-211-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-212-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-212-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-212-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-213-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-213-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-213-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-214-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-214-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-214-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-215-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-215-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-215-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-216-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-216-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-216-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-217-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-217-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-217-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-218-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-218-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-218-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-219-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-219-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-219-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-220-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-220-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-220-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-221-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-221-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-221-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-222-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-222-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-222-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-223-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-223-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-223-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-224-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-224-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-224-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-225-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-225-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-225-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-226-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-226-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-226-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-227-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-227-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-227-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-228-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-228-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-228-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-229-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-229-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-229-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-230-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-230-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-230-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-231-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-231-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-231-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-232-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-232-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-232-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-233-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-233-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-233-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-234-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-234-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-234-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-235-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-235-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-235-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-236-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-236-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-236-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-237-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-237-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-237-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-238-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-238-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-238-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-239-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-239-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-239-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-240-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-240-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-240-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-241-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-241-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-241-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-242-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-242-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-242-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-243-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-243-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-243-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-244-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-244-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-244-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-245-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-245-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-245-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-246-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-246-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-246-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-247-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-247-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-247-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-248-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-248-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-248-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-249-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-249-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-249-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-250-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-250-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-250-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-251-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-251-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-251-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-252-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-252-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-252-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-253-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-253-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-253-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-254-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-254-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-254-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-255-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-255-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-255-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-256-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-256-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-256-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-257-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-257-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-257-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-258-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-258-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-258-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-259-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-259-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-259-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-260-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-260-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-260-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-261-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-261-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-261-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-262-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-262-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-262-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-263-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-263-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-263-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-264-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-264-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-264-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-265-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-265-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-265-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-266-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-266-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-266-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-267-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-267-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-267-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-268-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-268-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-268-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-269-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-269-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-269-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-270-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-270-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-270-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-271-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-271-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-271-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-272-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-272-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-272-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-273-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-273-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-273-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-274-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-274-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-274-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-275-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-275-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-275-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-276-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-276-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-276-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-277-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-277-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-277-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-278-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-278-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-278-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-279-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-279-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-279-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-280-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-280-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-280-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-281-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-281-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-281-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-282-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-282-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-282-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-283-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-283-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-283-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-284-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-284-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-284-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-285-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-285-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-285-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-286-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-286-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-286-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-287-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-287-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-287-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-288-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-288-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-288-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-289-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-289-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-289-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-290-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-290-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-290-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-291-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-291-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-291-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-292-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-292-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-292-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-293-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-293-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-293-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-294-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-294-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-294-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-295-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-295-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-295-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-296-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-296-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-296-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-297-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-297-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-297-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-298-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-298-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-298-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-299-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-299-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-299-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-300-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-300-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-300-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-301-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-301-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-301-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-302-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-302-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-302-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-303-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-303-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-303-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-304-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-304-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-304-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-305-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-305-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-305-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-306-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-306-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-306-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-307-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-307-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-307-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-308-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-308-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-308-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-309-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-309-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-309-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-310-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-310-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-310-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-311-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-311-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-311-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-312-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-312-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-312-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-313-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-313-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-313-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-314-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-314-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-314-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-315-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-315-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-315-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-316-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-316-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-316-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-317-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-317-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-317-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-318-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-318-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-318-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-319-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-319-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-319-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-320-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-320-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-320-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-321-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-321-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-321-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-322-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-322-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-322-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-323-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-323-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-323-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-324-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-324-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-324-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-325-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-325-expected.png
deleted file mode 100644
index 9860ec3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-325-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-330-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-330-expected.png
deleted file mode 100644
index e73861b..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-330-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-animated-001-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-animated-001-expected.png
deleted file mode 100644
index add9ad7..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-animated-001-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-attachment-001-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-attachment-001-expected.png
deleted file mode 100644
index 7d5b811..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-attachment-001-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-attachment-002-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-attachment-002-expected.png
deleted file mode 100644
index a4810ea..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-attachment-002-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-attachment-003-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-attachment-003-expected.png
deleted file mode 100644
index a4810ea..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-attachment-003-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-attachment-004-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-attachment-004-expected.png
deleted file mode 100644
index f94dc3a..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-attachment-004-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-attachment-005-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-attachment-005-expected.png
deleted file mode 100644
index 7f63b29..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-attachment-005-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-attachment-006-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-attachment-006-expected.png
deleted file mode 100644
index 67c4036..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-attachment-006-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-attachment-007-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-attachment-007-expected.png
deleted file mode 100644
index 26924e1..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-attachment-007-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-attachment-008-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-attachment-008-expected.png
deleted file mode 100644
index ff481d1..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-attachment-008-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-attachment-010-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-attachment-010-expected.png
deleted file mode 100644
index b6e8cfc8..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-attachment-010-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-bg-pos-207-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-bg-pos-207-expected.png
deleted file mode 100644
index 70d9bda..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-bg-pos-207-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-position-201-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-position-201-expected.png
deleted file mode 100644
index f062f2f4..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-position-201-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-root-012a-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-root-012a-expected.png
deleted file mode 100644
index 19a4d59..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-root-012a-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-root-013a-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-root-013a-expected.png
deleted file mode 100644
index e6c78b1..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-root-013a-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-root-014a-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-root-014a-expected.png
deleted file mode 100644
index 881722b..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-root-014a-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/block/basic/011-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/block/basic/011-expected.png
deleted file mode 100644
index 9a351e4..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/block/basic/011-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/block/basic/018-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/block/basic/018-expected.png
deleted file mode 100644
index 8a2c0b4c..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/block/basic/018-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/block/float/002-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/block/float/002-expected.png
deleted file mode 100644
index 1954f9ea..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/block/float/002-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/block/float/016-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/block/float/016-expected.png
deleted file mode 100644
index 04b4682..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/block/float/016-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/block/float/centered-float-avoidance-complexity-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/block/float/centered-float-avoidance-complexity-expected.png
deleted file mode 100644
index 779342d..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/block/float/centered-float-avoidance-complexity-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/block/float/float-in-float-hit-testing-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/block/float/float-in-float-hit-testing-expected.png
deleted file mode 100644
index 06a579a..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/block/float/float-in-float-hit-testing-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/block/float/float-in-float-painting-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/block/float/float-in-float-painting-expected.png
deleted file mode 100644
index ca050cb..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/block/float/float-in-float-painting-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/103-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/103-expected.png
deleted file mode 100644
index e8093a1..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/103-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/block/positioning/051-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/block/positioning/051-expected.png
deleted file mode 100644
index 30731e3b..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/block/positioning/051-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/block/positioning/auto/007-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/block/positioning/auto/007-expected.png
deleted file mode 100644
index 7a36072..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/block/positioning/auto/007-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/block/positioning/auto/vertical-lr/007-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/block/positioning/auto/vertical-lr/007-expected.png
deleted file mode 100644
index f9a0fff3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/block/positioning/auto/vertical-lr/007-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/block/positioning/auto/vertical-rl/007-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/block/positioning/auto/vertical-rl/007-expected.png
deleted file mode 100644
index 15357950..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/block/positioning/auto/vertical-rl/007-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/block/positioning/inline-block-relposition-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/block/positioning/inline-block-relposition-expected.png
deleted file mode 100644
index db8301b..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/block/positioning/inline-block-relposition-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/block/positioning/vertical-lr/001-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/block/positioning/vertical-lr/001-expected.png
deleted file mode 100644
index 8bb0e04c..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/block/positioning/vertical-lr/001-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/block/positioning/vertical-rl/001-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/block/positioning/vertical-rl/001-expected.png
deleted file mode 100644
index 5379f2b..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/block/positioning/vertical-rl/001-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/040-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/040-expected.png
deleted file mode 100644
index 7d2072d..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/040-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/040-vertical-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/040-vertical-expected.png
deleted file mode 100644
index 58a0ae0..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/040-vertical-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/append-cells2-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/append-cells2-expected.png
deleted file mode 100644
index 307725f..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/append-cells2-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-cell-collapsed-border-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-cell-collapsed-border-expected.png
deleted file mode 100644
index afc54d1..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-cell-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-collapsed-border-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-collapsed-border-expected.png
deleted file mode 100644
index aad93fd..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-collapsed-border-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-collapsed-border-expected.png
deleted file mode 100644
index fa08eda..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-group-collapsed-border-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-group-collapsed-border-expected.png
deleted file mode 100644
index ef5907b..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-group-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-quirks-collapsed-border-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-quirks-collapsed-border-expected.png
deleted file mode 100644
index 323c44f9..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-quirks-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-collapsed-border-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-collapsed-border-expected.png
deleted file mode 100644
index 178f1813..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-group-collapsed-border-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-group-collapsed-border-expected.png
deleted file mode 100644
index f6b536f..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-group-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-hide-collapsed-border-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-hide-collapsed-border-expected.png
deleted file mode 100644
index 7bca9869..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-hide-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-hide-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-hide-expected.png
deleted file mode 100644
index 4e987b9..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-hide-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-opacity-collapsed-border-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-opacity-collapsed-border-expected.png
deleted file mode 100644
index e3556ae..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-opacity-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-opacity-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-opacity-expected.png
deleted file mode 100644
index e3556ae..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-opacity-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-show-collapsed-border-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-show-collapsed-border-expected.png
deleted file mode 100644
index 921219c..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-show-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-show-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-show-expected.png
deleted file mode 100644
index c1914ba..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-show-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-cell-collapsed-border-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-cell-collapsed-border-expected.png
deleted file mode 100644
index 5bb6c17..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-cell-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-collapsed-border-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-collapsed-border-expected.png
deleted file mode 100644
index aee0a8f3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-column-collapsed-border-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-column-collapsed-border-expected.png
deleted file mode 100644
index 06d95b1..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-column-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-column-group-collapsed-border-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-column-group-collapsed-border-expected.png
deleted file mode 100644
index fc72725..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-column-group-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-row-collapsed-border-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-row-collapsed-border-expected.png
deleted file mode 100644
index b8e9d17a..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-row-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-row-group-collapsed-border-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-row-group-collapsed-border-expected.png
deleted file mode 100644
index 16945b3..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-row-group-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-cell-collapsed-border-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-cell-collapsed-border-expected.png
deleted file mode 100644
index 1a646d4..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-cell-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-collapsed-border-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-collapsed-border-expected.png
deleted file mode 100644
index 072aa70..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-column-collapsed-border-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-column-collapsed-border-expected.png
deleted file mode 100644
index fa9abc9..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-column-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png
deleted file mode 100644
index 9973a27b..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-row-collapsed-border-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-row-collapsed-border-expected.png
deleted file mode 100644
index fa20838a..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-row-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png
deleted file mode 100644
index 0fa89e9a..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/background-gradient-border-collapsed-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/background-gradient-border-collapsed-expected.png
deleted file mode 100644
index fed353b..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/background-gradient-border-collapsed-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/003-vertical-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/003-vertical-expected.png
deleted file mode 100644
index 113269c..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/003-vertical-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/004-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/004-expected.png
deleted file mode 100644
index caf0bf31..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/004-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/colspanMinWidth-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/colspanMinWidth-expected.png
deleted file mode 100644
index 91f25c2..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/colspanMinWidth-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/colspanMinWidth-vertical-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/colspanMinWidth-vertical-expected.png
deleted file mode 100644
index 05f2896..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/colspanMinWidth-vertical-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/mozilla-bug10296-vertical-align-1-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/mozilla-bug10296-vertical-align-1-expected.png
deleted file mode 100644
index 0662b51..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/mozilla-bug10296-vertical-align-1-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/mozilla-bug10296-vertical-align-2-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/mozilla-bug10296-vertical-align-2-expected.png
deleted file mode 100644
index 65a875a8..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/mozilla-bug10296-vertical-align-2-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/remove-td-display-none-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/remove-td-display-none-expected.png
deleted file mode 100644
index c410a8b..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/remove-td-display-none-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/rowspan-paint-order-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/rowspan-paint-order-expected.png
deleted file mode 100644
index b5353a7..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/rowspan-paint-order-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/table-continuation-outline-paint-crash-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/table-continuation-outline-paint-crash-expected.png
deleted file mode 100644
index e625352..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_fragment_traversal/fast/table/table-continuation-outline-paint-crash-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-cell-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-cell-collapsed-border-expected.png
deleted file mode 100644
index 2af2f35..0000000
--- a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-cell-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-collapsed-border-expected.png
deleted file mode 100644
index 8aeecb6..0000000
--- a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-collapsed-border-expected.png
deleted file mode 100644
index 6024540..0000000
--- a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-group-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-group-collapsed-border-expected.png
deleted file mode 100644
index 40c3bfb..0000000
--- a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-group-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-quirks-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-quirks-collapsed-border-expected.png
deleted file mode 100644
index d9eb396..0000000
--- a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-quirks-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-collapsed-border-expected.png
deleted file mode 100644
index a4c4ceb..0000000
--- a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-group-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-group-collapsed-border-expected.png
deleted file mode 100644
index bc80453..0000000
--- a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-group-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-hide-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-hide-collapsed-border-expected.png
deleted file mode 100644
index 5827ee4..0000000
--- a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-hide-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-cell-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-cell-collapsed-border-expected.png
deleted file mode 100644
index ef85568..0000000
--- a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-cell-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-collapsed-border-expected.png
deleted file mode 100644
index b168276..0000000
--- a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-row-group-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-row-group-collapsed-border-expected.png
deleted file mode 100644
index 078fb1c..0000000
--- a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-row-group-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-cell-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-cell-collapsed-border-expected.png
deleted file mode 100644
index d973ef3..0000000
--- a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-cell-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-column-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-column-collapsed-border-expected.png
deleted file mode 100644
index f3d7aba..0000000
--- a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-column-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-row-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-row-collapsed-border-expected.png
deleted file mode 100644
index cf93377..0000000
--- a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-row-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png
deleted file mode 100644
index 8a45f27..0000000
--- a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/background-gradient-border-collapsed-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/background-gradient-border-collapsed-expected.png
deleted file mode 100644
index 0e66eac..0000000
--- a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/background-gradient-border-collapsed-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/004-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/004-expected.png
deleted file mode 100644
index 36bccb3e..0000000
--- a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/004-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/border-collapsing-head-foot-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/border-collapsing-head-foot-expected.png
deleted file mode 100644
index 4295f06c..0000000
--- a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/border-collapsing-head-foot-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/border-collapsing-head-foot-vertical-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/border-collapsing-head-foot-vertical-expected.png
deleted file mode 100644
index e918170..0000000
--- a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/border-collapsing-head-foot-vertical-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/colspanMinWidth-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/colspanMinWidth-expected.png
deleted file mode 100644
index 2c4cd186..0000000
--- a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/colspanMinWidth-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/colspanMinWidth-vertical-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/colspanMinWidth-vertical-expected.png
deleted file mode 100644
index 0518096..0000000
--- a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/colspanMinWidth-vertical-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/frame-and-rules-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/frame-and-rules-expected.png
deleted file mode 100644
index 9b9f40d..0000000
--- a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/frame-and-rules-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/rules-attr-dynchange1-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/rules-attr-dynchange1-expected.png
deleted file mode 100644
index e606ff4..0000000
--- a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/rules-attr-dynchange1-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/rules-attr-dynchange2-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/rules-attr-dynchange2-expected.png
deleted file mode 100644
index b925728..0000000
--- a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/layout_ng_fragment_traversal/fast/table/rules-attr-dynchange2-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/block/basic/014-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/block/basic/014-expected.png
deleted file mode 100644
index 8ffeeea..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/block/basic/014-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/block/basic/016-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/block/basic/016-expected.png
deleted file mode 100644
index 4e57e33..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/block/basic/016-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/block/float/011-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/block/float/011-expected.png
deleted file mode 100644
index 37a32ce9..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/block/float/011-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/block/float/015-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/block/float/015-expected.png
deleted file mode 100644
index 69c39e6d..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/block/float/015-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/001-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/001-expected.png
deleted file mode 100644
index 7e1abda..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/001-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/005-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/005-expected.png
deleted file mode 100644
index 7e1abda..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/005-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/block-inside-inline/001-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/block-inside-inline/001-expected.png
deleted file mode 100644
index 7e1abda..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/block-inside-inline/001-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/block-inside-inline/005-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/block-inside-inline/005-expected.png
deleted file mode 100644
index 7e1abda..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/block-inside-inline/005-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/003-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/003-expected.png
deleted file mode 100644
index 44113e6..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/003-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/004-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/004-expected.png
deleted file mode 100644
index 02ca1778..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/004-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/010-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/010-expected.png
deleted file mode 100644
index beb081d3..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/010-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/011-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/011-expected.png
deleted file mode 100644
index 0dbbd12..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/011-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/016-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/016-expected.png
deleted file mode 100644
index 95c57c6..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/016-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/020-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/020-expected.png
deleted file mode 100644
index 4e156e6..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/020-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/022-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/022-expected.png
deleted file mode 100644
index 4e0528f0..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/022-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/023-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/023-expected.png
deleted file mode 100644
index 9513482..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/023-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/026-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/026-expected.png
deleted file mode 100644
index 9ed1196..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/026-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/035-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/035-expected.png
deleted file mode 100644
index cdd7ba4..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/035-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/035-vertical-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/035-vertical-expected.png
deleted file mode 100644
index f2cd926..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/035-vertical-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/039-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/039-expected.png
deleted file mode 100644
index d13eebe..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/039-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/041-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/041-expected.png
deleted file mode 100644
index 3b9c9675..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/041-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/append-cells2-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/append-cells2-expected.png
deleted file mode 100644
index f2769a3..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/append-cells2-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/auto-with-percent-height-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/auto-with-percent-height-expected.png
deleted file mode 100644
index 26f4bfc..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/auto-with-percent-height-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/auto-with-percent-height-vertical-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/auto-with-percent-height-vertical-expected.png
deleted file mode 100644
index 1f26daf..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/auto-with-percent-height-vertical-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-cell-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-cell-expected.png
deleted file mode 100644
index 9429ba6..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-cell-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-expected.png
deleted file mode 100644
index 046f9709..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-group-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-group-expected.png
deleted file mode 100644
index 33daa52..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-group-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-expected.png
deleted file mode 100644
index 5381629..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-quirks-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-quirks-expected.png
deleted file mode 100644
index 97a6fe3c..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-quirks-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-expected.png
deleted file mode 100644
index d33dcb44..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-group-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-group-expected.png
deleted file mode 100644
index 0e5587f..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-group-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-hide-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-hide-expected.png
deleted file mode 100644
index 60c2c76..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-hide-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-opacity-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-opacity-collapsed-border-expected.png
deleted file mode 100644
index 1ef4432..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-opacity-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-opacity-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-opacity-expected.png
deleted file mode 100644
index 1ef4432..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-opacity-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-show-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-show-collapsed-border-expected.png
deleted file mode 100644
index 50b9e285..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-show-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-show-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-show-expected.png
deleted file mode 100644
index a301495..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-show-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-cell-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-cell-expected.png
deleted file mode 100644
index 4345817..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-cell-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-column-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-column-expected.png
deleted file mode 100644
index 2924eb93..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-column-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-column-group-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-column-group-expected.png
deleted file mode 100644
index 2ec05bce..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-column-group-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-expected.png
deleted file mode 100644
index 187ee37..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-row-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-row-expected.png
deleted file mode 100644
index b2f1df5..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-row-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-row-group-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-row-group-expected.png
deleted file mode 100644
index 0e58f78d..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-row-group-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-cell-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-cell-expected.png
deleted file mode 100644
index 1abcf04..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-cell-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-column-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-column-expected.png
deleted file mode 100644
index be2193d..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-column-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-column-group-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-column-group-expected.png
deleted file mode 100644
index 3d4db515..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-column-group-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-expected.png
deleted file mode 100644
index ffa8bb75..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-row-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-row-expected.png
deleted file mode 100644
index e76dbba..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-row-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-row-group-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-row-group-expected.png
deleted file mode 100644
index e55a6f7..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-row-group-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/001-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/001-expected.png
deleted file mode 100644
index d7f294a..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/001-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/001-vertical-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/001-vertical-expected.png
deleted file mode 100644
index 75230ffa..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/001-vertical-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/cell-coalescing-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/cell-coalescing-expected.png
deleted file mode 100644
index 2d9e6f2..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/cell-coalescing-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/cellindex-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/cellindex-expected.png
deleted file mode 100644
index 9311d035..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/cellindex-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/colgroup-preceded-by-caption-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/colgroup-preceded-by-caption-expected.png
deleted file mode 100644
index 8cf4fac..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/colgroup-preceded-by-caption-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/colgroup-spanning-groups-rules-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/colgroup-spanning-groups-rules-expected.png
deleted file mode 100644
index baa9ece..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/colgroup-spanning-groups-rules-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/dynamic-caption-add-before-child-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/dynamic-caption-add-before-child-expected.png
deleted file mode 100644
index 59715b1..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/dynamic-caption-add-before-child-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/dynamic-caption-add-remove-before-child-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/dynamic-caption-add-remove-before-child-expected.png
deleted file mode 100644
index cccc8e5..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/dynamic-caption-add-remove-before-child-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/dynamic-descendant-percentage-height-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/dynamic-descendant-percentage-height-expected.png
deleted file mode 100644
index 29ac34b..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/dynamic-descendant-percentage-height-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/floating-th-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/floating-th-expected.png
deleted file mode 100644
index 59474acc..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/floating-th-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/generated-caption-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/generated-caption-expected.png
deleted file mode 100644
index ef285100..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/generated-caption-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/mozilla-bug10296-vertical-align-1-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/mozilla-bug10296-vertical-align-1-expected.png
deleted file mode 100644
index 12228bc..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/mozilla-bug10296-vertical-align-1-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/mozilla-bug10296-vertical-align-2-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/mozilla-bug10296-vertical-align-2-expected.png
deleted file mode 100644
index 7e83b28..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/mozilla-bug10296-vertical-align-2-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/multiple-captions-display-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/multiple-captions-display-expected.png
deleted file mode 100644
index be93e940..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/multiple-captions-display-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/nested-percent-height-table-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/nested-percent-height-table-expected.png
deleted file mode 100644
index c6589142..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/nested-percent-height-table-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/percent-heights-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/percent-heights-expected.png
deleted file mode 100644
index 2fd46b8..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/percent-heights-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/remove-td-display-none-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/remove-td-display-none-expected.png
deleted file mode 100644
index c71d4de..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/remove-td-display-none-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/rowspan-paint-order-vertical-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/rowspan-paint-order-vertical-expected.png
deleted file mode 100644
index c0113ec..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/rowspan-paint-order-vertical-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/rtl-cell-display-none-assert-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/rtl-cell-display-none-assert-expected.png
deleted file mode 100644
index 1f07f4e..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/rtl-cell-display-none-assert-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/table-and-parts-outline-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/table-and-parts-outline-expected.png
deleted file mode 100644
index 12b8ca7..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/table-and-parts-outline-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/table-before-child-in-table-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/table-before-child-in-table-expected.png
deleted file mode 100644
index 25c47a4..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/table-before-child-in-table-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/table-cell-after-child-in-table-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/table-cell-after-child-in-table-expected.png
deleted file mode 100644
index 3fedb3e..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/table-cell-after-child-in-table-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/table-cell-before-child-in-block-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/table-cell-before-child-in-block-expected.png
deleted file mode 100644
index 1adf9f4b..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/table-cell-before-child-in-block-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/table-cell-before-child-in-table-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/table-cell-before-child-in-table-expected.png
deleted file mode 100644
index 1b7f463..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/table-cell-before-child-in-table-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/table-display-types-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/table-display-types-expected.png
deleted file mode 100644
index 862faba..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/table-display-types-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/table-row-focus-ring-paint-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/table-row-focus-ring-paint-expected.png
deleted file mode 100644
index f61b65a..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/table-row-focus-ring-paint-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/table-rowspan-height-less-than-one-percent-expected.txt b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/table-rowspan-height-less-than-one-percent-expected.txt
deleted file mode 100644
index a666f4a..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/table-rowspan-height-less-than-one-percent-expected.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-Test for chromium bug : 408066. ASSERTION FAILED: !extraRowSpanningHeight in blink::RenderTableSection::distributeRowSpanHeightToRows.
-	
-PASS
-r0c0
-
-r2c0
-	
-PASS
-r0c0	r0c1
-
-r2c0
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/text-field-baseline-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/text-field-baseline-expected.png
deleted file mode 100644
index 8cfc4c7..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/text-field-baseline-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/unbreakable-images-quirk-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/unbreakable-images-quirk-expected.png
deleted file mode 100644
index 166406d..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/layout_ng_fragment_traversal/fast/table/unbreakable-images-quirk-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-attachment-005-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-attachment-005-expected.png
deleted file mode 100644
index e8d0fff6..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-attachment-005-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-attachment-006-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-attachment-006-expected.png
deleted file mode 100644
index 638e91e..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-attachment-006-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-attachment-007-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-attachment-007-expected.png
deleted file mode 100644
index 6dfb755..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-attachment-007-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-attachment-008-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-attachment-008-expected.png
deleted file mode 100644
index 861de33..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-attachment-008-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-position-201-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-position-201-expected.png
deleted file mode 100644
index d88f48d..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-position-201-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/block/basic/016-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/block/basic/016-expected.png
deleted file mode 100644
index 4e57e33..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/block/basic/016-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/block/float/011-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/block/float/011-expected.png
deleted file mode 100644
index 37a32ce9..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/block/float/011-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/block/float/015-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/block/float/015-expected.png
deleted file mode 100644
index 69c39e6d..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/block/float/015-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/001-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/001-expected.png
deleted file mode 100644
index 7e1abda..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/001-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/005-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/005-expected.png
deleted file mode 100644
index 7e1abda..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/005-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/block-inside-inline/001-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/block-inside-inline/001-expected.png
deleted file mode 100644
index 7e1abda..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/block-inside-inline/001-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/block-inside-inline/005-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/block-inside-inline/005-expected.png
deleted file mode 100644
index 7e1abda..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/block-inside-inline/005-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/003-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/003-expected.png
deleted file mode 100644
index 44113e6..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/003-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/004-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/004-expected.png
deleted file mode 100644
index 02ca1778..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/004-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/010-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/010-expected.png
deleted file mode 100644
index beb081d3..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/010-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/011-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/011-expected.png
deleted file mode 100644
index 0dbbd12..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/011-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/016-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/016-expected.png
deleted file mode 100644
index 95c57c6..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/016-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/020-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/020-expected.png
deleted file mode 100644
index 4e156e6..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/020-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/022-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/022-expected.png
deleted file mode 100644
index c54e060..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/022-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/023-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/023-expected.png
deleted file mode 100644
index 9513482..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/023-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/026-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/026-expected.png
deleted file mode 100644
index 9ed1196..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/026-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/035-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/035-expected.png
deleted file mode 100644
index cdd7ba4..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/035-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/035-vertical-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/035-vertical-expected.png
deleted file mode 100644
index f2cd926..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/035-vertical-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/039-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/039-expected.png
deleted file mode 100644
index d13eebe..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/039-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/041-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/041-expected.png
deleted file mode 100644
index 3b9c9675..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/041-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/append-cells2-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/append-cells2-expected.png
deleted file mode 100644
index f2769a3..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/append-cells2-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/auto-with-percent-height-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/auto-with-percent-height-expected.png
deleted file mode 100644
index 26f4bfc..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/auto-with-percent-height-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/auto-with-percent-height-vertical-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/auto-with-percent-height-vertical-expected.png
deleted file mode 100644
index 1f26daf..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/auto-with-percent-height-vertical-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-cell-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-cell-expected.png
deleted file mode 100644
index 9429ba6..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-cell-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-expected.png
deleted file mode 100644
index 046f9709..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-group-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-group-expected.png
deleted file mode 100644
index 33daa52..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-group-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-expected.png
deleted file mode 100644
index 5381629..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-quirks-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-quirks-expected.png
deleted file mode 100644
index 97a6fe3c..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-quirks-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-expected.png
deleted file mode 100644
index d33dcb44..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-group-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-group-expected.png
deleted file mode 100644
index 0e5587f..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-group-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-hide-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-hide-expected.png
deleted file mode 100644
index 60c2c76..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-hide-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-opacity-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-opacity-collapsed-border-expected.png
deleted file mode 100644
index 1ef4432..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-opacity-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-opacity-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-opacity-expected.png
deleted file mode 100644
index 1ef4432..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-opacity-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-show-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-show-collapsed-border-expected.png
deleted file mode 100644
index 50b9e285..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-show-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-show-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-show-expected.png
deleted file mode 100644
index a301495..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-show-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-cell-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-cell-expected.png
deleted file mode 100644
index 4345817..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-cell-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-column-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-column-expected.png
deleted file mode 100644
index 2924eb93..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-column-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-column-group-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-column-group-expected.png
deleted file mode 100644
index 2ec05bce..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-column-group-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-expected.png
deleted file mode 100644
index 187ee37..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-row-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-row-expected.png
deleted file mode 100644
index b2f1df5..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-row-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-row-group-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-row-group-expected.png
deleted file mode 100644
index 0e58f78d..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-row-group-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-cell-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-cell-expected.png
deleted file mode 100644
index 1abcf04..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-cell-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-column-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-column-expected.png
deleted file mode 100644
index be2193d..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-column-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-column-group-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-column-group-expected.png
deleted file mode 100644
index 3d4db515..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-column-group-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-expected.png
deleted file mode 100644
index ffa8bb75..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-row-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-row-expected.png
deleted file mode 100644
index e76dbba..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-row-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-row-group-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-row-group-expected.png
deleted file mode 100644
index e55a6f7..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-row-group-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/001-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/001-expected.png
deleted file mode 100644
index d7f294a..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/001-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/001-vertical-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/001-vertical-expected.png
deleted file mode 100644
index 75230ffa..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/001-vertical-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/cell-coalescing-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/cell-coalescing-expected.png
deleted file mode 100644
index 2d9e6f2..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/cell-coalescing-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/cellindex-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/cellindex-expected.png
deleted file mode 100644
index 9311d035..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/cellindex-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/colgroup-preceded-by-caption-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/colgroup-preceded-by-caption-expected.png
deleted file mode 100644
index 8cf4fac..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/colgroup-preceded-by-caption-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/colgroup-spanning-groups-rules-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/colgroup-spanning-groups-rules-expected.png
deleted file mode 100644
index baa9ece..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/colgroup-spanning-groups-rules-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/dynamic-caption-add-before-child-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/dynamic-caption-add-before-child-expected.png
deleted file mode 100644
index 59715b1..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/dynamic-caption-add-before-child-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/dynamic-caption-add-remove-before-child-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/dynamic-caption-add-remove-before-child-expected.png
deleted file mode 100644
index cccc8e5..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/dynamic-caption-add-remove-before-child-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/dynamic-descendant-percentage-height-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/dynamic-descendant-percentage-height-expected.png
deleted file mode 100644
index 29ac34b..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/dynamic-descendant-percentage-height-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/floating-th-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/floating-th-expected.png
deleted file mode 100644
index 59474acc..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/floating-th-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/generated-caption-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/generated-caption-expected.png
deleted file mode 100644
index ef285100..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/generated-caption-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/mozilla-bug10296-vertical-align-1-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/mozilla-bug10296-vertical-align-1-expected.png
deleted file mode 100644
index 12228bc..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/mozilla-bug10296-vertical-align-1-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/mozilla-bug10296-vertical-align-2-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/mozilla-bug10296-vertical-align-2-expected.png
deleted file mode 100644
index 7e83b28..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/mozilla-bug10296-vertical-align-2-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/multiple-captions-display-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/multiple-captions-display-expected.png
deleted file mode 100644
index be93e940..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/multiple-captions-display-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/nested-percent-height-table-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/nested-percent-height-table-expected.png
deleted file mode 100644
index c6589142..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/nested-percent-height-table-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/percent-heights-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/percent-heights-expected.png
deleted file mode 100644
index 2fd46b8..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/percent-heights-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/remove-td-display-none-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/remove-td-display-none-expected.png
deleted file mode 100644
index c71d4de..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/remove-td-display-none-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/rowspan-paint-order-vertical-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/rowspan-paint-order-vertical-expected.png
deleted file mode 100644
index c0113ec..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/rowspan-paint-order-vertical-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/rtl-cell-display-none-assert-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/rtl-cell-display-none-assert-expected.png
deleted file mode 100644
index 1f07f4e..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/rtl-cell-display-none-assert-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/table-and-parts-outline-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/table-and-parts-outline-expected.png
deleted file mode 100644
index 12b8ca7..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/table-and-parts-outline-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/table-before-child-in-table-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/table-before-child-in-table-expected.png
deleted file mode 100644
index 25c47a4..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/table-before-child-in-table-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/table-cell-after-child-in-table-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/table-cell-after-child-in-table-expected.png
deleted file mode 100644
index 3fedb3e..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/table-cell-after-child-in-table-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/table-cell-before-child-in-block-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/table-cell-before-child-in-block-expected.png
deleted file mode 100644
index 1adf9f4b..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/table-cell-before-child-in-block-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/table-cell-before-child-in-table-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/table-cell-before-child-in-table-expected.png
deleted file mode 100644
index 1b7f463..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/table-cell-before-child-in-table-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/table-display-types-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/table-display-types-expected.png
deleted file mode 100644
index 862faba..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/table-display-types-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/table-row-focus-ring-paint-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/table-row-focus-ring-paint-expected.png
deleted file mode 100644
index f61b65a..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/table-row-focus-ring-paint-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/table-rowspan-height-less-than-one-percent-expected.txt b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/table-rowspan-height-less-than-one-percent-expected.txt
deleted file mode 100644
index a666f4a..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/table-rowspan-height-less-than-one-percent-expected.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-Test for chromium bug : 408066. ASSERTION FAILED: !extraRowSpanningHeight in blink::RenderTableSection::distributeRowSpanHeightToRows.
-	
-PASS
-r0c0
-
-r2c0
-	
-PASS
-r0c0	r0c1
-
-r2c0
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/text-field-baseline-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/text-field-baseline-expected.png
deleted file mode 100644
index 8cfc4c7..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/text-field-baseline-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/unbreakable-images-quirk-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/unbreakable-images-quirk-expected.png
deleted file mode 100644
index 166406d..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/layout_ng_fragment_traversal/fast/table/unbreakable-images-quirk-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-position-201-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-position-201-expected.png
deleted file mode 100644
index 995f4194..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/backgrounds/background-position-201-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/block/basic/014-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/block/basic/014-expected.png
deleted file mode 100644
index d0edaabe..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/block/basic/014-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/block/basic/016-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/block/basic/016-expected.png
deleted file mode 100644
index 4e57e33..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/block/basic/016-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/block/float/011-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/block/float/011-expected.png
deleted file mode 100644
index 37a32ce9..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/block/float/011-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/block/float/015-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/block/float/015-expected.png
deleted file mode 100644
index 69c39e6d..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/block/float/015-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/block/float/016-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/block/float/016-expected.png
deleted file mode 100644
index c2f71509..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/block/float/016-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/001-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/001-expected.png
deleted file mode 100644
index 7e1abda..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/001-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/005-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/005-expected.png
deleted file mode 100644
index 7e1abda..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/005-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/block-inside-inline/001-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/block-inside-inline/001-expected.png
deleted file mode 100644
index 7e1abda..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/block-inside-inline/001-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/block-inside-inline/005-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/block-inside-inline/005-expected.png
deleted file mode 100644
index 7e1abda..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/block-inside-inline/005-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/003-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/003-expected.png
deleted file mode 100644
index 44113e6..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/003-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/004-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/004-expected.png
deleted file mode 100644
index 02ca1778..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/004-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/010-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/010-expected.png
deleted file mode 100644
index beb081d3..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/010-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/011-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/011-expected.png
deleted file mode 100644
index 0dbbd12..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/011-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/016-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/016-expected.png
deleted file mode 100644
index 95c57c6..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/016-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/020-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/020-expected.png
deleted file mode 100644
index 4e156e6..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/020-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/022-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/022-expected.png
deleted file mode 100644
index c54e060..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/022-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/023-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/023-expected.png
deleted file mode 100644
index 9513482..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/023-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/026-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/026-expected.png
deleted file mode 100644
index 9ed1196..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/026-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/035-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/035-expected.png
deleted file mode 100644
index cdd7ba4..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/035-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/035-vertical-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/035-vertical-expected.png
deleted file mode 100644
index f2cd926..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/035-vertical-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/039-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/039-expected.png
deleted file mode 100644
index d13eebe..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/039-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/041-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/041-expected.png
deleted file mode 100644
index 3b9c9675..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/041-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/append-cells2-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/append-cells2-expected.png
deleted file mode 100644
index f2769a3..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/append-cells2-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/auto-with-percent-height-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/auto-with-percent-height-expected.png
deleted file mode 100644
index 26f4bfc..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/auto-with-percent-height-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/auto-with-percent-height-vertical-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/auto-with-percent-height-vertical-expected.png
deleted file mode 100644
index 1f26daf..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/auto-with-percent-height-vertical-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-cell-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-cell-collapsed-border-expected.png
deleted file mode 100644
index d040891..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-cell-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-cell-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-cell-expected.png
deleted file mode 100644
index 9429ba6..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-cell-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-collapsed-border-expected.png
deleted file mode 100644
index 6314ec8..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-collapsed-border-expected.png
deleted file mode 100644
index b71feca..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-expected.png
deleted file mode 100644
index 046f9709..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-group-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-group-collapsed-border-expected.png
deleted file mode 100644
index ea38ee4..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-group-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-group-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-group-expected.png
deleted file mode 100644
index 33daa52..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-group-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-expected.png
deleted file mode 100644
index 5381629..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-quirks-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-quirks-collapsed-border-expected.png
deleted file mode 100644
index 65a6433..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-quirks-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-quirks-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-quirks-expected.png
deleted file mode 100644
index 97a6fe3c..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-quirks-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-collapsed-border-expected.png
deleted file mode 100644
index f6a563d..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-expected.png
deleted file mode 100644
index d33dcb44..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-group-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-group-collapsed-border-expected.png
deleted file mode 100644
index 0ec184b..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-group-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-group-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-group-expected.png
deleted file mode 100644
index 0e5587f..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-group-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-hide-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-hide-collapsed-border-expected.png
deleted file mode 100644
index e6fca27b..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-hide-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-hide-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-hide-expected.png
deleted file mode 100644
index 60c2c76..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-hide-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-opacity-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-opacity-collapsed-border-expected.png
deleted file mode 100644
index 1ef4432..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-opacity-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-opacity-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-opacity-expected.png
deleted file mode 100644
index 1ef4432..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-opacity-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-show-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-show-collapsed-border-expected.png
deleted file mode 100644
index 50b9e285..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-show-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-show-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-show-expected.png
deleted file mode 100644
index a301495..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-show-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-cell-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-cell-collapsed-border-expected.png
deleted file mode 100644
index 2baa6aae..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-cell-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-cell-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-cell-expected.png
deleted file mode 100644
index 4345817..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-cell-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-collapsed-border-expected.png
deleted file mode 100644
index 7d46478..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-column-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-column-collapsed-border-expected.png
deleted file mode 100644
index b3340c5b..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-column-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-column-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-column-expected.png
deleted file mode 100644
index 2924eb93..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-column-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-column-group-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-column-group-collapsed-border-expected.png
deleted file mode 100644
index de9ad9c..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-column-group-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-column-group-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-column-group-expected.png
deleted file mode 100644
index 2ec05bce..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-column-group-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-expected.png
deleted file mode 100644
index 187ee37..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-row-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-row-collapsed-border-expected.png
deleted file mode 100644
index a18790f..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-row-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-row-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-row-expected.png
deleted file mode 100644
index b2f1df5..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-row-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-row-group-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-row-group-collapsed-border-expected.png
deleted file mode 100644
index 2e7f77b..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-row-group-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-row-group-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-row-group-expected.png
deleted file mode 100644
index 0e58f78d..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-row-group-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-cell-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-cell-collapsed-border-expected.png
deleted file mode 100644
index db6b5b3..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-cell-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-cell-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-cell-expected.png
deleted file mode 100644
index 1abcf04..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-cell-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-collapsed-border-expected.png
deleted file mode 100644
index 5ad75766..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-column-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-column-collapsed-border-expected.png
deleted file mode 100644
index 5eae376..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-column-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-column-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-column-expected.png
deleted file mode 100644
index be2193d..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-column-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png
deleted file mode 100644
index 609a18a..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-column-group-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-column-group-expected.png
deleted file mode 100644
index 3d4db515..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-column-group-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-expected.png
deleted file mode 100644
index ffa8bb75..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-row-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-row-collapsed-border-expected.png
deleted file mode 100644
index 3c7ef85..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-row-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-row-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-row-expected.png
deleted file mode 100644
index e76dbba..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-row-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png
deleted file mode 100644
index c91e152..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-row-group-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-row-group-expected.png
deleted file mode 100644
index e55a6f7..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-row-group-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/001-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/001-expected.png
deleted file mode 100644
index d7f294a..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/001-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/001-vertical-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/001-vertical-expected.png
deleted file mode 100644
index 75230ffa..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/001-vertical-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/cell-coalescing-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/cell-coalescing-expected.png
deleted file mode 100644
index 2d9e6f2..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/cell-coalescing-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/cellindex-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/cellindex-expected.png
deleted file mode 100644
index 9311d035..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/cellindex-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/colgroup-preceded-by-caption-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/colgroup-preceded-by-caption-expected.png
deleted file mode 100644
index 8cf4fac..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/colgroup-preceded-by-caption-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/colgroup-spanning-groups-rules-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/colgroup-spanning-groups-rules-expected.png
deleted file mode 100644
index baa9ece..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/colgroup-spanning-groups-rules-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/dynamic-caption-add-before-child-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/dynamic-caption-add-before-child-expected.png
deleted file mode 100644
index 59715b1..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/dynamic-caption-add-before-child-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/dynamic-caption-add-remove-before-child-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/dynamic-caption-add-remove-before-child-expected.png
deleted file mode 100644
index cccc8e5..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/dynamic-caption-add-remove-before-child-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/dynamic-descendant-percentage-height-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/dynamic-descendant-percentage-height-expected.png
deleted file mode 100644
index 29ac34b..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/dynamic-descendant-percentage-height-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/floating-th-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/floating-th-expected.png
deleted file mode 100644
index 59474acc..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/floating-th-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/generated-caption-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/generated-caption-expected.png
deleted file mode 100644
index ef285100..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/generated-caption-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/mozilla-bug10296-vertical-align-1-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/mozilla-bug10296-vertical-align-1-expected.png
deleted file mode 100644
index 12228bc..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/mozilla-bug10296-vertical-align-1-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/mozilla-bug10296-vertical-align-2-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/mozilla-bug10296-vertical-align-2-expected.png
deleted file mode 100644
index 7e83b28..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/mozilla-bug10296-vertical-align-2-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/multiple-captions-display-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/multiple-captions-display-expected.png
deleted file mode 100644
index be93e940..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/multiple-captions-display-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/nested-percent-height-table-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/nested-percent-height-table-expected.png
deleted file mode 100644
index c6589142..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/nested-percent-height-table-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/percent-heights-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/percent-heights-expected.png
deleted file mode 100644
index 2fd46b8..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/percent-heights-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/remove-td-display-none-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/remove-td-display-none-expected.png
deleted file mode 100644
index c71d4de..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/remove-td-display-none-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/rowspan-paint-order-vertical-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/rowspan-paint-order-vertical-expected.png
deleted file mode 100644
index c0113ec..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/rowspan-paint-order-vertical-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/rtl-cell-display-none-assert-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/rtl-cell-display-none-assert-expected.png
deleted file mode 100644
index 1f07f4e..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/rtl-cell-display-none-assert-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/table-and-parts-outline-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/table-and-parts-outline-expected.png
deleted file mode 100644
index 12b8ca7..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/table-and-parts-outline-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/table-before-child-in-table-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/table-before-child-in-table-expected.png
deleted file mode 100644
index 25c47a4..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/table-before-child-in-table-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/table-cell-after-child-in-table-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/table-cell-after-child-in-table-expected.png
deleted file mode 100644
index 3fedb3e..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/table-cell-after-child-in-table-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/table-cell-before-child-in-block-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/table-cell-before-child-in-block-expected.png
deleted file mode 100644
index 1adf9f4b..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/table-cell-before-child-in-block-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/table-cell-before-child-in-table-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/table-cell-before-child-in-table-expected.png
deleted file mode 100644
index 1b7f463..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/table-cell-before-child-in-table-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/table-display-types-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/table-display-types-expected.png
deleted file mode 100644
index 862faba..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/table-display-types-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/table-row-focus-ring-paint-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/table-row-focus-ring-paint-expected.png
deleted file mode 100644
index f61b65a..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/table-row-focus-ring-paint-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/table-rowspan-height-less-than-one-percent-expected.txt b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/table-rowspan-height-less-than-one-percent-expected.txt
deleted file mode 100644
index a666f4a..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/table-rowspan-height-less-than-one-percent-expected.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-Test for chromium bug : 408066. ASSERTION FAILED: !extraRowSpanningHeight in blink::RenderTableSection::distributeRowSpanHeightToRows.
-	
-PASS
-r0c0
-
-r2c0
-	
-PASS
-r0c0	r0c1
-
-r2c0
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/text-field-baseline-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/text-field-baseline-expected.png
deleted file mode 100644
index 8cfc4c7..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/text-field-baseline-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/unbreakable-images-quirk-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/unbreakable-images-quirk-expected.png
deleted file mode 100644
index 166406d..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_fragment_traversal/fast/table/unbreakable-images-quirk-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/block/basic/016-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/block/basic/016-expected.png
deleted file mode 100644
index 4e57e33..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/block/basic/016-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/block/float/011-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/block/float/011-expected.png
deleted file mode 100644
index 37a32ce9..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/block/float/011-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/block/float/015-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/block/float/015-expected.png
deleted file mode 100644
index 69c39e6d..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/block/float/015-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/001-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/001-expected.png
deleted file mode 100644
index 7e1abda..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/001-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/005-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/005-expected.png
deleted file mode 100644
index 7e1abda..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/005-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/block-inside-inline/001-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/block-inside-inline/001-expected.png
deleted file mode 100644
index 7e1abda..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/block-inside-inline/001-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/block-inside-inline/005-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/block-inside-inline/005-expected.png
deleted file mode 100644
index 7e1abda..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/block-inside-inline/005-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/003-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/003-expected.png
deleted file mode 100644
index 44113e6..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/003-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/004-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/004-expected.png
deleted file mode 100644
index 02ca1778..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/004-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/010-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/010-expected.png
deleted file mode 100644
index beb081d3..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/010-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/011-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/011-expected.png
deleted file mode 100644
index 0dbbd12..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/011-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/016-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/016-expected.png
deleted file mode 100644
index 95c57c6..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/016-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/020-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/020-expected.png
deleted file mode 100644
index 4e156e6..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/020-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/023-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/023-expected.png
deleted file mode 100644
index 9513482..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/023-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/026-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/026-expected.png
deleted file mode 100644
index 9ed1196..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/026-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/035-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/035-expected.png
deleted file mode 100644
index cdd7ba4..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/035-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/035-vertical-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/035-vertical-expected.png
deleted file mode 100644
index f2cd926..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/035-vertical-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/039-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/039-expected.png
deleted file mode 100644
index d13eebe..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/039-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/041-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/041-expected.png
deleted file mode 100644
index 3b9c9675..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/041-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/append-cells2-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/append-cells2-expected.png
deleted file mode 100644
index f2769a3..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/append-cells2-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/auto-with-percent-height-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/auto-with-percent-height-expected.png
deleted file mode 100644
index 26f4bfc..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/auto-with-percent-height-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/auto-with-percent-height-vertical-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/auto-with-percent-height-vertical-expected.png
deleted file mode 100644
index 1f26daf..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/auto-with-percent-height-vertical-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-opacity-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-opacity-collapsed-border-expected.png
deleted file mode 100644
index 1ef4432..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-opacity-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-opacity-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-opacity-expected.png
deleted file mode 100644
index 1ef4432..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-opacity-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-show-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-show-collapsed-border-expected.png
deleted file mode 100644
index 50b9e285..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-show-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-show-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-show-expected.png
deleted file mode 100644
index a301495..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-show-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-collapsed-border-expected.png
deleted file mode 100644
index 4769a59..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png
deleted file mode 100644
index b0f66b8..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/001-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/001-expected.png
deleted file mode 100644
index d7f294a..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/001-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/001-vertical-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/001-vertical-expected.png
deleted file mode 100644
index 75230ffa..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/001-vertical-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/cell-coalescing-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/cell-coalescing-expected.png
deleted file mode 100644
index 2d9e6f2..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/cell-coalescing-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/cellindex-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/cellindex-expected.png
deleted file mode 100644
index 9311d035..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/cellindex-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/colgroup-preceded-by-caption-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/colgroup-preceded-by-caption-expected.png
deleted file mode 100644
index 8cf4fac..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/colgroup-preceded-by-caption-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/colgroup-spanning-groups-rules-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/colgroup-spanning-groups-rules-expected.png
deleted file mode 100644
index baa9ece..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/colgroup-spanning-groups-rules-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/dynamic-caption-add-before-child-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/dynamic-caption-add-before-child-expected.png
deleted file mode 100644
index 59715b1..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/dynamic-caption-add-before-child-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/dynamic-caption-add-remove-before-child-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/dynamic-caption-add-remove-before-child-expected.png
deleted file mode 100644
index cccc8e5..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/dynamic-caption-add-remove-before-child-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/dynamic-descendant-percentage-height-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/dynamic-descendant-percentage-height-expected.png
deleted file mode 100644
index 29ac34b..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/dynamic-descendant-percentage-height-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/floating-th-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/floating-th-expected.png
deleted file mode 100644
index 59474acc..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/floating-th-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/generated-caption-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/generated-caption-expected.png
deleted file mode 100644
index ef285100..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/generated-caption-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/mozilla-bug10296-vertical-align-1-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/mozilla-bug10296-vertical-align-1-expected.png
deleted file mode 100644
index 12228bc..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/mozilla-bug10296-vertical-align-1-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/mozilla-bug10296-vertical-align-2-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/mozilla-bug10296-vertical-align-2-expected.png
deleted file mode 100644
index 7e83b28..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/mozilla-bug10296-vertical-align-2-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/multiple-captions-display-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/multiple-captions-display-expected.png
deleted file mode 100644
index be93e940..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/multiple-captions-display-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/nested-percent-height-table-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/nested-percent-height-table-expected.png
deleted file mode 100644
index c6589142..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/nested-percent-height-table-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/percent-heights-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/percent-heights-expected.png
deleted file mode 100644
index 2fd46b8..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/percent-heights-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/remove-td-display-none-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/remove-td-display-none-expected.png
deleted file mode 100644
index c71d4de..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/remove-td-display-none-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/rowspan-paint-order-vertical-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/rowspan-paint-order-vertical-expected.png
deleted file mode 100644
index c0113ec..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/rowspan-paint-order-vertical-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/rtl-cell-display-none-assert-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/rtl-cell-display-none-assert-expected.png
deleted file mode 100644
index 1f07f4e..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/rtl-cell-display-none-assert-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/table-and-parts-outline-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/table-and-parts-outline-expected.png
deleted file mode 100644
index 12b8ca7..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/table-and-parts-outline-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/table-before-child-in-table-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/table-before-child-in-table-expected.png
deleted file mode 100644
index 25c47a4..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/table-before-child-in-table-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/table-cell-after-child-in-table-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/table-cell-after-child-in-table-expected.png
deleted file mode 100644
index 3fedb3e..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/table-cell-after-child-in-table-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/table-cell-before-child-in-block-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/table-cell-before-child-in-block-expected.png
deleted file mode 100644
index 1adf9f4b..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/table-cell-before-child-in-block-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/table-cell-before-child-in-table-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/table-cell-before-child-in-table-expected.png
deleted file mode 100644
index 1b7f463..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/table-cell-before-child-in-table-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/table-display-types-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/table-display-types-expected.png
deleted file mode 100644
index 862faba..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/table-display-types-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/table-row-focus-ring-paint-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/table-row-focus-ring-paint-expected.png
deleted file mode 100644
index f61b65a..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/table-row-focus-ring-paint-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/table-rowspan-height-less-than-one-percent-expected.txt b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/table-rowspan-height-less-than-one-percent-expected.txt
deleted file mode 100644
index a666f4a..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/table-rowspan-height-less-than-one-percent-expected.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-Test for chromium bug : 408066. ASSERTION FAILED: !extraRowSpanningHeight in blink::RenderTableSection::distributeRowSpanHeightToRows.
-	
-PASS
-r0c0
-
-r2c0
-	
-PASS
-r0c0	r0c1
-
-r2c0
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/text-field-baseline-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/text-field-baseline-expected.png
deleted file mode 100644
index 8cfc4c7..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/text-field-baseline-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/unbreakable-images-quirk-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/unbreakable-images-quirk-expected.png
deleted file mode 100644
index 166406d..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/layout_ng_fragment_traversal/fast/table/unbreakable-images-quirk-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/block/basic/016-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/block/basic/016-expected.png
deleted file mode 100644
index 4e57e33..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/block/basic/016-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/block/float/011-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/block/float/011-expected.png
deleted file mode 100644
index 37a32ce9..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/block/float/011-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/block/float/032-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/block/float/032-expected.png
deleted file mode 100644
index dd286eb..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/block/float/032-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/block/float/float-avoidance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/block/float/float-avoidance-expected.png
deleted file mode 100644
index 1a2fec16..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/block/float/float-avoidance-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/001-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/001-expected.png
deleted file mode 100644
index 7e1abda..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/001-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/005-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/005-expected.png
deleted file mode 100644
index 7e1abda..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/005-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/103-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/103-expected.png
deleted file mode 100644
index 341f32bc..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/103-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/block-inside-inline/001-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/block-inside-inline/001-expected.png
deleted file mode 100644
index 7e1abda..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/block-inside-inline/001-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/block-inside-inline/005-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/block-inside-inline/005-expected.png
deleted file mode 100644
index 7e1abda..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/block/margin-collapse/block-inside-inline/005-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/block/positioning/inline-block-relposition-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/block/positioning/inline-block-relposition-expected.png
deleted file mode 100644
index 085d03d0..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/block/positioning/inline-block-relposition-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/003-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/003-expected.png
deleted file mode 100644
index 44113e6..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/003-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/010-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/010-expected.png
deleted file mode 100644
index beb081d3..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/010-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/011-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/011-expected.png
deleted file mode 100644
index 0dbbd12..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/011-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/016-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/016-expected.png
deleted file mode 100644
index 95c57c6..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/016-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/020-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/020-expected.png
deleted file mode 100644
index 4e156e6..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/020-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/023-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/023-expected.png
deleted file mode 100644
index 9513482..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/023-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/026-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/026-expected.png
deleted file mode 100644
index 9ed1196..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/026-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/035-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/035-expected.png
deleted file mode 100644
index cdd7ba4..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/035-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/035-vertical-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/035-vertical-expected.png
deleted file mode 100644
index f2cd926..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/035-vertical-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/041-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/041-expected.png
deleted file mode 100644
index 3b9c9675..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/041-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/append-cells2-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/append-cells2-expected.png
deleted file mode 100644
index f2769a3..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/append-cells2-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/auto-with-percent-height-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/auto-with-percent-height-expected.png
deleted file mode 100644
index 26f4bfc..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/auto-with-percent-height-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/auto-with-percent-height-vertical-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/auto-with-percent-height-vertical-expected.png
deleted file mode 100644
index 1f26daf..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/auto-with-percent-height-vertical-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-collapsed-border-expected.png
deleted file mode 100644
index 8bf58821..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-collapsed-border-expected.png
deleted file mode 100644
index c38467f..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-group-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-group-collapsed-border-expected.png
deleted file mode 100644
index 931c6fb..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-group-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-quirks-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-quirks-collapsed-border-expected.png
deleted file mode 100644
index 55a095d..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-quirks-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-collapsed-border-expected.png
deleted file mode 100644
index 4da6101..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-group-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-group-collapsed-border-expected.png
deleted file mode 100644
index 8b16ca9..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-group-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-opacity-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-opacity-collapsed-border-expected.png
deleted file mode 100644
index 1ef4432..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-opacity-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-opacity-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-opacity-expected.png
deleted file mode 100644
index 1ef4432..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-opacity-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-show-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-show-collapsed-border-expected.png
deleted file mode 100644
index 50b9e285..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-show-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-show-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-show-expected.png
deleted file mode 100644
index a301495..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-show-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-collapsed-border-expected.png
deleted file mode 100644
index a3b160e..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-cell-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-cell-collapsed-border-expected.png
deleted file mode 100644
index 913d64d5..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-cell-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-row-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-row-collapsed-border-expected.png
deleted file mode 100644
index d7fe666..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-row-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/001-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/001-expected.png
deleted file mode 100644
index d7f294a..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/001-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/001-vertical-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/001-vertical-expected.png
deleted file mode 100644
index 75230ffa..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/001-vertical-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/004-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/004-expected.png
deleted file mode 100644
index 8a8ef813..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/004-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/border-collapsing-head-foot-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/border-collapsing-head-foot-expected.png
deleted file mode 100644
index fde1384..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/border-collapsing-head-foot-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/border-collapsing-head-foot-vertical-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/border-collapsing-head-foot-vertical-expected.png
deleted file mode 100644
index 309f952..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/border-collapsing-head-foot-vertical-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/cell-coalescing-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/cell-coalescing-expected.png
deleted file mode 100644
index 2d9e6f2..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/cell-coalescing-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/cellindex-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/cellindex-expected.png
deleted file mode 100644
index 9311d035..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/cellindex-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/colgroup-preceded-by-caption-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/colgroup-preceded-by-caption-expected.png
deleted file mode 100644
index 8cf4fac..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/colgroup-preceded-by-caption-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/colgroup-spanning-groups-rules-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/colgroup-spanning-groups-rules-expected.png
deleted file mode 100644
index baa9ece..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/colgroup-spanning-groups-rules-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/dynamic-caption-add-before-child-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/dynamic-caption-add-before-child-expected.png
deleted file mode 100644
index 59715b1..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/dynamic-caption-add-before-child-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/dynamic-caption-add-remove-before-child-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/dynamic-caption-add-remove-before-child-expected.png
deleted file mode 100644
index cccc8e5..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/dynamic-caption-add-remove-before-child-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/dynamic-descendant-percentage-height-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/dynamic-descendant-percentage-height-expected.png
deleted file mode 100644
index 29ac34b..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/dynamic-descendant-percentage-height-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/floating-th-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/floating-th-expected.png
deleted file mode 100644
index 59474acc..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/floating-th-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/generated-caption-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/generated-caption-expected.png
deleted file mode 100644
index ef285100..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/generated-caption-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/mozilla-bug10296-vertical-align-1-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/mozilla-bug10296-vertical-align-1-expected.png
deleted file mode 100644
index 12228bc..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/mozilla-bug10296-vertical-align-1-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/mozilla-bug10296-vertical-align-2-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/mozilla-bug10296-vertical-align-2-expected.png
deleted file mode 100644
index 7e83b28..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/mozilla-bug10296-vertical-align-2-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/multiple-captions-display-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/multiple-captions-display-expected.png
deleted file mode 100644
index be93e940..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/multiple-captions-display-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/percent-heights-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/percent-heights-expected.png
deleted file mode 100644
index 2fd46b8..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/percent-heights-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/remove-td-display-none-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/remove-td-display-none-expected.png
deleted file mode 100644
index c71d4de..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/remove-td-display-none-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/rowspan-paint-order-vertical-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/rowspan-paint-order-vertical-expected.png
deleted file mode 100644
index c0113ec..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/rowspan-paint-order-vertical-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/rtl-cell-display-none-assert-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/rtl-cell-display-none-assert-expected.png
deleted file mode 100644
index 1f07f4e..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/rtl-cell-display-none-assert-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/rules-attr-dynchange2-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/rules-attr-dynchange2-expected.png
deleted file mode 100644
index 4915140..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/rules-attr-dynchange2-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/spanOverlapRepaint-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/spanOverlapRepaint-expected.png
deleted file mode 100644
index c2b6c3dd..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/spanOverlapRepaint-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/table-and-parts-outline-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/table-and-parts-outline-expected.png
deleted file mode 100644
index 12b8ca7..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/table-and-parts-outline-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/table-cell-after-child-in-table-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/table-cell-after-child-in-table-expected.png
deleted file mode 100644
index 3fedb3e..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/table-cell-after-child-in-table-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/table-cell-before-child-in-block-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/table-cell-before-child-in-block-expected.png
deleted file mode 100644
index 1adf9f4b..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/table-cell-before-child-in-block-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/table-cell-before-child-in-table-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/table-cell-before-child-in-table-expected.png
deleted file mode 100644
index 1b7f463..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/table-cell-before-child-in-table-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/table-display-types-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/table-display-types-expected.png
deleted file mode 100644
index 862faba..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/table-display-types-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/table-row-focus-ring-paint-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/table-row-focus-ring-paint-expected.png
deleted file mode 100644
index f61b65a..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/table-row-focus-ring-paint-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/table-rowspan-height-less-than-one-percent-expected.txt b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/table-rowspan-height-less-than-one-percent-expected.txt
deleted file mode 100644
index a666f4a..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/table-rowspan-height-less-than-one-percent-expected.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-Test for chromium bug : 408066. ASSERTION FAILED: !extraRowSpanningHeight in blink::RenderTableSection::distributeRowSpanHeightToRows.
-	
-PASS
-r0c0
-
-r2c0
-	
-PASS
-r0c0	r0c1
-
-r2c0
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/text-field-baseline-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/text-field-baseline-expected.png
deleted file mode 100644
index 8cfc4c7..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/text-field-baseline-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/unbreakable-images-quirk-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/unbreakable-images-quirk-expected.png
deleted file mode 100644
index 166406d..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_fragment_traversal/fast/table/unbreakable-images-quirk-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-cell-collapsed-border-expected.png b/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-cell-collapsed-border-expected.png
deleted file mode 100644
index 1005306..0000000
--- a/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-cell-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-collapsed-border-expected.png b/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-collapsed-border-expected.png
deleted file mode 100644
index a352c58..0000000
--- a/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-collapsed-border-expected.png b/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-collapsed-border-expected.png
deleted file mode 100644
index e56b45d..0000000
--- a/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-group-collapsed-border-expected.png b/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-group-collapsed-border-expected.png
deleted file mode 100644
index 5739fb5..0000000
--- a/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-column-group-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-quirks-collapsed-border-expected.png b/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-quirks-collapsed-border-expected.png
deleted file mode 100644
index e3101c5..0000000
--- a/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-quirks-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-collapsed-border-expected.png b/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-collapsed-border-expected.png
deleted file mode 100644
index 765fb2af..0000000
--- a/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-group-collapsed-border-expected.png b/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-group-collapsed-border-expected.png
deleted file mode 100644
index d5ae2c5..0000000
--- a/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_border-table-row-group-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-hide-collapsed-border-expected.png b/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-hide-collapsed-border-expected.png
deleted file mode 100644
index 13f1757..0000000
--- a/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-hide-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-hide-expected.png b/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-hide-expected.png
deleted file mode 100644
index b5cfac2..0000000
--- a/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_layers-hide-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-cell-collapsed-border-expected.png b/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-cell-collapsed-border-expected.png
deleted file mode 100644
index 688774b..0000000
--- a/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-cell-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-collapsed-border-expected.png b/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-collapsed-border-expected.png
deleted file mode 100644
index 55510061..0000000
--- a/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-column-collapsed-border-expected.png b/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-column-collapsed-border-expected.png
deleted file mode 100644
index ec746e0..0000000
--- a/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-column-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-column-group-collapsed-border-expected.png b/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-column-group-collapsed-border-expected.png
deleted file mode 100644
index 13becee..0000000
--- a/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-column-group-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-row-collapsed-border-expected.png b/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-row-collapsed-border-expected.png
deleted file mode 100644
index 50d6bd4..0000000
--- a/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-row-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-row-group-collapsed-border-expected.png b/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-row-group-collapsed-border-expected.png
deleted file mode 100644
index 7f84a33..0000000
--- a/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_position-table-row-group-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-cell-collapsed-border-expected.png b/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-cell-collapsed-border-expected.png
deleted file mode 100644
index ed4d65c..0000000
--- a/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-cell-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-collapsed-border-expected.png b/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-collapsed-border-expected.png
deleted file mode 100644
index 51b06f7..0000000
--- a/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-column-collapsed-border-expected.png b/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-column-collapsed-border-expected.png
deleted file mode 100644
index ec83469..0000000
--- a/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-column-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png b/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png
deleted file mode 100644
index c7a0971..0000000
--- a/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-row-collapsed-border-expected.png b/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-row-collapsed-border-expected.png
deleted file mode 100644
index a0d3078..0000000
--- a/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-row-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png b/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png
deleted file mode 100644
index fb6bb3a..0000000
--- a/third_party/blink/web_tests/platform/win7/virtual/layout_ng_fragment_traversal/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/virtual/layout_ng_fragment_traversal/README.md b/third_party/blink/web_tests/virtual/layout_ng_fragment_traversal/README.md
deleted file mode 100644
index 4a67f50..0000000
--- a/third_party/blink/web_tests/virtual/layout_ng_fragment_traversal/README.md
+++ /dev/null
@@ -1 +0,0 @@
-Testing LayoutNGFragmentTraversal; see ../../VirtualTestSuites
diff --git a/third_party/blink/web_tests/virtual/layout_ng_fragment_traversal/fast/block/float/overhanging-tall-block-expected.png b/third_party/blink/web_tests/virtual/layout_ng_fragment_traversal/fast/block/float/overhanging-tall-block-expected.png
deleted file mode 100644
index 5039419..0000000
--- a/third_party/blink/web_tests/virtual/layout_ng_fragment_traversal/fast/block/float/overhanging-tall-block-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/equal-precedence-resolution-vertical-expected.png b/third_party/blink/web_tests/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/equal-precedence-resolution-vertical-expected.png
deleted file mode 100644
index 900a6367..0000000
--- a/third_party/blink/web_tests/virtual/layout_ng_fragment_traversal/fast/table/border-collapsing/equal-precedence-resolution-vertical-expected.png
+++ /dev/null
Binary files differ
diff --git a/tools/android/find_annotated_tests.py b/tools/android/find_annotated_tests.py
index a32df0a..5e4504d 100755
--- a/tools/android/find_annotated_tests.py
+++ b/tools/android/find_annotated_tests.py
@@ -30,7 +30,7 @@
 _CRBUG_ID_PATTERN = re.compile(r'crbug(?:.com)?/(\d+)')
 _EXPORT_TIME_FORMAT = '%Y%m%dT%H%M%S'
 _GIT_LOG_TIME_PATTERN = re.compile(r'\d+')
-_GIT_LOG_MESSAGE_PATTERN = r'Cr-Commit-Position: refs/heads/master@{#(\d+)}'
+_GIT_LOG_MESSAGE_PATTERN = r'Cr-Commit-Position: refs/heads/(?:master|main)@{#(\d+)}'
 _GIT_TIME_FORMAT = '%Y-%m-%dT%H:%M:%S'
 
 
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 40e2ba5..e5823108 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -11046,6 +11046,7 @@
   <int value="38" label="kAccountPasswordsSynced"/>
   <int value="39" label="kAccountCompromisedCredentials"/>
   <int value="40" label="kFaviconCacheExpiration"/>
+  <int value="41" label="kSecurePaymentConfirmationInstruments"/>
 </enum>
 
 <enum name="ChromeChannelForHistogram">
@@ -28847,6 +28848,7 @@
   <int value="1566" label="ACCESSIBILITY_PRIVATE_MAGNIFIERCENTERONPOINT"/>
   <int value="1567" label="STORAGE_SETACCESSLEVEL"/>
   <int value="1568" label="OS_TELEMETRY_GETOEMDATA"/>
+  <int value="1569" label="SCRIPTING_UNREGISTERCONTENTSCRIPTS"/>
 </enum>
 
 <enum name="ExtensionIconState">
@@ -47414,6 +47416,7 @@
   <int value="-1456789591" label="MediaFoundationVideoCapture:enabled"/>
   <int value="-1456627355" label="EnableEmojiContextMenu:disabled"/>
   <int value="-1456538122" label="SCTAuditing:enabled"/>
+  <int value="-1456449932" label="PartitionedCookies:enabled"/>
   <int value="-1456004000" label="VrShell:disabled"/>
   <int value="-1455852875" label="WebAuthentication:disabled"/>
   <int value="-1455559065"
@@ -51124,6 +51127,7 @@
   <int value="1553422694" label="EnablePalmOnMaxTouchMajor:enabled"/>
   <int value="1553777815" label="enable-search-prefetch-service"/>
   <int value="1556554961" label="DriveFsBidirectionalNativeMessaging:enabled"/>
+  <int value="1557680135" label="PartitionedCookies:disabled"/>
   <int value="1558410842" label="FilesZipNoNaCl:disabled"/>
   <int value="1559034872" label="AutofillPrefilledFields:enabled"/>
   <int value="1560188739" label="reader-mode-heuristics"/>
diff --git a/tools/metrics/histograms/metadata/navigation/histograms.xml b/tools/metrics/histograms/metadata/navigation/histograms.xml
index b6f035da..d655ed1 100644
--- a/tools/metrics/histograms/metadata/navigation/histograms.xml
+++ b/tools/metrics/histograms/metadata/navigation/histograms.xml
@@ -1436,7 +1436,10 @@
 
 <histogram
     name="Prerender.Experimental.PrerenderHostCancelReasonBeforeActivation"
-    enum="PrerenderHostFinalStatus" expires_after="2022-01-27">
+    enum="PrerenderHostFinalStatus" expires_after="2021-08-06">
+  <obsolete>
+    Removed from code in July 2021.
+  </obsolete>
   <owner>falken@chromium.org</owner>
   <owner>nhiroki@chromium.org</owner>
   <owner>toyoshim@chromium.org</owner>
@@ -1450,7 +1453,10 @@
 
 <histogram
     name="Prerender.Experimental.PrerenderHostCancelReasonDuringActivation"
-    enum="PrerenderHostFinalStatus" expires_after="2022-01-27">
+    enum="PrerenderHostFinalStatus" expires_after="2022-08-06">
+  <obsolete>
+    Removed from code in July 2021.
+  </obsolete>
   <owner>falken@chromium.org</owner>
   <owner>nhiroki@chromium.org</owner>
   <owner>toyoshim@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/others/histograms.xml b/tools/metrics/histograms/metadata/others/histograms.xml
index d86c858..358e70a 100644
--- a/tools/metrics/histograms/metadata/others/histograms.xml
+++ b/tools/metrics/histograms/metadata/others/histograms.xml
@@ -7937,6 +7937,9 @@
 
 <histogram name="IncognitoModePrefs.WindowsParentalControlsInitThread"
     enum="ThreadType" expires_after="M77">
+  <obsolete>
+    Removed in http://crrev.com/747875.
+  </obsolete>
   <owner>robliao@chromium.org</owner>
   <summary>
     The thread used to initialize the Windows parental controls.
@@ -7945,6 +7948,9 @@
 
 <histogram name="IncognitoModePrefs.WindowsParentalControlsInitTime" units="ms"
     expires_after="M77">
+  <obsolete>
+    Removed in http://crrev.com/747875.
+  </obsolete>
   <owner>robliao@chromium.org</owner>
   <summary>
     The amount of time that elapsed during a run of
diff --git a/tools/metrics/histograms/metadata/sync/histograms.xml b/tools/metrics/histograms/metadata/sync/histograms.xml
index e19185c..ccb4697 100644
--- a/tools/metrics/histograms/metadata/sync/histograms.xml
+++ b/tools/metrics/histograms/metadata/sync/histograms.xml
@@ -804,7 +804,7 @@
   </summary>
 </histogram>
 
-<histogram base="true" name="Sync.ModelTypeStoreBackendError.{Operation}"
+<histogram name="Sync.ModelTypeStoreBackendError.{Operation}"
     enum="LevelDBStatus" expires_after="2021-11-28">
   <owner>treib@chromium.org</owner>
   <owner>rushans@google.com</owner>
@@ -819,6 +819,7 @@
   <token key="Operation">
     <variant name="DeleteData"/>
     <variant name="GetStoreVersion"/>
+    <variant name="Init"/>
     <variant name="ReadAllRecords"/>
     <variant name="ReadRecords"/>
     <variant name="WriteModifications"/>
diff --git a/tools/perf/core/perfetto_binary_roller/binary_deps.json b/tools/perf/core/perfetto_binary_roller/binary_deps.json
index 7360b4c..41243aed 100644
--- a/tools/perf/core/perfetto_binary_roller/binary_deps.json
+++ b/tools/perf/core/perfetto_binary_roller/binary_deps.json
@@ -5,20 +5,20 @@
             "remote_path": "perfetto_binaries/trace_processor_shell/linux_arm/49b4b5dcbc312d8d2c3751cf29238b8efeb4e494/trace_processor_shell"
         },
         "win": {
-            "hash": "2d32f8ca491ef981f1d4c4b512613e76ba1d1bee",
-            "remote_path": "perfetto_binaries/trace_processor_shell/win/00e6f338d036b5d1ad547b979b612ec008fe3165/trace_processor_shell.exe"
+            "hash": "36ef9c195bf0a22db7ae802b4d5f935288418d9b",
+            "remote_path": "perfetto_binaries/trace_processor_shell/win/7d0822e5b1903542d5712673481fc0747ca34bb7/trace_processor_shell.exe"
         },
         "mac": {
-            "hash": "e353596db4eeb16778697e6a9cdae30adf2842dd",
-            "remote_path": "perfetto_binaries/trace_processor_shell/mac/00e6f338d036b5d1ad547b979b612ec008fe3165/trace_processor_shell"
+            "hash": "759138c283c53a676d110aaec9a3fbaa63007edd",
+            "remote_path": "perfetto_binaries/trace_processor_shell/mac/7d0822e5b1903542d5712673481fc0747ca34bb7/trace_processor_shell"
         },
         "linux_arm64": {
             "hash": "5074025a2898ec41a872e70a5719e417acb0a380",
             "remote_path": "perfetto_binaries/trace_processor_shell/linux_arm64/49b4b5dcbc312d8d2c3751cf29238b8efeb4e494/trace_processor_shell"
         },
         "linux": {
-            "hash": "6d8243db1d936c6f26a12d5f59b9460f4ef8c43d",
-            "remote_path": "perfetto_binaries/trace_processor_shell/linux/00e6f338d036b5d1ad547b979b612ec008fe3165/trace_processor_shell"
+            "hash": "78c0325104a03436a524816b2faa613c66ca47ac",
+            "remote_path": "perfetto_binaries/trace_processor_shell/linux/7d0822e5b1903542d5712673481fc0747ca34bb7/trace_processor_shell"
         }
     },
     "power_profile.sql": {
diff --git a/tools/style_variable_generator/README.md b/tools/style_variable_generator/README.md
index 88f7598..083f255 100644
--- a/tools/style_variable_generator/README.md
+++ b/tools/style_variable_generator/README.md
@@ -45,7 +45,7 @@
 each exported constant just points to a css variable. Before you can use these
 constants you need to include the css variables in your app. The recommended way
 in chromium is to add a `<link>` in `<head>` which points to
-`chrome://resources/chromeos/colors/cros_colors.generated.css`.
+`chrome://resources/chromeos/colors/cros_styles.css`.
 
 If you are using semantic colors in a situation where relying on
 `chrome://resources` is infeasible you can specify
diff --git a/tools/style_variable_generator/style_variable_generator.gni b/tools/style_variable_generator/style_variable_generator.gni
index 6148bc9..1ccaca7 100644
--- a/tools/style_variable_generator/style_variable_generator.gni
+++ b/tools/style_variable_generator/style_variable_generator.gni
@@ -44,7 +44,7 @@
                "//tools/style_variable_generator/css_generator.py",
                "//tools/style_variable_generator/css_generator.tmpl",
              ]
-    out_file = "$target_gen_dir/${original_target_name}.generated.css"
+    out_file = "$target_gen_dir/${original_target_name}.css"
     outputs = [ out_file ]
 
     args = [
diff --git a/ui/accessibility/platform/ax_platform_node_auralinux.cc b/ui/accessibility/platform/ax_platform_node_auralinux.cc
index 18f5d3e..32169f5 100644
--- a/ui/accessibility/platform/ax_platform_node_auralinux.cc
+++ b/ui/accessibility/platform/ax_platform_node_auralinux.cc
@@ -14,7 +14,6 @@
 #include <utility>
 #include <vector>
 
-#include "base/command_line.h"
 #include "base/compiler_specific.h"
 #include "base/cxx17_backports.h"
 #include "base/debug/leak_annotations.h"
@@ -22,7 +21,6 @@
 #include "base/no_destructor.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
-#include "base/strings/stringprintf.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/strings/utf_string_conversion_utils.h"
 #include "base/strings/utf_string_conversions.h"
@@ -31,14 +29,11 @@
 #include "ui/accessibility/ax_action_data.h"
 #include "ui/accessibility/ax_enum_util.h"
 #include "ui/accessibility/ax_enums.mojom.h"
-#include "ui/accessibility/ax_mode_observer.h"
 #include "ui/accessibility/ax_node_data.h"
 #include "ui/accessibility/ax_role_properties.h"
-#include "ui/accessibility/ax_tree_data.h"
 #include "ui/accessibility/platform/atk_util_auralinux.h"
 #include "ui/accessibility/platform/ax_platform_atk_hyperlink.h"
 #include "ui/accessibility/platform/ax_platform_node_delegate.h"
-#include "ui/accessibility/platform/ax_platform_node_delegate_base.h"
 #include "ui/accessibility/platform/ax_platform_text_boundary.h"
 #include "ui/gfx/geometry/rect_conversions.h"
 
@@ -354,24 +349,6 @@
   return g_strdup(result.c_str());
 }
 
-gfx::Point FindAtkObjectParentCoords(AtkObject* atk_object) {
-  if (!atk_object)
-    return gfx::Point(0, 0);
-
-  AXPlatformNodeAuraLinux* node =
-      AXPlatformNodeAuraLinux::FromAtkObject(atk_object);
-  if (node->GetAtkRole() == ATK_ROLE_FRAME) {
-    int x, y;
-    atk_component_get_extents(ATK_COMPONENT(atk_object), &x, &y, nullptr,
-                              nullptr, ATK_XY_WINDOW);
-    gfx::Point window_coords(x, y);
-    return window_coords;
-  }
-  atk_object = node->GetParent();
-
-  return FindAtkObjectParentCoords(atk_object);
-}
-
 AtkAttributeSet* PrependAtkAttributeToAtkAttributeSet(
     const char* name,
     const char* value,
diff --git a/ui/accessibility/platform/ax_platform_node_auralinux.h b/ui/accessibility/platform/ax_platform_node_auralinux.h
index 39d9786d0..1a559de 100644
--- a/ui/accessibility/platform/ax_platform_node_auralinux.h
+++ b/ui/accessibility/platform/ax_platform_node_auralinux.h
@@ -7,20 +7,15 @@
 
 #include <atk/atk.h>
 
-#include <map>
 #include <memory>
 #include <string>
 #include <utility>
-#include <vector>
 
 #include "base/macros.h"
 #include "base/strings/utf_offset_string_conversions.h"
-#include "base/strings/utf_string_conversions.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "ui/accessibility/ax_enums.mojom-forward.h"
 #include "ui/accessibility/ax_export.h"
-#include "ui/accessibility/ax_position.h"
-#include "ui/accessibility/ax_range.h"
 #include "ui/accessibility/platform/ax_platform_node_base.h"
 
 // This deleter is used in order to ensure that we properly always free memory
diff --git a/ui/chromeos/colors/BUILD.gn b/ui/chromeos/colors/BUILD.gn
deleted file mode 100644
index 0d833d5f..0000000
--- a/ui/chromeos/colors/BUILD.gn
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright 2020 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.
-
-import("//tools/style_variable_generator/style_variable_generator.gni")
-
-style_variable_generator("cros_colors") {
-  sources = [
-    "cros_colors.json5",
-    "cros_palette.json5",
-    "cros_typography.json5",
-  ]
-}
diff --git a/ui/chromeos/styles/BUILD.gn b/ui/chromeos/styles/BUILD.gn
new file mode 100644
index 0000000..17ad995
--- /dev/null
+++ b/ui/chromeos/styles/BUILD.gn
@@ -0,0 +1,13 @@
+# Copyright 2020 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.
+
+import("//tools/style_variable_generator/style_variable_generator.gni")
+
+style_variable_generator("cros_styles") {
+  sources = [
+    "cros_colors.json5",
+    "cros_palette.json5",
+    "cros_typography.json5",
+  ]
+}
diff --git a/ui/chromeos/colors/OWNERS b/ui/chromeos/styles/OWNERS
similarity index 100%
rename from ui/chromeos/colors/OWNERS
rename to ui/chromeos/styles/OWNERS
diff --git a/ui/chromeos/colors/PRESUBMIT.py b/ui/chromeos/styles/PRESUBMIT.py
similarity index 100%
rename from ui/chromeos/colors/PRESUBMIT.py
rename to ui/chromeos/styles/PRESUBMIT.py
diff --git a/ui/chromeos/colors/cros_colors.json5 b/ui/chromeos/styles/cros_colors.json5
similarity index 100%
rename from ui/chromeos/colors/cros_colors.json5
rename to ui/chromeos/styles/cros_colors.json5
diff --git a/ui/chromeos/colors/cros_palette.json5 b/ui/chromeos/styles/cros_palette.json5
similarity index 100%
rename from ui/chromeos/colors/cros_palette.json5
rename to ui/chromeos/styles/cros_palette.json5
diff --git a/ui/chromeos/colors/cros_typography.json5 b/ui/chromeos/styles/cros_typography.json5
similarity index 100%
rename from ui/chromeos/colors/cros_typography.json5
rename to ui/chromeos/styles/cros_typography.json5
diff --git a/ui/file_manager/file_manager/main.html b/ui/file_manager/file_manager/main.html
index bf16ae6..cf64d1b 100644
--- a/ui/file_manager/file_manager/main.html
+++ b/ui/file_manager/file_manager/main.html
@@ -12,7 +12,7 @@
 
     <link rel="stylesheet" href="chrome://resources/css/action_link.css">
     <link rel="stylesheet" href="chrome://resources/css/text_defaults.css">
-    <link rel="stylesheet" href="chrome://resources/chromeos/colors/cros_colors.generated.css">
+    <link rel="stylesheet" href="chrome://resources/chromeos/colors/cros_styles.css">
     <link rel="stylesheet" href="foreground/css/list.css">
     <link rel="stylesheet" href="foreground/css/table.css">
     <link rel="stylesheet" href="foreground/css/tree.css">
diff --git a/ui/resources/BUILD.gn b/ui/resources/BUILD.gn
index 1182b83..8fef193 100644
--- a/ui/resources/BUILD.gn
+++ b/ui/resources/BUILD.gn
@@ -42,7 +42,7 @@
 
   deps = [ "//ui/webui/resources:modulize" ]
   if (is_chromeos_ash) {
-    deps += [ "//ui/chromeos/colors:cros_colors_css" ]
+    deps += [ "//ui/chromeos/styles:cros_styles_css" ]
   }
 
   outputs = [
diff --git a/ui/webui/resources/cr_elements/chromeos/cros_color_overrides.html b/ui/webui/resources/cr_elements/chromeos/cros_color_overrides.html
index 213a699e..408ebd1 100644
--- a/ui/webui/resources/cr_elements/chromeos/cros_color_overrides.html
+++ b/ui/webui/resources/cr_elements/chromeos/cros_color_overrides.html
@@ -3,7 +3,7 @@
 <!--
 Style Module that defines color overrides for cr-elements on Chrome OS.
 
-This file plumbs semantic colors from cros_colors.css into cr-elements.
+This file plumbs semantic colors from cros_styles.css into cr-elements.
 
 To get Chrome OS System Colors, an element must:
 - be beneath a <html> element with a "cros" attribute
diff --git a/ui/webui/resources/webui_resources.grd b/ui/webui/resources/webui_resources.grd
index 8befebe..7ac7bf0 100644
--- a/ui/webui/resources/webui_resources.grd
+++ b/ui/webui/resources/webui_resources.grd
@@ -15,8 +15,8 @@
     <includes>
       <if expr="chromeos">
         <include name="IDR_WEBUI_CROS_COLORS_CSS"
-                 file="${root_gen_dir}/ui/chromeos/colors/cros_colors.generated.css"
-                 resource_path="chromeos/colors/cros_colors.generated.css"
+                 file="${root_gen_dir}/ui/chromeos/styles/cros_styles.css"
+                 resource_path="chromeos/colors/cros_styles.css"
                  type="chrome_html"
                  use_base_dir="false" />
       </if>
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/UrlBarControllerImpl.java b/weblayer/browser/java/org/chromium/weblayer_private/UrlBarControllerImpl.java
index 47cab38..229ffc3 100644
--- a/weblayer/browser/java/org/chromium/weblayer_private/UrlBarControllerImpl.java
+++ b/weblayer/browser/java/org/chromium/weblayer_private/UrlBarControllerImpl.java
@@ -259,7 +259,7 @@
                             mNativeUrlBarController),
                     mBrowserImpl.isWindowOnSmallDevice(),
                     /*skipIconForNeutralState=*/true,
-                    /*useUpdatedConnectionSecurityIndicators=*/true);
+                    /*useUpdatedConnectionSecurityIndicators=*/false);
         }
     }