diff --git a/DEPS b/DEPS
index f450f2a..4b3c188 100644
--- a/DEPS
+++ b/DEPS
@@ -209,7 +209,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Skia
   # and whatever else without interference from each other.
-  'skia_revision': 'bb4bf6eaafd3b70ae89b64b00de94d3a0978dccf',
+  'skia_revision': '115645ee9b1bacc0ae6767e67e81e2f96c14774a',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling V8
   # and whatever else without interference from each other.
@@ -260,7 +260,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling freetype
   # and whatever else without interference from each other.
-  'freetype_revision': '8150ed0db23ce7d82c6e145636255fab31b90ecf',
+  'freetype_revision': '2f62d8e075656e6b5fb597e681ba4b2b8296900c',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling freetype
   # and whatever else without interference from each other.
@@ -288,7 +288,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': '83da551ffadcbb5054b9d0cec64755c4922afa8e',
+  'devtools_frontend_revision': '7f83e4b0190ed2dbc32feef6d8b0315279ad7d07',
   # 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.
@@ -643,7 +643,7 @@
       'packages': [
         {
           'package': 'chromium/rts/model/linux-amd64',
-          'version': 'MjFkGgfwPBkyZbMFo8W2jn8yMGs9CF8NNo5tIanIBogC',
+          'version': 'yNhA4rASrN0j74_ydJx-9U82_rC9iKe9I9YAOlK6RP0C',
         },
       ],
       'dep_type': 'cipd',
@@ -654,7 +654,7 @@
       'packages': [
         {
           'package': 'chromium/rts/model/mac-amd64',
-          'version': 'v4cp1X671foZJNzwnJJeOjG8S99FVZVKi_DhnwSsVssC',
+          'version': '5LTZ9PC0M6cenI-Pxgy9HT_A7wW5ndvtJnDj7-x6gqkC',
         },
       ],
       'dep_type': 'cipd',
@@ -665,7 +665,7 @@
       'packages': [
         {
           'package': 'chromium/rts/model/windows-amd64',
-          'version': '3tWp0oBZ_HV_zn-HBXFRCb6ruR98jpW6nhOVCnleB1gC',
+          'version': 'p2ptAnGgNjbSa19WzyJl86znKnQ3YE7gHls64VXV0l4C',
         },
       ],
       'dep_type': 'cipd',
@@ -946,7 +946,7 @@
   # Tools used when building Chrome for Chrome OS. This affects both the Simple
   # Chrome workflow, as well as the chromeos-chrome ebuild.
   'src/third_party/chromite': {
-      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + 'c55d631148fa7c75ec05324e86f521870a402060',
+      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '868970ed7aa96c8fbffc88b1e053d869cb921b1d',
       'condition': 'checkout_chromeos',
   },
 
@@ -966,7 +966,7 @@
   },
 
   'src/third_party/depot_tools':
-    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + 'f9be70c9e6d8c602479323c12f6bc2d1797faf4f',
+    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '360f98195601ea865b59c5e499aed66e78d3ecc4',
 
   'src/third_party/devtools-frontend/src':
     Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'),
@@ -1207,7 +1207,7 @@
   },
 
   'src/third_party/libjpeg_turbo':
-    Var('chromium_git') + '/chromium/deps/libjpeg_turbo.git' + '@' + '24e310554f07c0fdb8ee52e3e708e4f3e9eb6e20',
+    Var('chromium_git') + '/chromium/deps/libjpeg_turbo.git' + '@' + 'b7bef8c05b7cdb1a038ae271a2c2b6647af4c879',
 
   'src/third_party/liblouis/src': {
       'url': Var('chromium_git') + '/external/liblouis-github.git' + '@' + '03d7d72d983d47c17f7de95bbeae89fe33e41943',
@@ -1338,7 +1338,7 @@
   },
 
   'src/third_party/perfetto':
-    Var('android_git') + '/platform/external/perfetto.git' + '@' + '2e55bf4f07c1dd4ab28fff9f468b4eb33731670f',
+    Var('android_git') + '/platform/external/perfetto.git' + '@' + '78e179f910b7cb65044a25f0723a0b263d010974',
 
   'src/third_party/perl': {
       'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3',
@@ -1525,7 +1525,7 @@
   'src/third_party/usrsctp/usrsctplib':
     Var('chromium_git') + '/external/github.com/sctplab/usrsctp' + '@' + '0bd8b8110bc1a388649e504de1e673114e91013f',
 
-  'src/third_party/vulkan-deps': '{chromium_git}/vulkan-deps@cbc752b97bc51a1d4068c81a425acb4a818fa8f1',
+  'src/third_party/vulkan-deps': '{chromium_git}/vulkan-deps@42d8716d02941f47870776a9c273de1effc51b1a',
 
   'src/third_party/vulkan_memory_allocator':
     Var('chromium_git') + '/external/github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git' + '@' + '732a76d9d3c70d6aa487216495eeb28518349c3a',
@@ -1643,7 +1643,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/media_app/app',
-        'version': 'Cfn7XRB29Dc8t3CQKR53DTeLGf9Bo5tliD-p2LYcXPUC',
+        'version': '4eM3TKKJfP_Tw989ChhlqlzKD0ndEkcDLjGYkoTfFtYC',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
diff --git a/ash/app_list/BUILD.gn b/ash/app_list/BUILD.gn
index bcb10c6..8da2d3f 100644
--- a/ash/app_list/BUILD.gn
+++ b/ash/app_list/BUILD.gn
@@ -213,6 +213,7 @@
     "app_list_presenter_impl_unittest.cc",
     "app_list_unittest.cc",
     "bubble/app_list_bubble_unittest.cc",
+    "bubble/app_list_bubble_view_unittest.cc",
     "bubble/bubble_event_filter_unittest.cc",
     "folder_image_unittest.cc",
     "model/app_list_item_list_unittest.cc",
diff --git a/ash/app_list/bubble/app_list_bubble.cc b/ash/app_list/bubble/app_list_bubble.cc
index 390e851..3b5aeaf 100644
--- a/ash/app_list/bubble/app_list_bubble.cc
+++ b/ash/app_list/bubble/app_list_bubble.cc
@@ -28,16 +28,17 @@
     return;
 
   aura::Window* root_window = Shell::GetRootWindowForDisplayId(display_id);
+  Shelf* shelf = Shelf::ForWindow(root_window);
   bubble_widget_ =
       base::WrapUnique(views::BubbleDialogDelegateView::CreateBubble(
-          std::make_unique<AppListBubbleView>(root_window)));
+          std::make_unique<AppListBubbleView>(root_window,
+                                              shelf->alignment())));
   bubble_widget_->Show();
   // TODO(https://crbug.com/1205494): Focus search box.
 
   // Set up event filter to close the bubble for clicks outside the bubble that
   // don't cause window activation changes (e.g. clicks on wallpaper or blank
   // areas of shelf).
-  Shelf* shelf = Shelf::ForWindow(root_window);
   HomeButton* home_button = shelf->navigation_widget()->GetHomeButton();
   bubble_event_filter_ = std::make_unique<BubbleEventFilter>(
       bubble_widget_.get(), home_button,
diff --git a/ash/app_list/bubble/app_list_bubble_view.cc b/ash/app_list/bubble/app_list_bubble_view.cc
index 0a4ae9f5..08e2f39 100644
--- a/ash/app_list/bubble/app_list_bubble_view.cc
+++ b/ash/app_list/bubble/app_list_bubble_view.cc
@@ -6,10 +6,14 @@
 
 #include <memory>
 
+#include "ash/public/cpp/shelf_types.h"
 #include "ash/public/cpp/shell_window_ids.h"
 #include "ash/shelf/shelf.h"
 #include "ash/shell.h"
+#include "base/i18n/rtl.h"
 #include "ui/base/ui_base_types.h"
+#include "ui/display/display.h"
+#include "ui/display/screen.h"
 #include "ui/gfx/geometry/rect.h"
 #include "ui/views/bubble/bubble_border.h"
 #include "ui/views/controls/label.h"
@@ -17,22 +21,57 @@
 #include "ui/views/layout/box_layout.h"
 
 using views::BoxLayout;
+using views::BubbleBorder;
 
 namespace ash {
+namespace {
 
-AppListBubbleView::AppListBubbleView(aura::Window* root_window) {
+// Returns the point on the screen to which the bubble is anchored.
+gfx::Point GetAnchorPointInScreen(aura::Window* root_window,
+                                  ShelfAlignment shelf_alignment) {
+  display::Display display =
+      display::Screen::GetScreen()->GetDisplayNearestWindow(root_window);
+  switch (shelf_alignment) {
+    case ShelfAlignment::kBottom:
+    case ShelfAlignment::kBottomLocked:
+      return base::i18n::IsRTL() ? display.work_area().bottom_right()
+                                 : display.work_area().bottom_left();
+    case ShelfAlignment::kLeft:
+      return display.work_area().origin();
+    case ShelfAlignment::kRight:
+      return display.work_area().top_right();
+  }
+}
+
+// Returns which corner of the bubble is anchored. The views bubble code calls
+// this "arrow" for historical reasons. No arrow is drawn.
+BubbleBorder::Arrow GetArrowCorner(ShelfAlignment shelf_alignment) {
+  switch (shelf_alignment) {
+    case ShelfAlignment::kBottom:
+    case ShelfAlignment::kBottomLocked:
+      return base::i18n::IsRTL() ? BubbleBorder::BOTTOM_RIGHT
+                                 : BubbleBorder::BOTTOM_LEFT;
+    case ShelfAlignment::kLeft:
+      return BubbleBorder::TOP_LEFT;
+    case ShelfAlignment::kRight:
+      return BubbleBorder::TOP_RIGHT;
+  }
+}
+
+}  // namespace
+
+AppListBubbleView::AppListBubbleView(aura::Window* root_window,
+                                     ShelfAlignment shelf_alignment) {
   DCHECK(root_window);
-  // TODO(https://crbug.com/1204554): Support BubbleBorder::TOP_LEFT and
-  // TOP_RIGHT for side-aligned shelf.
-  SetArrow(views::BubbleBorder::BOTTOM_LEFT);
+  // The bubble is anchored to a screen corner point, but the API takes a rect.
+  SetAnchorRect(gfx::Rect(GetAnchorPointInScreen(root_window, shelf_alignment),
+                          gfx::Size()));
+  SetArrow(GetArrowCorner(shelf_alignment));
 
   SetButtons(ui::DIALOG_BUTTON_NONE);
   set_parent_window(
       Shell::GetContainer(root_window, kShellWindowId_AppListContainer));
 
-  // TODO(https://crbug.com/1204554): Anchor to launcher button rect.
-  SetAnchorRect(Shelf::ForWindow(root_window)->GetShelfBoundsInScreen());
-
   auto* layout = SetLayoutManager(
       std::make_unique<BoxLayout>(BoxLayout::Orientation::kVertical));
   layout->set_cross_axis_alignment(BoxLayout::CrossAxisAlignment::kStretch);
diff --git a/ash/app_list/bubble/app_list_bubble_view.h b/ash/app_list/bubble/app_list_bubble_view.h
index 2369801..7adfdd2 100644
--- a/ash/app_list/bubble/app_list_bubble_view.h
+++ b/ash/app_list/bubble/app_list_bubble_view.h
@@ -14,11 +14,14 @@
 
 namespace ash {
 
+enum class ShelfAlignment;
+
 // Contains the views for the bubble version of the launcher.
 class ASH_EXPORT AppListBubbleView : public views::BubbleDialogDelegateView {
  public:
-  // Creates the bubble on the display for `root_window`.
-  explicit AppListBubbleView(aura::Window* root_window);
+  // Creates the bubble on the display for `root_window`. Anchors the bubble to
+  // a corner of the screen based on `shelf_alignment`.
+  AppListBubbleView(aura::Window* root_window, ShelfAlignment shelf_alignment);
   AppListBubbleView(const AppListBubbleView&) = delete;
   AppListBubbleView& operator=(const AppListBubbleView&) = delete;
   ~AppListBubbleView() override;
diff --git a/ash/app_list/bubble/app_list_bubble_view_unittest.cc b/ash/app_list/bubble/app_list_bubble_view_unittest.cc
new file mode 100644
index 0000000..6f061e9
--- /dev/null
+++ b/ash/app_list/bubble/app_list_bubble_view_unittest.cc
@@ -0,0 +1,103 @@
+// 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 "ash/app_list/bubble/app_list_bubble_view.h"
+
+#include "ash/app_list/app_list_controller_impl.h"
+#include "ash/app_list/bubble/app_list_bubble.h"
+#include "ash/constants/ash_features.h"
+#include "ash/shell.h"
+#include "ash/test/ash_test_base.h"
+#include "base/test/icu_test_util.h"
+#include "base/test/scoped_feature_list.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/display/display.h"
+#include "ui/gfx/geometry/point.h"
+#include "ui/gfx/geometry/rect.h"
+#include "ui/gfx/geometry/vector2d.h"
+#include "ui/views/widget/widget.h"
+
+using views::Widget;
+
+namespace ash {
+namespace {
+
+// Distance under which two points are considered "near" each other.
+constexpr int kNearDistanceDips = 20;
+
+// The exact position of a bubble relative to its anchor is an implementation
+// detail, so tests assert that points are "near" each other. This also makes
+// the tests less fragile if padding changes.
+testing::AssertionResult IsNear(const gfx::Point& a, const gfx::Point& b) {
+  gfx::Vector2d delta = a - b;
+  float distance = delta.Length();
+  if (distance < float{kNearDistanceDips})
+    return testing::AssertionSuccess();
+
+  return testing::AssertionFailure()
+         << a.ToString() << " is more than " << kNearDistanceDips
+         << " dips away from " << b.ToString();
+}
+
+class AppListBubbleViewTest : public AshTestBase {
+ public:
+  AppListBubbleViewTest() {
+    scoped_features_.InitAndEnableFeature(features::kAppListBubble);
+  }
+  ~AppListBubbleViewTest() override = default;
+
+  AppListBubble* GetAppListBubble() {
+    return Shell::Get()->app_list_controller()->app_list_bubble_for_test();
+  }
+
+  base::test::ScopedFeatureList scoped_features_;
+};
+
+TEST_F(AppListBubbleViewTest, BubbleOpensInBottomLeftForBottomShelf) {
+  GetPrimaryShelf()->SetAlignment(ShelfAlignment::kBottom);
+
+  AppListBubble* bubble = GetAppListBubble();
+  bubble->Show(GetPrimaryDisplay().id());
+
+  Widget* widget = bubble->bubble_widget_for_test();
+  EXPECT_TRUE(IsNear(widget->GetWindowBoundsInScreen().bottom_left(),
+                     GetPrimaryDisplay().work_area().bottom_left()));
+}
+
+TEST_F(AppListBubbleViewTest, BubbleOpensInTopLeftForLeftShelf) {
+  GetPrimaryShelf()->SetAlignment(ShelfAlignment::kLeft);
+
+  AppListBubble* bubble = GetAppListBubble();
+  bubble->Show(GetPrimaryDisplay().id());
+
+  Widget* widget = bubble->bubble_widget_for_test();
+  EXPECT_TRUE(IsNear(widget->GetWindowBoundsInScreen().origin(),
+                     GetPrimaryDisplay().work_area().origin()));
+}
+
+TEST_F(AppListBubbleViewTest, BubbleOpensInTopRightForRightShelf) {
+  GetPrimaryShelf()->SetAlignment(ShelfAlignment::kRight);
+
+  AppListBubble* bubble = GetAppListBubble();
+  bubble->Show(GetPrimaryDisplay().id());
+
+  Widget* widget = bubble->bubble_widget_for_test();
+  EXPECT_TRUE(IsNear(widget->GetWindowBoundsInScreen().top_right(),
+                     GetPrimaryDisplay().work_area().top_right()));
+}
+
+TEST_F(AppListBubbleViewTest, BubbleOpensInBottomRightForBottomShelfRTL) {
+  base::test::ScopedRestoreICUDefaultLocale locale("he");
+  GetPrimaryShelf()->SetAlignment(ShelfAlignment::kBottom);
+
+  AppListBubble* bubble = GetAppListBubble();
+  bubble->Show(GetPrimaryDisplay().id());
+
+  Widget* widget = bubble->bubble_widget_for_test();
+  EXPECT_TRUE(IsNear(widget->GetWindowBoundsInScreen().bottom_right(),
+                     GetPrimaryDisplay().work_area().bottom_right()));
+}
+
+}  // namespace
+}  // namespace ash
diff --git a/ash/ash_strings.grd b/ash/ash_strings.grd
index bbdcea9..3ee7160 100644
--- a/ash/ash_strings.grd
+++ b/ash/ash_strings.grd
@@ -628,6 +628,9 @@
       <message name="IDS_ASH_STATUS_TRAY_MIC_STATE_MUTED" desc="The accessible text used when the mic gain button is in the muted state.">
         Mic is muted.
       </message>
+      <message name="IDS_ASH_STATUS_TRAY_MIC_STATE_MUTED_BY_HW_SWITCH" desc="The text used as a tooltip for microphone mute button in Chrome OS quick settings when the mic gain button is muted because the device microphone mute switch is turned on. Used as a status text for IDS_ASH_STATUS_TRAY_MIC_GAIN.">
+        Device microphone button is muted.
+      </message>
       <message name="IDS_ASH_STATUS_AREA_TOAST_MIC_OFF" desc="The text in the toast that shows up when the mic is muted using a physical key or shortcut.">
         Microphone is off
       </message>
diff --git a/ash/ash_strings_grd/IDS_ASH_STATUS_TRAY_MIC_STATE_MUTED_BY_HW_SWITCH.png.sha1 b/ash/ash_strings_grd/IDS_ASH_STATUS_TRAY_MIC_STATE_MUTED_BY_HW_SWITCH.png.sha1
new file mode 100644
index 0000000..e86556f
--- /dev/null
+++ b/ash/ash_strings_grd/IDS_ASH_STATUS_TRAY_MIC_STATE_MUTED_BY_HW_SWITCH.png.sha1
@@ -0,0 +1 @@
+29406d3c186815f2d4699cb71e6b9fe597d78ff2
\ No newline at end of file
diff --git a/ash/components/audio/cras_audio_handler.cc b/ash/components/audio/cras_audio_handler.cc
index 66e99f2..0c751e4 100644
--- a/ash/components/audio/cras_audio_handler.cc
+++ b/ash/components/audio/cras_audio_handler.cc
@@ -79,6 +79,9 @@
 
 void CrasAudioHandler::AudioObserver::OnInputMuteChanged(bool /* mute_on */) {}
 
+void CrasAudioHandler::AudioObserver::OnInputMutedByMicrophoneMuteSwitchChanged(
+    bool /* muted */) {}
+
 void CrasAudioHandler::AudioObserver::OnAudioNodesChanged() {}
 
 void CrasAudioHandler::AudioObserver::OnActiveOutputNodeChanged() {}
diff --git a/ash/components/audio/cras_audio_handler.h b/ash/components/audio/cras_audio_handler.h
index cd0a711..7f3a8d66 100644
--- a/ash/components/audio/cras_audio_handler.h
+++ b/ash/components/audio/cras_audio_handler.h
@@ -72,6 +72,9 @@
     // Called when input mute state changed.
     virtual void OnInputMuteChanged(bool mute_on);
 
+    // Called when the state of input mute hw switch state changes.
+    virtual void OnInputMutedByMicrophoneMuteSwitchChanged(bool muted);
+
     // Called when audio nodes changed.
     virtual void OnAudioNodesChanged();
 
@@ -337,6 +340,10 @@
   // the use case. It should be called from a user initiated action.
   void SwitchToFrontOrRearMic();
 
+  bool input_muted_by_microphone_mute_switch() const {
+    return input_muted_by_microphone_mute_switch_;
+  }
+
   // Returns if system AEC is supported in CRAS.
   bool system_aec_supported() const;
 
@@ -670,6 +677,10 @@
   // priority.
   bool deprioritize_bt_wbs_mic_ = false;
 
+  // Whether the audio input is muted because the microphone mute switch is on.
+  // In this case, input mute changes will be disabled.
+  bool input_muted_by_microphone_mute_switch_ = false;
+
   // Task runner of browser main thread. All member variables should be accessed
   // on this thread.
   scoped_refptr<base::SingleThreadTaskRunner> main_task_runner_;
diff --git a/ash/host/DEPS b/ash/host/DEPS
index 964f734..d6e8990e 100644
--- a/ash/host/DEPS
+++ b/ash/host/DEPS
@@ -3,6 +3,7 @@
   "+ash/host",
   "+ash/ash_export.h",
   "+ash/public/cpp/ash_switches.h",
+  "+ash/public/cpp/ash_features.h",
 ]
 
 specific_include_rules = {
diff --git a/ash/host/ash_window_tree_host.cc b/ash/host/ash_window_tree_host.cc
index 88a0ef52..24b65941 100644
--- a/ash/host/ash_window_tree_host.cc
+++ b/ash/host/ash_window_tree_host.cc
@@ -10,6 +10,7 @@
 #include "ash/host/ash_window_tree_host_mirroring_unified.h"
 #include "ash/host/ash_window_tree_host_platform.h"
 #include "ash/host/ash_window_tree_host_unified.h"
+#include "ash/public/cpp/ash_features.h"
 #include "ash/public/cpp/ash_switches.h"
 #include "base/command_line.h"
 #include "base/system/sys_info.h"
@@ -78,7 +79,7 @@
   return std::make_unique<AshWindowTreeHostPlatform>(
       ui::PlatformWindowInitProperties{
           init_params.initial_bounds,
-          switches::IsCompositingBasedThrottlingEnabled()});
+          features::IsCompositingBasedThrottlingEnabled()});
 }
 
 }  // namespace ash
diff --git a/ash/metrics/demo_session_metrics_recorder.cc b/ash/metrics/demo_session_metrics_recorder.cc
index cb2b731..3c64e99 100644
--- a/ash/metrics/demo_session_metrics_recorder.cc
+++ b/ash/metrics/demo_session_metrics_recorder.cc
@@ -99,6 +99,8 @@
     return DemoModeApp::kClipchamp;
   if (app_id == extension_misc::kGeForceNowAppId)
     return DemoModeApp::kGeForceNow;
+  if (app_id == extension_misc::kZoomAppId)
+    return DemoModeApp::kZoom;
 
   return DemoModeApp::kOtherChromeApp;
 }
diff --git a/ash/metrics/demo_session_metrics_recorder.h b/ash/metrics/demo_session_metrics_recorder.h
index 1962e0ef..2d5a9c4 100644
--- a/ash/metrics/demo_session_metrics_recorder.h
+++ b/ash/metrics/demo_session_metrics_recorder.h
@@ -77,9 +77,10 @@
     kBeFunky = 36,
     kClipchamp = 37,
     kGeForceNow = 38,
+    kZoom = 39,
     // Add future entries above this comment, in sync with enums.xml.
     // Update kMaxValue to the last value.
-    kMaxValue = kGeForceNow,
+    kMaxValue = kZoom,
   };
 
   // The recorder will create a normal timer by default. Tests should provide a
diff --git a/ash/public/cpp/ash_features.cc b/ash/public/cpp/ash_features.cc
index a2ff930b..9001f84a 100644
--- a/ash/public/cpp/ash_features.cc
+++ b/ash/public/cpp/ash_features.cc
@@ -27,6 +27,9 @@
 const base::Feature kCaptureMode{"CaptureMode",
                                  base::FEATURE_ENABLED_BY_DEFAULT};
 
+const base::Feature kCompositingBasedThrottling{
+    "CompositingBasedThrottling", base::FEATURE_DISABLED_BY_DEFAULT};
+
 const base::Feature kContextualNudges{"ContextualNudges",
                                       base::FEATURE_ENABLED_BY_DEFAULT};
 
@@ -171,6 +174,10 @@
   return base::FeatureList::IsEnabled(kCaptureMode);
 }
 
+bool IsCompositingBasedThrottlingEnabled() {
+  return base::FeatureList::IsEnabled(kCompositingBasedThrottling);
+}
+
 bool IsDarkLightModeEnabled() {
   return base::FeatureList::IsEnabled(kDarkLightMode);
 }
diff --git a/ash/public/cpp/ash_features.h b/ash/public/cpp/ash_features.h
index 401b669..5e91f1a 100644
--- a/ash/public/cpp/ash_features.h
+++ b/ash/public/cpp/ash_features.h
@@ -33,6 +33,10 @@
 // capture user experience.
 ASH_PUBLIC_EXPORT extern const base::Feature kCaptureMode;
 
+// Enables compositing-based throttling to throttle appropriate frame sinks that
+// do not need to be refreshed at high fps.
+ASH_PUBLIC_EXPORT extern const base::Feature kCompositingBasedThrottling;
+
 // Enables contextual nudges for gesture education.
 ASH_PUBLIC_EXPORT extern const base::Feature kContextualNudges;
 
@@ -200,6 +204,8 @@
 
 ASH_PUBLIC_EXPORT bool IsCaptureModeEnabled();
 
+ASH_PUBLIC_EXPORT bool IsCompositingBasedThrottlingEnabled();
+
 ASH_PUBLIC_EXPORT bool IsDarkLightModeEnabled();
 
 ASH_PUBLIC_EXPORT bool IsFullRestoreEnabled();
diff --git a/ash/public/cpp/ash_switches.cc b/ash/public/cpp/ash_switches.cc
index c3bca1b..9426625 100644
--- a/ash/public/cpp/ash_switches.cc
+++ b/ash/public/cpp/ash_switches.cc
@@ -118,10 +118,6 @@
 // Enables Shelf Dimming for ChromeOS.
 const char kEnableDimShelf[] = "enable-dim-shelf";
 
-// Enables compositing-based throttling
-const char kEnableCompositingBasedThrottling[] =
-    "enable-compositing-based-throttling";
-
 // If set, tablet-like power button behavior (i.e. tapping the button turns the
 // screen off) is used even if the device is in laptop mode.
 const char kForceTabletPowerButton[] = "force-tablet-power-button";
@@ -179,11 +175,6 @@
   return base::CommandLine::ForCurrentProcess()->HasSwitch(kEnableDimShelf);
 }
 
-bool IsCompositingBasedThrottlingEnabled() {
-  return base::CommandLine::ForCurrentProcess()->HasSwitch(
-      kEnableCompositingBasedThrottling);
-}
-
 bool ShouldClearFastInkBuffer() {
   return base::CommandLine::ForCurrentProcess()->HasSwitch(
       kAshClearFastInkBuffer);
diff --git a/ash/public/cpp/ash_switches.h b/ash/public/cpp/ash_switches.h
index 6b3749d..1f881590 100644
--- a/ash/public/cpp/ash_switches.h
+++ b/ash/public/cpp/ash_switches.h
@@ -41,7 +41,6 @@
 ASH_PUBLIC_EXPORT extern const char kAshTouchHud[];
 ASH_PUBLIC_EXPORT extern const char kAuraLegacyPowerButton[];
 ASH_PUBLIC_EXPORT extern const char kEnableDimShelf[];
-ASH_PUBLIC_EXPORT extern const char kEnableCompositingBasedThrottling[];
 ASH_PUBLIC_EXPORT extern const char kForceTabletPowerButton[];
 ASH_PUBLIC_EXPORT extern const char kFrameThrottleFps[];
 ASH_PUBLIC_EXPORT extern const char kHasInternalStylus[];
diff --git a/ash/system/audio/mic_gain_slider_view.cc b/ash/system/audio/mic_gain_slider_view.cc
index bab8078d9..443c939 100644
--- a/ash/system/audio/mic_gain_slider_view.cc
+++ b/ash/system/audio/mic_gain_slider_view.cc
@@ -7,6 +7,7 @@
 #include "ash/components/audio/cras_audio_handler.h"
 #include "ash/resources/vector_icons/vector_icons.h"
 #include "ash/strings/grit/ash_strings.h"
+#include "ash/style/ash_color_provider.h"
 #include "ash/system/audio/mic_gain_slider_controller.h"
 #include "ash/system/tray/tray_constants.h"
 #include "ash/system/tray/tray_popup_utils.h"
@@ -16,6 +17,21 @@
 
 namespace ash {
 
+namespace {
+
+// Gets resource ID for the string that should be used for mute state portion of
+// the microphone toggle button tooltip.
+int GetMuteStateTooltipTextResourceId(bool is_muted,
+                                      bool is_muted_by_mute_switch) {
+  if (is_muted_by_mute_switch)
+    return IDS_ASH_STATUS_TRAY_MIC_STATE_MUTED_BY_HW_SWITCH;
+  if (is_muted)
+    return IDS_ASH_STATUS_TRAY_MIC_STATE_MUTED;
+  return IDS_ASH_STATUS_TRAY_MIC_STATE_ON;
+}
+
+}  // namespace
+
 MicGainSliderView::MicGainSliderView(MicGainSliderController* controller)
     : UnifiedSliderView(
           base::BindRepeating(&MicGainSliderController::SliderButtonPressed,
@@ -81,6 +97,8 @@
 
   SetVisible(true);
   bool is_muted = audio_handler->IsInputMuted();
+  bool is_muted_by_mute_switch =
+      audio_handler->input_muted_by_microphone_mute_switch();
   float level = audio_handler->GetInputGainPercent() / 100.f;
 
   if (toast_label_) {
@@ -96,11 +114,11 @@
 
   // The button should be gray when muted and colored otherwise.
   button()->SetToggled(!is_muted);
+  button()->SetEnabled(!is_muted_by_mute_switch);
   button()->SetVectorIcon(is_muted ? kMutedMicrophoneIcon
                                    : kImeMenuMicrophoneIcon);
-  std::u16string state_tooltip_text =
-      l10n_util::GetStringUTF16(is_muted ? IDS_ASH_STATUS_TRAY_MIC_STATE_MUTED
-                                         : IDS_ASH_STATUS_TRAY_MIC_STATE_ON);
+  std::u16string state_tooltip_text = l10n_util::GetStringUTF16(
+      GetMuteStateTooltipTextResourceId(is_muted, is_muted_by_mute_switch));
   button()->SetTooltipText(l10n_util::GetStringFUTF16(
       IDS_ASH_STATUS_TRAY_MIC_GAIN, state_tooltip_text));
 
@@ -121,6 +139,10 @@
   Update(true /* by_user */);
 }
 
+void MicGainSliderView::OnInputMutedByMicrophoneMuteSwitchChanged(bool muted) {
+  Update(true /* by_user */);
+}
+
 void MicGainSliderView::OnInputMuteChanged(bool mute_on) {
   Update(true /* by_user */);
 }
@@ -133,4 +155,11 @@
   return "MicGainSliderView";
 }
 
+void MicGainSliderView::OnThemeChanged() {
+  if (toast_label_) {
+    toast_label_->SetEnabledColor(AshColorProvider::Get()->GetContentLayerColor(
+        AshColorProvider::ContentLayerType::kTextColorPrimary));
+  }
+}
+
 }  // namespace ash
diff --git a/ash/system/audio/mic_gain_slider_view.h b/ash/system/audio/mic_gain_slider_view.h
index a80123ef..ab3a7d9 100644
--- a/ash/system/audio/mic_gain_slider_view.h
+++ b/ash/system/audio/mic_gain_slider_view.h
@@ -27,10 +27,12 @@
   // CrasAudioHandler::AudioObserver:
   void OnInputNodeGainChanged(uint64_t node_id, int gain) override;
   void OnInputMuteChanged(bool mute_on) override;
+  void OnInputMutedByMicrophoneMuteSwitchChanged(bool muted) override;
   void OnActiveInputNodeChanged() override;
 
   // views::View:
   const char* GetClassName() const override;
+  void OnThemeChanged() override;
 
  private:
   void Update(bool by_user);
diff --git a/ash/system/holding_space/holding_space_tray_unittest.cc b/ash/system/holding_space/holding_space_tray_unittest.cc
index cbb3ea6c..12b69195 100644
--- a/ash/system/holding_space/holding_space_tray_unittest.cc
+++ b/ash/system/holding_space/holding_space_tray_unittest.cc
@@ -172,6 +172,81 @@
               (override));
 };
 
+// Waiters ---------------------------------------------------------------------
+
+// A class capable of waiting until a layer has stopped animating.
+class LayerAnimationStoppedWaiter : public ui::LayerAnimationObserver {
+ public:
+  // Waits until the specified `layer`'s animation is stopped.
+  void Wait(ui::Layer* layer) {
+    if (!layer->GetAnimator()->is_animating())
+      return;
+
+    // Temporarily cache and observe `layer`'s animator.
+    layer_animator_ = layer->GetAnimator();
+    base::ScopedObservation<ui::LayerAnimator, ui::LayerAnimationObserver>
+        layer_animator_observer{this};
+    layer_animator_observer.Observe(layer_animator_);
+
+    // Loop until the `layer`'s animation is stopped.
+    wait_loop_ = std::make_unique<base::RunLoop>();
+    wait_loop_->Run();
+
+    // Reset.
+    layer_animator_ = nullptr;
+    wait_loop_.reset();
+  }
+
+ private:
+  // ui::LayerAnimationObserver:
+  void OnLayerAnimationScheduled(
+      ui::LayerAnimationSequence* sequence) override {}
+
+  void OnLayerAnimationStarted(ui::LayerAnimationSequence* sequence) override {}
+
+  void OnLayerAnimationAborted(ui::LayerAnimationSequence* sequence) override {
+    if (!layer_animator_->is_animating())
+      wait_loop_->Quit();
+  }
+
+  void OnLayerAnimationEnded(ui::LayerAnimationSequence* sequence) override {
+    if (!layer_animator_->is_animating())
+      wait_loop_->Quit();
+  }
+
+  ui::LayerAnimator* layer_animator_ = nullptr;
+  std::unique_ptr<base::RunLoop> wait_loop_;
+};
+
+// ViewVisibilityChangedWaiter -------------------------------------------------
+
+// A class capable of waiting until a view's visibility is changed.
+class ViewVisibilityChangedWaiter : public views::ViewObserver {
+ public:
+  // Waits until the specified `view`'s visibility is changed.
+  void Wait(views::View* view) {
+    // Temporarily observe `view`.
+    base::ScopedObservation<views::View, views::ViewObserver> observer{this};
+    observer.Observe(view);
+
+    // Loop until the `view`'s visibility is changed.
+    wait_loop_ = std::make_unique<base::RunLoop>();
+    wait_loop_->Run();
+
+    // Reset.
+    wait_loop_.reset();
+  }
+
+ private:
+  // views::ViewObserver:
+  void OnViewVisibilityChanged(views::View* view,
+                               views::View* starting_view) override {
+    wait_loop_->Quit();
+  }
+
+  std::unique_ptr<base::RunLoop> wait_loop_;
+};
+
 // TransformRecordingLayerDelegate ---------------------------------------------
 
 // A scoped `ui::LayerDelegate` which records information about transforms.
@@ -195,11 +270,15 @@
   // Resets recorded information.
   void Reset() {
     const gfx::Transform& transform = layer_->transform();
+    did_animate_ = false;
     start_scale_ = end_scale_ = min_scale_ = max_scale_ = transform.Scale2d();
     start_translation_ = end_translation_ = min_translation_ =
         max_translation_ = transform.To2dTranslation();
   }
 
+  // Returns true if an animation occurred.
+  bool DidAnimate() const { return did_animate_; }
+
   // Returns true if a scale occurred.
   bool DidScale() const {
     return start_scale_ != min_scale_ || start_scale_ != max_scale_;
@@ -243,6 +322,7 @@
   void OnLayerTransformed(const gfx::Transform& old_transform,
                           ui::PropertyChangeReason reason) override {
     const gfx::Transform& transform = layer_->transform();
+    did_animate_ |= reason == ui::PropertyChangeReason::FROM_ANIMATION;
     end_scale_ = transform.Scale2d();
     end_translation_ = transform.To2dTranslation();
     min_scale_.SetToMin(end_scale_);
@@ -254,6 +334,7 @@
   ui::Layer* const layer_;
   ui::LayerDelegate* const layer_delegate_;
 
+  bool did_animate_ = false;
   gfx::Vector2dF start_scale_;
   gfx::Vector2dF start_translation_;
   gfx::Vector2dF end_scale_;
@@ -270,8 +351,7 @@
 
 class HoldingSpaceTrayTest : public AshTestBase {
  public:
-  HoldingSpaceTrayTest()
-      : AshTestBase(base::test::TaskEnvironment::TimeSource::MOCK_TIME) {}
+  HoldingSpaceTrayTest() = default;
 
   // AshTestBase:
   void SetUp() override {
@@ -2413,7 +2493,7 @@
 // Verifies that the holding space tray animates in and out as expected.
 TEST_F(HoldingSpaceTrayTest, EnterAndExitAnimations) {
   ui::ScopedAnimationDurationScaleMode scoped_animation_duration_scale_mode(
-      ui::ScopedAnimationDurationScaleMode::NORMAL_DURATION);
+      ui::ScopedAnimationDurationScaleMode::NON_ZERO_DURATION);
 
   // Prior to session start, the tray should not be showing.
   EXPECT_FALSE(test_api()->IsShowingInShelf());
@@ -2429,17 +2509,10 @@
   // animation.
   StartSession();
   EXPECT_TRUE(test_api()->IsShowingInShelf());
-
-  // Gives it a small duration to let the session get changed. This duration is
-  // way smaller than the animation duration, so that the animation will not
-  // finish when this duration ends. The same for the other places below.
-  task_environment()->FastForwardBy(base::TimeDelta::FromMilliseconds(20));
-
   EXPECT_FALSE(tray->layer()->GetAnimator()->is_animating());
-
-  // Gives 3s duration to let the (if there is any) animation finish. The same
-  // for the other places below.
-  task_environment()->FastForwardBy(base::TimeDelta::FromSeconds(3));
+  EXPECT_TRUE(tray->layer()->transform().IsIdentity());
+  EXPECT_FALSE(transform_recorder.DidAnimate());
+  transform_recorder.Reset();
 
   // Pin a holding space item. Because the tray was already showing there
   // should be no change in tray visibility.
@@ -2448,18 +2521,21 @@
   EXPECT_TRUE(test_api()->IsShowingInShelf());
 
   // Because there was no change in visibility, there should be no transform.
-  EXPECT_FALSE(transform_recorder.DidScale());
-  EXPECT_FALSE(transform_recorder.DidTranslate());
+  EXPECT_FALSE(tray->layer()->GetAnimator()->is_animating());
+  EXPECT_TRUE(tray->layer()->transform().IsIdentity());
+  EXPECT_FALSE(transform_recorder.DidAnimate());
   transform_recorder.Reset();
 
   // Remove all holding space items. Because a holding space item was
   // previously pinned, the tray should animate out.
   RemoveAllItems();
-  task_environment()->FastForwardBy(base::TimeDelta::FromSeconds(3));
+  ViewVisibilityChangedWaiter().Wait(tray);
   EXPECT_FALSE(test_api()->IsShowingInShelf());
 
   // The exit animation should be the default exit animation in which the tray
   // scales down and pivots about its center point.
+  EXPECT_FALSE(tray->layer()->GetAnimator()->is_animating());
+  EXPECT_TRUE(transform_recorder.DidAnimate());
   EXPECT_TRUE(transform_recorder.ScaledFrom({1.f, 1.f}, {0.5f, 0.5f}));
   EXPECT_TRUE(transform_recorder.ScaledInRange({0.5f, 0.5f}, {1.f, 1.f}));
   EXPECT_TRUE(transform_recorder.TranslatedFrom({0.f, 0.f}, {11.f, 12.f}));
@@ -2470,10 +2546,11 @@
   AddItem(HoldingSpaceItem::Type::kPinnedFile, base::FilePath("/tmp/fake2"));
   EXPECT_TRUE(test_api()->IsShowingInShelf());
 
-  task_environment()->FastForwardBy(base::TimeDelta::FromSeconds(3));
-
   // The entry animation should be the bounce in animation in which the tray
   // translates in vertically with scaling (since it previously scaled out).
+  LayerAnimationStoppedWaiter().Wait(tray->layer());
+  EXPECT_FALSE(tray->layer()->GetAnimator()->is_animating());
+  EXPECT_TRUE(transform_recorder.DidAnimate());
   EXPECT_TRUE(transform_recorder.ScaledFrom({0.5f, 0.5f}, {1.f, 1.f}));
   EXPECT_TRUE(transform_recorder.ScaledInRange({0.5f, 0.5f}, {1.f, 1.f}));
   EXPECT_TRUE(transform_recorder.TranslatedFrom({11.f, 12.f}, {0.f, 0.f}));
@@ -2484,11 +2561,13 @@
   auto* session_controller =
       ash_test_helper()->test_session_controller_client();
   session_controller->LockScreen();
-  task_environment()->FastForwardBy(base::TimeDelta::FromSeconds(3));
+  ViewVisibilityChangedWaiter().Wait(tray);
   EXPECT_FALSE(test_api()->IsShowingInShelf());
 
   // The exit animation should be the default exit animation in which the tray
   // scales down and pivots about its center point.
+  EXPECT_FALSE(tray->layer()->GetAnimator()->is_animating());
+  EXPECT_TRUE(transform_recorder.DidAnimate());
   EXPECT_TRUE(transform_recorder.ScaledFrom({1.0f, 1.0f}, {0.5f, 0.5f}));
   EXPECT_TRUE(transform_recorder.ScaledInRange({0.5f, 0.5f}, {1.f, 1.f}));
   EXPECT_TRUE(transform_recorder.TranslatedFrom({0.f, 0.f}, {11.f, 12.f}));
@@ -2497,12 +2576,11 @@
 
   // Unlock the screen. The tray should show up without animation.
   session_controller->UnlockScreen();
-  task_environment()->FastForwardBy(base::TimeDelta::FromMilliseconds(20));
-
-  EXPECT_FALSE(tray->layer()->GetAnimator()->is_animating());
-
-  task_environment()->FastForwardBy(base::TimeDelta::FromSeconds(3));
   EXPECT_TRUE(test_api()->IsShowingInShelf());
+  EXPECT_FALSE(tray->layer()->GetAnimator()->is_animating());
+  EXPECT_TRUE(tray->layer()->transform().IsIdentity());
+  EXPECT_FALSE(transform_recorder.DidAnimate());
+  transform_recorder.Reset();
 
   // Switch to another user with a populated model. The tray should show up
   // without animation.
@@ -2513,14 +2591,19 @@
                  base::FilePath("/tmp/fake3"));
   SwitchToSecondaryUser(kSecondaryUserId, /*client=*/nullptr,
                         &secondary_holding_space_model);
-
-  task_environment()->FastForwardBy(base::TimeDelta::FromMilliseconds(20));
-
-  EXPECT_FALSE(tray->layer()->GetAnimator()->is_animating());
-
-  task_environment()->FastForwardBy(base::TimeDelta::FromSeconds(3));
   EXPECT_TRUE(test_api()->IsShowingInShelf());
 
+  // NOTE: When switching to the secondary user the tray will have briefly been
+  // hidden while the primary user's holding space model was detached until the
+  // secondary user's holding space model was attached. That said, the tray will
+  // have scaled out and must scale back in but should *not* bounce.
+  EXPECT_FALSE(tray->layer()->GetAnimator()->is_animating());
+  EXPECT_TRUE(transform_recorder.ScaledFrom({1.f, 1.f}, {1.f, 1.f}));
+  EXPECT_TRUE(transform_recorder.ScaledInRange({0.5f, 0.5f}, {1.f, 1.f}));
+  EXPECT_TRUE(transform_recorder.TranslatedFrom({0.f, 0.f}, {0.f, 0.f}));
+  EXPECT_TRUE(transform_recorder.TranslatedInRange({0.f, 0.f}, {11.f, 12.f}));
+  transform_recorder.Reset();
+
   // Clean up.
   UnregisterModelForUser(kSecondaryUserId);
 }
diff --git a/ash/system/network/auto_connect_notifier_unittest.cc b/ash/system/network/auto_connect_notifier_unittest.cc
index c655682..ce15a34 100644
--- a/ash/system/network/auto_connect_notifier_unittest.cc
+++ b/ash/system/network/auto_connect_notifier_unittest.cc
@@ -13,11 +13,11 @@
 #include "base/memory/ptr_util.h"
 #include "base/run_loop.h"
 #include "base/timer/mock_timer.h"
-#include "chromeos/dbus/shill/shill_clients.h"
 #include "chromeos/dbus/shill/shill_service_client.h"
 #include "chromeos/network/auto_connect_handler.h"
 #include "chromeos/network/network_cert_loader.h"
 #include "chromeos/network/network_handler.h"
+#include "chromeos/network/network_handler_test_helper.h"
 #include "chromeos/network/system_token_cert_db_storage.h"
 #include "chromeos/services/network_config/public/cpp/cros_network_config_test_helper.h"
 #include "dbus/object_path.h"
@@ -44,8 +44,8 @@
     chromeos::SystemTokenCertDbStorage::Initialize();
     chromeos::NetworkCertLoader::Initialize();
     chromeos::NetworkCertLoader::ForceAvailableForNetworkAuthForTesting();
-    chromeos::shill_clients::InitializeFakes();
-    chromeos::NetworkHandler::Initialize();
+    network_handler_test_helper_ =
+        std::make_unique<chromeos::NetworkHandlerTestHelper>();
     CHECK(chromeos::NetworkHandler::Get()->auto_connect_handler());
     network_config_helper_ = std::make_unique<
         chromeos::network_config::CrosNetworkConfigTestHelper>();
@@ -68,8 +68,7 @@
   void TearDown() override {
     AshTestBase::TearDown();
     network_config_helper_.reset();
-    chromeos::NetworkHandler::Shutdown();
-    chromeos::shill_clients::Shutdown();
+    network_handler_test_helper_.reset();
     chromeos::NetworkCertLoader::Shutdown();
     chromeos::SystemTokenCertDbStorage::Shutdown();
   }
@@ -96,6 +95,8 @@
   base::MockOneShotTimer* mock_notification_timer_;
 
  private:
+  std::unique_ptr<chromeos::NetworkHandlerTestHelper>
+      network_handler_test_helper_;
   std::unique_ptr<chromeos::network_config::CrosNetworkConfigTestHelper>
       network_config_helper_;
 
diff --git a/ash/system/status_area_widget_unittest.cc b/ash/system/status_area_widget_unittest.cc
index 6ac47a7..bb3a80c 100644
--- a/ash/system/status_area_widget_unittest.cc
+++ b/ash/system/status_area_widget_unittest.cc
@@ -33,9 +33,10 @@
 #include "ash/test/ash_test_base.h"
 #include "base/callback_helpers.h"
 #include "base/command_line.h"
-#include "chromeos/dbus/hermes/hermes_clients.h"
-#include "chromeos/dbus/shill/shill_clients.h"
+#include "chromeos/network/cellular_esim_profile_handler_impl.h"
+#include "chromeos/network/cellular_metrics_logger.h"
 #include "chromeos/network/network_handler.h"
+#include "chromeos/network/network_handler_test_helper.h"
 #include "chromeos/network/network_metadata_store.h"
 #include "components/prefs/testing_pref_service.h"
 #include "components/session_manager/session_manager_types.h"
@@ -264,11 +265,12 @@
 
   // AshTestBase:
   void SetUp() override {
-    chromeos::shill_clients::InitializeFakes();
-    chromeos::hermes_clients::InitializeFakes();
     // Initializing NetworkHandler before ash is more like production.
-    chromeos::NetworkHandler::Initialize();
     AshTestBase::SetUp();
+    chromeos::CellularMetricsLogger::RegisterLocalStatePrefs(
+        local_state_.registry());
+    chromeos::CellularESimProfileHandlerImpl::RegisterLocalStatePrefs(
+        local_state_.registry());
     chromeos::NetworkMetadataStore::RegisterPrefs(profile_prefs_.registry());
     chromeos::NetworkHandler::Get()->InitializePrefServices(&profile_prefs_,
                                                             &local_state_);
@@ -280,12 +282,10 @@
     // This roughly matches production shutdown order.
     chromeos::NetworkHandler::Get()->ShutdownPrefServices();
     AshTestBase::TearDown();
-    chromeos::NetworkHandler::Shutdown();
-    chromeos::hermes_clients::Shutdown();
-    chromeos::shill_clients::Shutdown();
   }
 
  private:
+  chromeos::NetworkHandlerTestHelper network_handler_test_helper_;
   TestingPrefServiceSimple profile_prefs_;
   TestingPrefServiceSimple local_state_;
 
diff --git a/ash/system/unified/unified_slider_bubble_controller.cc b/ash/system/unified/unified_slider_bubble_controller.cc
index 1460c820..1384a8d 100644
--- a/ash/system/unified/unified_slider_bubble_controller.cc
+++ b/ash/system/unified/unified_slider_bubble_controller.cc
@@ -127,7 +127,12 @@
     return;
 
   if (IsAnyMainBubbleShown()) {
-    tray_->EnsureBubbleExpanded();
+    // Unlike VOLUME and BRIGHTNESS, which are shown in the main bubble view,
+    // MIC slider is shown in the audio details view.
+    if (slider_type == SLIDER_TYPE_MIC)
+      tray_->ShowAudioDetailedViewBubble();
+    else
+      tray_->EnsureBubbleExpanded();
     return;
   }
 
diff --git a/base/json/json_string_value_serializer.h b/base/json/json_string_value_serializer.h
index 55a53e20..9fbc32f9 100644
--- a/base/json/json_string_value_serializer.h
+++ b/base/json/json_string_value_serializer.h
@@ -8,7 +8,6 @@
 #include <string>
 
 #include "base/base_export.h"
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/strings/string_piece.h"
 #include "base/values.h"
diff --git a/base/threading/thread_restrictions.h b/base/threading/thread_restrictions.h
index 8fdd58d..7a8c784 100644
--- a/base/threading/thread_restrictions.h
+++ b/base/threading/thread_restrictions.h
@@ -154,7 +154,7 @@
 namespace content {
 class BrowserGpuChannelHostFactory;
 class BrowserMainLoop;
-class BrowserProcessSubThread;
+class BrowserProcessIOThread;
 class BrowserShutdownProfileDumper;
 class BrowserTestBase;
 class CategorizedWorkerPool;
@@ -398,7 +398,7 @@
   friend class ash::MojoUtils;  // http://crbug.com/1055467
   friend class ash::BrowserDataMigrator;
   friend class blink::DiskDataAllocator;
-  friend class content::BrowserProcessSubThread;
+  friend class content::BrowserProcessIOThread;
   friend class content::NetworkServiceInstancePrivate;
   friend class content::PepperPrintSettingsManagerImpl;
   friend class content::RenderProcessHostImpl;
@@ -474,7 +474,7 @@
   friend class chrome_cleaner::SystemReportComponent;
   friend class ::ChromeJsErrorReportProcessor;
   friend class content::BrowserMainLoop;
-  friend class content::BrowserProcessSubThread;
+  friend class content::BrowserProcessIOThread;
   friend class content::ServiceWorkerContextClient;
   friend class device::UsbContext;
   friend class functions::ExecScriptScopedAllowBaseSyncPrimitives;
diff --git a/build/android/pylib/base/result_sink.py b/build/android/pylib/base/result_sink.py
index 424b873..7aae1b7 100644
--- a/build/android/pylib/base/result_sink.py
+++ b/build/android/pylib/base/result_sink.py
@@ -3,20 +3,14 @@
 # found in the LICENSE file.
 from __future__ import absolute_import
 import base64
-import cgi
 import json
 import os
 
 import six
-if not six.PY2:
-  import html  # pylint: disable=import-error
 
 from pylib.base import base_test_result
 import requests  # pylint: disable=import-error
 
-# Comes from luci/resultdb/pbutil/test_result.go
-MAX_REPORT_LEN = 4 * 1024
-
 # Maps base_test_results to the luci test-result.proto.
 # https://godoc.org/go.chromium.org/luci/resultdb/proto/v1#TestStatus
 RESULT_MAP = {
@@ -86,25 +80,11 @@
                           base_test_result.ResultType.SKIP)
     result_db_status = RESULT_MAP[status]
 
-    # Slightly smaller to allow addition of <pre> tags and message.
-    report_check_size = MAX_REPORT_LEN - 45
-    if six.PY2:
-      test_log_escaped = cgi.escape(test_log)
-    else:
-      test_log_escaped = html.escape(test_log)
-    if len(test_log_escaped) > report_check_size:
-      test_log_formatted = ('<pre>' + test_log_escaped[:report_check_size] +
-                            '...Full output in Artifact.</pre>')
-    else:
-      test_log_formatted = '<pre>' + test_log_escaped + '</pre>'
-
     tr = {
         'expected':
         expected,
         'status':
         result_db_status,
-        'summaryHtml':
-        test_log_formatted,
         'tags': [
             {
                 'key': 'test_name',
@@ -119,11 +99,13 @@
         'testId':
         test_id,
     }
+
     artifacts = artifacts or {}
-    if len(test_log_escaped) > report_check_size:
+    if test_log:
       # Upload the original log without any modifications.
       b64_log = six.ensure_str(base64.b64encode(six.ensure_binary(test_log)))
       artifacts.update({'Test Log': {'contents': b64_log}})
+      tr['summaryHtml'] = '<text-artifact artifact-id="Test Log" />'
     if artifacts:
       tr['artifacts'] = artifacts
 
diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
index 944de32b..311f126 100644
--- a/build/config/compiler/BUILD.gn
+++ b/build/config/compiler/BUILD.gn
@@ -46,6 +46,17 @@
   import("//build/config/nacl/config.gni")
 }
 
+lld_path = ""
+if (!is_clang) {
+  declare_args() {
+    # This allows overriding the location of lld.
+    lld_path = rebase_path("$clang_base_path/bin", root_build_dir)
+  }
+} else {
+  # clang looks for lld next to it, no need for -B.
+  lld_path = ""
+}
+
 declare_args() {
   # Normally, Android builds are lightly optimized, even for debug builds, to
   # keep binary size down. Setting this flag to true disables such optimization
@@ -330,6 +341,9 @@
 
     if (use_lld) {
       ldflags += [ "-fuse-ld=lld" ]
+      if (lld_path != "") {
+        ldflags += [ "-B$lld_path" ]
+      }
     }
 
     # Linker warnings.
diff --git a/cc/test/layer_tree_test.cc b/cc/test/layer_tree_test.cc
index 52d1afc..a10dcd52 100644
--- a/cc/test/layer_tree_test.cc
+++ b/cc/test/layer_tree_test.cc
@@ -471,7 +471,6 @@
 
   void DidSubmitCompositorFrame() override {}
   void DidLoseLayerTreeFrameSink() override {}
-  void RequestScheduleComposite() override { test_hooks_->ScheduleComposite(); }
   void DidCompletePageScaleAnimation() override {}
   void BeginMainFrameNotExpectedSoon() override {
     test_hooks_->BeginMainFrameNotExpectedSoon();
diff --git a/cc/test/stub_layer_tree_host_single_thread_client.h b/cc/test/stub_layer_tree_host_single_thread_client.h
index 365292f..bff6606 100644
--- a/cc/test/stub_layer_tree_host_single_thread_client.h
+++ b/cc/test/stub_layer_tree_host_single_thread_client.h
@@ -15,7 +15,6 @@
   ~StubLayerTreeHostSingleThreadClient() override;
 
   // LayerTreeHostSingleThreadClient implementation.
-  void RequestScheduleComposite() override {}
   void DidSubmitCompositorFrame() override {}
   void DidLoseLayerTreeFrameSink() override {}
 };
diff --git a/cc/test/test_hooks.h b/cc/test/test_hooks.h
index f3ec6022..38b899e9 100644
--- a/cc/test/test_hooks.h
+++ b/cc/test/test_hooks.h
@@ -118,7 +118,6 @@
   virtual void DidCommit() {}
   virtual void DidCommitAndDrawFrame() {}
   virtual void DidReceiveCompositorFrameAck() {}
-  virtual void ScheduleComposite() {}
   virtual void DidActivateSyncTree() {}
   virtual void NotifyThroughputTrackerResults(CustomTrackerResults results) {}
 
diff --git a/cc/trees/layer_tree_host_single_thread_client.h b/cc/trees/layer_tree_host_single_thread_client.h
index 0a5f7d5..a347f6f0 100644
--- a/cc/trees/layer_tree_host_single_thread_client.h
+++ b/cc/trees/layer_tree_host_single_thread_client.h
@@ -13,10 +13,6 @@
 
 class LayerTreeHostSingleThreadClient {
  public:
-  // Request that the client schedule a composite. For tests using single thread
-  // without a scheduler.
-  virtual void RequestScheduleComposite() {}
-
   // Tells single-threaded web tests that a new commit needs to be scheduled.
   virtual void ScheduleAnimationForWebTests() {}
 
diff --git a/cc/trees/layer_tree_host_unittest_context.cc b/cc/trees/layer_tree_host_unittest_context.cc
index 8dab341..6358f0a 100644
--- a/cc/trees/layer_tree_host_unittest_context.cc
+++ b/cc/trees/layer_tree_host_unittest_context.cc
@@ -534,77 +534,6 @@
 // This test uses Composite() which only exists for single thread.
 SINGLE_THREAD_TEST_F(FailedCreateDoesNotCreateExtraLayerTreeFrameSink);
 
-class LayerTreeHostContextTestCommitAfterDelayedLayerTreeFrameSink
-    : public LayerTreeHostContextTest {
- public:
-  LayerTreeHostContextTestCommitAfterDelayedLayerTreeFrameSink()
-      : LayerTreeHostContextTest(), creating_output_(false) {}
-
-  void InitializeSettings(LayerTreeSettings* settings) override {
-    settings->single_thread_proxy_scheduler = false;
-    settings->use_zero_copy = true;
-  }
-
-  void RequestNewLayerTreeFrameSink() override {
-    MainThreadTaskRunner()->PostTask(
-        FROM_HERE,
-        base::BindOnce(
-            &LayerTreeHostContextTestCommitAfterDelayedLayerTreeFrameSink::
-                CreateAndSetLayerTreeFrameSink,
-            base::Unretained(this)));
-  }
-
-  void CreateAndSetLayerTreeFrameSink() {
-    creating_output_ = true;
-    LayerTreeHostContextTest::RequestNewLayerTreeFrameSink();
-  }
-
-  void BeginTest() override {
-    layer_tree_host()->CompositeForTest(TicksFromMicroseconds(1), false);
-  }
-
-  void ScheduleComposite() override {
-    if (creating_output_)
-      EndTest();
-  }
-
-  bool creating_output_;
-};
-
-// This test uses Composite() which only exists for single thread.
-SINGLE_THREAD_TEST_F(
-    LayerTreeHostContextTestCommitAfterDelayedLayerTreeFrameSink);
-
-class LayerTreeHostContextTestAvoidUnnecessaryComposite
-    : public LayerTreeHostContextTest {
- public:
-  LayerTreeHostContextTestAvoidUnnecessaryComposite()
-      : LayerTreeHostContextTest(), in_composite_(false) {}
-
-  void InitializeSettings(LayerTreeSettings* settings) override {
-    settings->single_thread_proxy_scheduler = false;
-    settings->use_zero_copy = true;
-  }
-
-  void RequestNewLayerTreeFrameSink() override {
-    LayerTreeHostContextTest::RequestNewLayerTreeFrameSink();
-    EndTest();
-  }
-
-  void BeginTest() override {
-    in_composite_ = true;
-    layer_tree_host()->CompositeForTest(TicksFromMicroseconds(1), false);
-    in_composite_ = false;
-  }
-
-  void ScheduleComposite() override { EXPECT_FALSE(in_composite_); }
-
-  bool in_composite_;
-};
-
-// This test uses Composite() which only exists for single thread.
-SINGLE_THREAD_TEST_F(LayerTreeHostContextTestAvoidUnnecessaryComposite);
-
 // This test uses PictureLayer to check for a working context.
 class LayerTreeHostContextTestLostContextSucceedsWithContent
     : public LayerTreeHostContextTestLostContextSucceeds {
diff --git a/cc/trees/single_thread_proxy.cc b/cc/trees/single_thread_proxy.cc
index 29ed70d..3de362e3 100644
--- a/cc/trees/single_thread_proxy.cc
+++ b/cc/trees/single_thread_proxy.cc
@@ -248,7 +248,6 @@
 
 void SingleThreadProxy::SetNeedsCommit() {
   DCHECK(task_runner_provider_->IsMainThread());
-  single_thread_client_->RequestScheduleComposite();
   if (commit_requested_)
     return;
   commit_requested_ = true;
@@ -396,7 +395,6 @@
 }
 
 void SingleThreadProxy::SetNeedsRedrawOnImplThread() {
-  single_thread_client_->RequestScheduleComposite();
   if (scheduler_on_impl_thread_)
     scheduler_on_impl_thread_->SetNeedsRedraw();
 }
@@ -404,7 +402,6 @@
 void SingleThreadProxy::SetNeedsOneBeginImplFrameOnImplThread() {
   TRACE_EVENT0("cc",
                "SingleThreadProxy::SetNeedsOneBeginImplFrameOnImplThread");
-  single_thread_client_->RequestScheduleComposite();
   single_thread_client_->ScheduleAnimationForWebTests();
   if (scheduler_on_impl_thread_)
     scheduler_on_impl_thread_->SetNeedsOneBeginImplFrame();
@@ -418,7 +415,6 @@
 }
 
 void SingleThreadProxy::SetNeedsCommitOnImplThread() {
-  single_thread_client_->RequestScheduleComposite();
   single_thread_client_->ScheduleAnimationForWebTests();
   if (scheduler_on_impl_thread_)
     scheduler_on_impl_thread_->SetNeedsBeginMainFrame();
diff --git a/chrome/android/features/cablev2_authenticator/native/cablev2_authenticator_android.cc b/chrome/android/features/cablev2_authenticator/native/cablev2_authenticator_android.cc
index 5fb308b..9664451 100644
--- a/chrome/android/features/cablev2_authenticator/native/cablev2_authenticator_android.cc
+++ b/chrome/android/features/cablev2_authenticator/native/cablev2_authenticator_android.cc
@@ -188,7 +188,8 @@
   global_data.pending_make_credential_callback.reset();
   global_data.pending_get_assertion_callback.reset();
   global_data.usb_callback.reset();
-  global_data.pending_event.reset();
+  // pending_event is not reset because a notification might still exist that
+  // depends on it.
 }
 
 // AndroidBLEAdvert wraps a Java |BLEAdvert| object so that
diff --git a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingComponentBridge.java b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingComponentBridge.java
index 9bacd8d..5d816ae 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingComponentBridge.java
+++ b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingComponentBridge.java
@@ -43,6 +43,10 @@
         PropertyProvider<AccessorySheetData> provider = mProviders.get(tabType);
         if (provider != null) return provider;
         if (getManualFillingComponent() == null) return null;
+        if (mProviders.size() == 0) { // True iff the component is available for the first time.
+            getManualFillingComponent().registerSheetUpdateDelegate(
+                    mWebContents, this::requestSheet);
+        }
         provider = new PropertyProvider<>();
         mProviders.put(tabType, provider);
         getManualFillingComponent().registerSheetDataProvider(mWebContents, tabType, provider);
@@ -236,6 +240,13 @@
         }
     }
 
+    private void requestSheet(int sheetType) {
+        if (mNativeView != 0) {
+            ManualFillingComponentBridgeJni.get().requestAccessorySheet(
+                    mNativeView, ManualFillingComponentBridge.this, sheetType);
+        }
+    }
+
     @NativeMethods
     interface Natives {
         void onFillingTriggered(long nativeManualFillingViewAndroid,
@@ -246,6 +257,8 @@
                 ManualFillingComponentBridge caller, int accessoryAction, boolean enabled);
         void onViewDestroyed(
                 long nativeManualFillingViewAndroid, ManualFillingComponentBridge caller);
+        void requestAccessorySheet(long nativeManualFillingViewAndroid,
+                ManualFillingComponentBridge caller, int sheetType);
         void cachePasswordSheetDataForTesting(WebContents webContents, String[] userNames,
                 String[] passwords, boolean originDenylisted);
         void notifyFocusedFieldTypeForTesting(
diff --git a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingCoordinator.java b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingCoordinator.java
index a53c3d1..8a029ba 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingCoordinator.java
+++ b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingCoordinator.java
@@ -104,6 +104,12 @@
     }
 
     @Override
+    public void registerSheetUpdateDelegate(
+            WebContents webContents, UpdateAccessorySheetDelegate delegate) {
+        mMediator.registerSheetUpdateDelegate(webContents, delegate);
+    }
+
+    @Override
     public void registerAutofillProvider(
             PropertyProvider<AutofillSuggestion[]> autofillProvider, AutofillDelegate delegate) {
         mMediator.registerAutofillProvider(autofillProvider, delegate);
diff --git a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingMediator.java b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingMediator.java
index c799d1a7..d44bb38 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingMediator.java
+++ b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingMediator.java
@@ -212,6 +212,12 @@
                 || mWindowAndroid.getDisplay().getRotation() == Surface.ROTATION_180;
     }
 
+    public void registerSheetUpdateDelegate(
+            WebContents webContents, ManualFillingComponent.UpdateAccessorySheetDelegate delegate) {
+        // TODO(crbug.com/1169167): Associate the delegate with the ManualFillingState to allow
+        // requesting sheets if tabs change.
+    }
+
     void registerSheetDataProvider(WebContents webContents, @AccessoryTabType int tabType,
             PropertyProvider<KeyboardAccessoryData.AccessorySheetData> dataProvider) {
         if (!isInitialized()) return;
diff --git a/chrome/android/features/keyboard_accessory/public/java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingComponent.java b/chrome/android/features/keyboard_accessory/public/java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingComponent.java
index 5f42adf..a6e555d 100644
--- a/chrome/android/features/keyboard_accessory/public/java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingComponent.java
+++ b/chrome/android/features/keyboard_accessory/public/java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingComponent.java
@@ -73,6 +73,16 @@
         int calculateSoftKeyboardHeight(View rootView);
     }
 
+    /** A delegate that can be used to request updates for accessory sheets. */
+    interface UpdateAccessorySheetDelegate {
+        /**
+         * Requests a timely update to the accessory sheet of the given {@param sheetType}. If any
+         * sheet can be constructed, the native side will push it, even if it was pushed before.
+         * @param sheetType The {@link AccessoryTabType} of the sheet that should be updated.
+         */
+        void requestSheet(@AccessoryTabType int sheetType);
+    }
+
     /**
      * Initializes the manual filling component. Calls to this class are NoOps until this method
      * is called.
@@ -120,6 +130,14 @@
             PropertyProvider<KeyboardAccessoryData.AccessorySheetData> sheetDataProvider);
 
     /**
+     * Registers an updater delegate which requests new accessory sheets for a given `webContents`.
+     * @param webContents The {@link WebContents} the given `delegate` maintains sheets for.
+     * @param delegate A {@link UpdateAccessorySheetDelegate} to issue requests for recent sheets.
+     */
+    void registerSheetUpdateDelegate(
+            WebContents webContents, UpdateAccessorySheetDelegate delegate);
+
+    /**
      * Registers a provider, to provide actions for the keyboard accessory bar. Call
      * {@link PropertyProvider#notifyObservers(Object)} to fill or update the actions.
      * @param webContents The {@link WebContents} the provided data is meant for.
diff --git a/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceTest.java b/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceTest.java
index f45b9bcf..93ae7da8 100644
--- a/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceTest.java
+++ b/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceTest.java
@@ -1470,8 +1470,8 @@
     @DisableIf.Build(sdk_is_less_than = M, message = "https://crbug.com/1170553")
     @DisableIf.Build(supported_abis_includes = "x86", message = "https://crbug.com/1170553")
     @CommandLineFlags.Add({BASE_PARAMS + "/single/omnibox_focused_on_new_tab/true"})
-    public void
-    testOmnibox_FocusedOnNewTabInSingleSurface() {
+    @DisabledTest(message = "http://crbug/1205998 - the NoInstant_Return version is flaky.")
+    public void testOmnibox_FocusedOnNewTabInSingleSurface() {
         if (!mImmediateReturn) {
             pressHomePageButton();
         }
@@ -1706,6 +1706,7 @@
     // clang-format off
     @CommandLineFlags.Add({BASE_PARAMS + "/single/exclude_mv_tiles/false"
             + "/new_home_surface_from_home_button/hide_mv_tiles_and_tab_switcher"})
+    @DisabledTest(message = "http://crbug/1206081 - the Instant_Return version is flaky.")
     public void testNewSurfaceFromHomeButton(){
         // clang-format on
         assumeTrue(mImmediateReturn);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browserservices/digitalgoods/SiteIsolator.java b/chrome/android/java/src/org/chromium/chrome/browser/browserservices/digitalgoods/SiteIsolator.java
index e4c3d99..79f69c4 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/browserservices/digitalgoods/SiteIsolator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/browserservices/digitalgoods/SiteIsolator.java
@@ -9,7 +9,9 @@
 import org.chromium.url.GURL;
 
 /**
- * This class calls into native to request that a give tab starts site isolation.
+ * This class calls into native to request that a given tab starts site
+ * isolation for the provided url's site.  Note that the site will be isolated
+ * with a USER_TRIGGERED IsolatedOriginSource.
  */
 public class SiteIsolator {
     private SiteIsolator() {}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/ContextualSearchBarControl.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/ContextualSearchBarControl.java
index 8d2f161..5122ac3 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/ContextualSearchBarControl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/ContextualSearchBarControl.java
@@ -15,6 +15,7 @@
 import org.chromium.chrome.browser.compositor.bottombar.OverlayPanelAnimation;
 import org.chromium.chrome.browser.contextualsearch.QuickActionCategory;
 import org.chromium.chrome.browser.contextualsearch.ResolvedSearchTerm.CardTag;
+import org.chromium.chrome.browser.flags.ChromeFeatureList;
 import org.chromium.chrome.browser.layouts.animation.CompositorAnimator;
 import org.chromium.ui.base.LocalizationUtils;
 import org.chromium.ui.resources.dynamics.DynamicResourceLoader;
@@ -189,9 +190,13 @@
         if (percentage == FULL_OPACITY) onUpdateFromPeekToExpand(TRANSPARENT_OPACITY);
 
         // When the panel is completely closed the caption and custom image should be hidden.
+        // TODO(donnd): Do we really need to do any of this?
+        // The space will be freed when the panel closes.
         if (percentage == TRANSPARENT_OPACITY) {
             mQuickActionControl.reset();
-            mCaptionControl.hide();
+            if (!ChromeFeatureList.isEnabled(ChromeFeatureList.CONTEXTUAL_SEARCH_FORCE_CAPTION)) {
+                mCaptionControl.hide();
+            }
             getImageControl().hideCustomImage(false);
         }
     }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabRootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabRootUiCoordinator.java
index d3aa3f1..50a85b9 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabRootUiCoordinator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabRootUiCoordinator.java
@@ -16,6 +16,7 @@
 import org.chromium.chrome.browser.customtabs.content.CustomTabActivityNavigationController;
 import org.chromium.chrome.browser.customtabs.features.toolbar.CustomTabToolbarCoordinator;
 import org.chromium.chrome.browser.feature_engagement.TrackerFactory;
+import org.chromium.chrome.browser.flags.ActivityType;
 import org.chromium.chrome.browser.profiles.Profile;
 import org.chromium.chrome.browser.reengagement.ReengagementNotificationController;
 import org.chromium.chrome.browser.share.ShareDelegate;
@@ -67,4 +68,12 @@
             controller.tryToReengageTheUser();
         }));
     }
+
+    @Override
+    protected boolean shouldAllowThemingInNightMode() {
+        @ActivityType
+        int activityType = mActivity.getActivityType();
+        return activityType == ActivityType.TRUSTED_WEB_ACTIVITY
+                || activityType == ActivityType.WEB_APK;
+    }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManagerImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManagerImpl.java
index 2c63897..9e962ef 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManagerImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManagerImpl.java
@@ -658,7 +658,7 @@
             SigninManagerImplJni.get().wipeGoogleServiceWorkerCaches(
                     mNativeSigninManagerAndroid, wipeDataCallback);
         }
-        mAccountTrackerService.onAccountsChanged();
+        ThreadUtils.postOnUiThread(mAccountTrackerService::onAccountsChanged);
     }
 
     @VisibleForTesting
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/ManageSyncSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/ManageSyncSettings.java
index 6e40723..66af0a7 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/ManageSyncSettings.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/ManageSyncSettings.java
@@ -4,7 +4,6 @@
 
 package org.chromium.chrome.browser.sync.settings;
 
-import android.app.Dialog;
 import android.content.Intent;
 import android.net.Uri;
 import android.os.Bundle;
@@ -22,7 +21,6 @@
 import androidx.annotation.StringRes;
 import androidx.annotation.VisibleForTesting;
 import androidx.appcompat.app.ActionBar;
-import androidx.appcompat.app.AlertDialog;
 import androidx.appcompat.app.AppCompatActivity;
 import androidx.fragment.app.DialogFragment;
 import androidx.fragment.app.FragmentManager;
@@ -87,7 +85,6 @@
                    SignOutDialogFragment.SignOutDialogListener,
                    SyncErrorCardPreference.SyncErrorCardPreferenceListener {
     private static final String IS_FROM_SIGNIN_SCREEN = "ManageSyncSettings.isFromSigninScreen";
-    private static final String FRAGMENT_CANCEL_SYNC = "cancel_sync_dialog";
     private static final String CLEAR_DATA_PROGRESS_DIALOG_TAG = "clear_data_progress";
     private static final String SIGN_OUT_DIALOG_TAG = "sign_out_dialog_tag";
 
@@ -291,12 +288,7 @@
 
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
-        if (ChromeFeatureList.isEnabled(ChromeFeatureList.MOBILE_IDENTITY_CONSISTENCY)
-                && item.getItemId() == android.R.id.home) {
-            if (!mIsFromSigninScreen) return false; // Let Settings activity handle it.
-            showCancelSyncDialog();
-            return true;
-        } else if (item.getItemId() == R.id.menu_id_targeted_help) {
+        if (item.getItemId() == R.id.menu_id_targeted_help) {
             HelpAndFeedbackLauncherImpl.getInstance().show(getActivity(),
                     getString(R.string.help_context_sync_and_services),
                     Profile.getLastUsedRegularProfile(), null);
@@ -667,12 +659,10 @@
 
     @Override
     public boolean onBackPressed() {
-        if (!ChromeFeatureList.isEnabled(ChromeFeatureList.MOBILE_IDENTITY_CONSISTENCY)
-                || !mIsFromSigninScreen) {
-            return false; // Let parent activity handle it.
+        if (mIsFromSigninScreen) {
+            RecordUserAction.record("Signin_Signin_BackOnAdvancedSyncSettings");
         }
-        showCancelSyncDialog();
-        return true;
+        return false;
     }
 
     // SyncErrorCardPreferenceListener implementation:
@@ -742,13 +732,6 @@
         getActivity().finish();
     }
 
-    private void showCancelSyncDialog() {
-        RecordUserAction.record("Signin_Signin_BackOnAdvancedSyncSettings");
-        CancelSyncDialog dialog = new CancelSyncDialog();
-        dialog.setTargetFragment(this, 0);
-        dialog.show(getFragmentManager(), FRAGMENT_CANCEL_SYNC);
-    }
-
     private void confirmSettings() {
         RecordUserAction.record("Signin_Signin_ConfirmAdvancedSyncSettings");
         ProfileSyncService.get().setFirstSetupComplete(
@@ -768,39 +751,6 @@
         getActivity().finish();
     }
 
-    /**
-     * The dialog that offers the user to cancel sync. Only shown when
-     * {@link ManageSyncSettings} is opened from the sign-in screen. Shown when the user
-     * tries to close the settings page without confirming settings.
-     */
-    public static class CancelSyncDialog extends DialogFragment {
-        public CancelSyncDialog() {
-            // Fragment must have an empty public constructor
-        }
-
-        @Override
-        public Dialog onCreateDialog(Bundle savedInstanceState) {
-            return new AlertDialog.Builder(getActivity(), R.style.Theme_Chromium_AlertDialog)
-                    .setTitle(R.string.cancel_sync_dialog_title)
-                    .setMessage(R.string.cancel_sync_dialog_message)
-                    .setNegativeButton(R.string.back, (dialog, which) -> onBackPressed())
-                    .setPositiveButton(
-                            R.string.cancel_sync_button, (dialog, which) -> onCancelSyncPressed())
-                    .create();
-        }
-
-        private void onBackPressed() {
-            RecordUserAction.record("Signin_Signin_CancelCancelAdvancedSyncSettings");
-            dismiss();
-        }
-
-        public void onCancelSyncPressed() {
-            RecordUserAction.record("Signin_Signin_ConfirmCancelAdvancedSyncSettings");
-            ManageSyncSettings fragment = (ManageSyncSettings) getTargetFragment();
-            fragment.cancelSync();
-        }
-    }
-
     // SignOutDialogListener implementation:
     @Override
     public void onSignOutClicked(boolean forceWipeUserData) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java
index ec861ff1..8bbd8d9 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java
@@ -277,7 +277,8 @@
             }
         };
         mTopUiThemeColorProvider = new TopUiThemeColorProvider(mActivity, mActivityTabSupplier,
-                mActivity::getActivityThemeColor, mActivity::isTablet);
+                mActivity::getActivityThemeColor, mActivity::isTablet,
+                shouldAllowThemingInNightMode());
     }
 
     // TODO(pnoland, crbug.com/865801): remove this in favor of wiring it directly.
@@ -890,6 +891,14 @@
     }
 
     /**
+     * Whether the top toolbar theme color provider should allow using the web pages theme if the
+     * device is in night mode.
+     */
+    protected boolean shouldAllowThemingInNightMode() {
+        return false;
+    }
+
+    /**
      * Initialize the {@link BottomSheetController}. The view for this component is not created
      * until content is requested in the sheet.
      */
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 c780ad3..df1d53f 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
@@ -93,7 +93,7 @@
         final CoreAccountInfo expectedPrimaryAccount =
                 mAccountManagerTestRule.addAccount(newAccountEmail);
 
-        mAccountManagerTestRule.removeAccount(oldAccount.getEmail());
+        mAccountManagerTestRule.removeAccountAndWaitForSeeding(oldAccount.getEmail());
 
         CriteriaHelper.pollUiThread(() -> {
             return expectedPrimaryAccount.equals(
@@ -112,7 +112,7 @@
         when(mAccountRenameCheckerDelegateMock.getNewNameOfRenamedAccount(oldAccount.getEmail()))
                 .thenReturn(newAccountEmail);
 
-        mAccountManagerTestRule.removeAccount(oldAccount.getEmail());
+        mAccountManagerTestRule.removeAccountAndWaitForSeeding(oldAccount.getEmail());
 
         CriteriaHelper.pollUiThread(() -> {
             return !IdentityServicesProvider.get()
@@ -130,7 +130,7 @@
         final CoreAccountInfo oldAccount =
                 mAccountManagerTestRule.addTestAccountThenSigninAndEnableSync();
 
-        mAccountManagerTestRule.removeAccount(oldAccount.getEmail());
+        mAccountManagerTestRule.removeAccountAndWaitForSeeding(oldAccount.getEmail());
 
         CriteriaHelper.pollUiThread(() -> {
             return !IdentityServicesProvider.get()
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index 51bb4226..b2d551b 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -7547,6 +7547,15 @@
       <message name="IDS_SHARING_HUB_TOOLTIP" desc="Tooltip for the Sharing Hub feature omnibox icon.">
         Share this page
       </message>
+      <message name="IDS_SHARING_HUB_COPY_LINK_LABEL" desc="The text label for the copy link button in the Sharing Hub dialog and app menu.">
+        Copy link
+      </message>
+      <message name="IDS_SHARING_HUB_SAVE_PAGE_LABEL" desc="The text label for the save page button in the Sharing Hub dialog and app menu.">
+        Save page as...
+      </message>
+      <message name="IDS_SHARING_HUB_MEDIA_ROUTER_LABEL" desc="The text label for the media router button in the Sharing Hub dialog and app menu.">
+        Cast...
+      </message>
 
       <!-- Clipboard History Menu feature. -->
       <message name="IDS_CONTEXT_MENU_SHOW_CLIPBOARD_HISTORY_MENU"
diff --git a/chrome/app/generated_resources_grd/IDS_SHARING_HUB_COPY_LINK_LABEL.png.sha1 b/chrome/app/generated_resources_grd/IDS_SHARING_HUB_COPY_LINK_LABEL.png.sha1
new file mode 100644
index 0000000..096adf5
--- /dev/null
+++ b/chrome/app/generated_resources_grd/IDS_SHARING_HUB_COPY_LINK_LABEL.png.sha1
@@ -0,0 +1 @@
+e0f6099690c2e1a2189a5f388138e268239c6fc2
\ No newline at end of file
diff --git a/chrome/app/generated_resources_grd/IDS_SHARING_HUB_MEDIA_ROUTER_LABEL.png.sha1 b/chrome/app/generated_resources_grd/IDS_SHARING_HUB_MEDIA_ROUTER_LABEL.png.sha1
new file mode 100644
index 0000000..096adf5
--- /dev/null
+++ b/chrome/app/generated_resources_grd/IDS_SHARING_HUB_MEDIA_ROUTER_LABEL.png.sha1
@@ -0,0 +1 @@
+e0f6099690c2e1a2189a5f388138e268239c6fc2
\ No newline at end of file
diff --git a/chrome/app/generated_resources_grd/IDS_SHARING_HUB_SAVE_PAGE_LABEL.png.sha1 b/chrome/app/generated_resources_grd/IDS_SHARING_HUB_SAVE_PAGE_LABEL.png.sha1
new file mode 100644
index 0000000..096adf5
--- /dev/null
+++ b/chrome/app/generated_resources_grd/IDS_SHARING_HUB_SAVE_PAGE_LABEL.png.sha1
@@ -0,0 +1 @@
+e0f6099690c2e1a2189a5f388138e268239c6fc2
\ No newline at end of file
diff --git a/chrome/app_shim/app_shim_delegate.h b/chrome/app_shim/app_shim_delegate.h
index e30d58d..20d6b95 100644
--- a/chrome/app_shim/app_shim_delegate.h
+++ b/chrome/app_shim/app_shim_delegate.h
@@ -7,8 +7,6 @@
 
 #import <Cocoa/Cocoa.h>
 
-#include "base/files/file_path.h"
-
 class AppShimController;
 
 // An application delegate to catch user interactions and send the appropriate
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index 665d772..32b17237f 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -1603,8 +1603,6 @@
     "sharing/web_push/web_push_common.h",
     "sharing/web_push/web_push_sender.cc",
     "sharing/web_push/web_push_sender.h",
-    "sharing_hub/sharing_hub_features.cc",
-    "sharing_hub/sharing_hub_features.h",
     "shell_integration.cc",
     "shell_integration.h",
     "signin/about_signin_internals_factory.cc",
@@ -4020,6 +4018,14 @@
       "sharing/sharing_ui_controller.h",
       "sharing/sms/sms_remote_fetcher_ui_controller.cc",
       "sharing/sms/sms_remote_fetcher_ui_controller.h",
+      "sharing_hub/sharing_hub_features.cc",
+      "sharing_hub/sharing_hub_features.h",
+      "sharing_hub/sharing_hub_model.cc",
+      "sharing_hub/sharing_hub_model.h",
+      "sharing_hub/sharing_hub_service.cc",
+      "sharing_hub/sharing_hub_service.h",
+      "sharing_hub/sharing_hub_service_factory.cc",
+      "sharing_hub/sharing_hub_service_factory.h",
       "signin/signin_promo.cc",
       "signin/signin_promo.h",
       "signin/signin_ui_util.cc",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 9a342647..3512417 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -2869,6 +2869,10 @@
      flag_descriptions::kInteractiveWindowCycleList,
      flag_descriptions::kInteractiveWindowCycleListDescription, kOsCrOS,
      FEATURE_VALUE_TYPE(ash::features::kInteractiveWindowCycleList)},
+    {"enable-compositing-based-throttling",
+     flag_descriptions::kCompositingBasedThrottling,
+     flag_descriptions::kCompositingBasedThrottlingDescription, kOsCrOS,
+     FEATURE_VALUE_TYPE(ash::features::kCompositingBasedThrottling)},
     {"bluetooth-aggressive-appearance-filter",
      flag_descriptions::kBluetoothAggressiveAppearanceFilterName,
      flag_descriptions::kBluetoothAggressiveAppearanceFilterDescription,
@@ -7271,6 +7275,11 @@
     flags_state_ = std::make_unique<flags_ui::FlagsState>(entries, this);
   }
 
+  void RestoreDefaultState() {
+    flags_state_ =
+        std::make_unique<flags_ui::FlagsState>(kFeatureEntries, this);
+  }
+
  private:
   // flags_ui::FlagsState::Delegate:
   bool ShouldExcludeFlag(const flags_ui::FlagsStorage* storage,
@@ -7483,8 +7492,7 @@
 ScopedFeatureEntries::~ScopedFeatureEntries() {
   GetEntriesForTesting()->clear();  // IN-TEST
   // Restore the flag state to the production flags.
-  FlagsStateSingleton::GetInstance()->RebuildState(
-      *GetEntriesForTesting());  // IN-TEST
+  FlagsStateSingleton::GetInstance()->RestoreDefaultState();
 }
 
 const FeatureEntry* GetFeatureEntries(size_t* count) {
diff --git a/chrome/browser/about_flags_unittest.cc b/chrome/browser/about_flags_unittest.cc
index c8acbc28..f559fe8 100644
--- a/chrome/browser/about_flags_unittest.cc
+++ b/chrome/browser/about_flags_unittest.cc
@@ -17,6 +17,7 @@
 #include "build/build_config.h"
 #include "chrome/common/chrome_version.h"
 #include "components/flags_ui/feature_entry.h"
+#include "components/flags_ui/feature_entry_macros.h"
 #include "components/flags_ui/flags_test_helpers.h"
 #include "components/flags_ui/flags_ui_metrics.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -126,6 +127,31 @@
       base::make_span(entries, count), CHROME_VERSION_MAJOR);
 }
 
+// Test that ScopedFeatureEntries restores existing feature entries on
+// destruction.
+TEST(AboutFlagsTest, ScopedFeatureEntriesRestoresFeatureEntries) {
+  size_t orig_num_features;
+  const flags_ui::FeatureEntry* cur_entries =
+      testing::GetFeatureEntries(&orig_num_features);
+  EXPECT_GT(orig_num_features, 0U);
+  const char* first_feature_name = cur_entries[0].internal_name;
+  {
+    const base::Feature kTestFeature1{"FeatureName1",
+                                      base::FEATURE_ENABLED_BY_DEFAULT};
+    testing::ScopedFeatureEntries feature_entries(
+        {{"feature-1", "", "", flags_ui::FlagsState::GetCurrentPlatform(),
+          FEATURE_VALUE_TYPE(kTestFeature1)}});
+    size_t num_features;
+    testing::GetFeatureEntries(&num_features);
+    EXPECT_EQ(num_features, 1U);
+  }
+  size_t new_num_features;
+  cur_entries = testing::GetFeatureEntries(&new_num_features);
+  EXPECT_EQ(orig_num_features, new_num_features);
+  EXPECT_TRUE(about_flags::GetCurrentFlagsState()->FindFeatureEntryByName(
+      first_feature_name));
+}
+
 class AboutFlagsHistogramTest : public ::testing::Test {
  protected:
   // This is a helper function to check that all IDs in enum LoginCustomFlags in
diff --git a/chrome/browser/android/browserservices/site_isolator.cc b/chrome/browser/android/browserservices/site_isolator.cc
index 219f3658..d99b95f 100644
--- a/chrome/browser/android/browserservices/site_isolator.cc
+++ b/chrome/browser/android/browserservices/site_isolator.cc
@@ -18,5 +18,7 @@
   std::unique_ptr<GURL> gurl = url::GURLAndroid::ToNativeGURL(env, j_gurl);
 
   content::SiteInstance::StartIsolatingSite(
-      browser_context::BrowserContextFromJavaHandle(j_profile), *gurl);
+      browser_context::BrowserContextFromJavaHandle(j_profile), *gurl,
+      content::ChildProcessSecurityPolicy::IsolatedOriginSource::
+          USER_TRIGGERED);
 }
diff --git a/chrome/browser/android/explore_sites/explore_sites_types.h b/chrome/browser/android/explore_sites/explore_sites_types.h
index a9612104..65f107548 100644
--- a/chrome/browser/android/explore_sites/explore_sites_types.h
+++ b/chrome/browser/android/explore_sites/explore_sites_types.h
@@ -10,7 +10,6 @@
 #include <vector>
 
 #include "base/callback.h"
-#include "base/files/file_path.h"
 #include "base/time/time.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 #include "url/gurl.h"
diff --git a/chrome/browser/android/tab_web_contents_delegate_android.h b/chrome/browser/android/tab_web_contents_delegate_android.h
index 74ba329..e1f56ad 100644
--- a/chrome/browser/android/tab_web_contents_delegate_android.h
+++ b/chrome/browser/android/tab_web_contents_delegate_android.h
@@ -7,7 +7,6 @@
 
 #include <memory>
 
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/scoped_observer.h"
 #include "components/embedder_support/android/delegate/web_contents_delegate_android.h"
diff --git a/chrome/browser/android/usage_stats/usage_stats_database.h b/chrome/browser/android/usage_stats/usage_stats_database.h
index 8c5c9f32..b0a3a88 100644
--- a/chrome/browser/android/usage_stats/usage_stats_database.h
+++ b/chrome/browser/android/usage_stats/usage_stats_database.h
@@ -13,7 +13,6 @@
 #include "base/callback_forward.h"
 #include "base/containers/flat_set.h"
 #include "base/containers/queue.h"
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "base/time/time.h"
diff --git a/chrome/browser/ash/app_mode/arc/arc_kiosk_app_data.h b/chrome/browser/ash/app_mode/arc/arc_kiosk_app_data.h
index 64d4679b..8c170215 100644
--- a/chrome/browser/ash/app_mode/arc/arc_kiosk_app_data.h
+++ b/chrome/browser/ash/app_mode/arc/arc_kiosk_app_data.h
@@ -7,7 +7,6 @@
 
 #include <string>
 
-#include "base/files/file_path.h"
 #include "base/memory/weak_ptr.h"
 #include "chrome/browser/ash/app_mode/kiosk_app_data_base.h"
 #include "components/account_id/account_id.h"
diff --git a/chrome/browser/ash/arc/tracing/arc_system_stat_collector.h b/chrome/browser/ash/arc/tracing/arc_system_stat_collector.h
index 7a93bae..3b2ae91 100644
--- a/chrome/browser/ash/arc/tracing/arc_system_stat_collector.h
+++ b/chrome/browser/ash/arc/tracing/arc_system_stat_collector.h
@@ -9,7 +9,6 @@
 #include <string>
 #include <vector>
 
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
diff --git a/chrome/browser/ash/login/oobe_configuration.h b/chrome/browser/ash/login/oobe_configuration.h
index d877cc7..1e34380 100644
--- a/chrome/browser/ash/login/oobe_configuration.h
+++ b/chrome/browser/ash/login/oobe_configuration.h
@@ -7,7 +7,6 @@
 
 #include <memory>
 
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "base/observer_list.h"
diff --git a/chrome/browser/ash/login/signin/offline_signin_limiter.cc b/chrome/browser/ash/login/signin/offline_signin_limiter.cc
index a8a54a9..b2f7123 100644
--- a/chrome/browser/ash/login/signin/offline_signin_limiter.cc
+++ b/chrome/browser/ash/login/signin/offline_signin_limiter.cc
@@ -21,10 +21,9 @@
 #include "chrome/browser/ash/login/login_constants.h"
 #include "chrome/browser/ash/login/login_pref_names.h"
 #include "chrome/browser/ash/login/reauth_stats.h"
-#include "chrome/browser/ash/login/saml/in_session_password_sync_manager.h"
-#include "chrome/browser/ash/login/saml/in_session_password_sync_manager_factory.h"
 #include "chrome/browser/ash/profiles/profile_helper.h"
 #include "chrome/browser/profiles/profile.h"
+#include "chromeos/components/proximity_auth/screenlock_bridge.h"
 #include "components/prefs/pref_service.h"
 #include "components/session_manager/core/session_manager.h"
 #include "components/session_manager/core/session_manager_observer.h"
@@ -381,18 +380,24 @@
   DCHECK(user);
 
   // Re-auth on lock - enabled only for the primary user.
-  InSessionPasswordSyncManager* password_sync_manager =
-      InSessionPasswordSyncManagerFactory::GetForProfile(profile_);
-  if (password_sync_manager) {
-    password_sync_manager->MaybeForceReauthOnLockScreen(
-        InSessionPasswordSyncManager::ReauthenticationReason::kPolicy);
+  proximity_auth::ScreenlockBridge* screenlock_bridge_ =
+      proximity_auth::ScreenlockBridge::Get();
+  DCHECK(screenlock_bridge_);
+
+  if (screenlock_bridge_->IsLocked()) {
+    // On the lock screen: need to update the UI.
+    screenlock_bridge_->lock_handler()->SetAuthType(
+        user->GetAccountId(), proximity_auth::mojom::AuthType::ONLINE_SIGN_IN,
+        std::u16string());
   }
-  if (user->using_saml())
+
+  if (user->using_saml()) {
     RecordReauthReason(user->GetAccountId(),
                        ReauthReason::SAML_LOCK_SCREEN_REAUTH_POLICY);
-  else
+  } else {
     RecordReauthReason(user->GetAccountId(),
                        ReauthReason::GAIA_LOCK_SCREEN_REAUTH_POLICY);
+  }
   offline_lock_screen_signin_limit_timer_->Stop();
 }
 
diff --git a/chrome/browser/ash/login/users/chrome_user_manager_impl.h b/chrome/browser/ash/login/users/chrome_user_manager_impl.h
index f5a53f5..bd75ff2 100644
--- a/chrome/browser/ash/login/users/chrome_user_manager_impl.h
+++ b/chrome/browser/ash/login/users/chrome_user_manager_impl.h
@@ -11,7 +11,6 @@
 #include <string>
 #include <vector>
 
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "base/observer_list.h"
diff --git a/chrome/browser/ash/login/users/mock_user_manager.h b/chrome/browser/ash/login/users/mock_user_manager.h
index 40e9719..ded0c89 100644
--- a/chrome/browser/ash/login/users/mock_user_manager.h
+++ b/chrome/browser/ash/login/users/mock_user_manager.h
@@ -7,7 +7,6 @@
 
 #include <string>
 
-#include "base/files/file_path.h"
 #include "base/memory/weak_ptr.h"
 #include "chrome/browser/ash/login/user_flow.h"
 #include "chrome/browser/ash/login/users/affiliation.h"
diff --git a/chrome/browser/ash/mobile/mobile_activator.h b/chrome/browser/ash/mobile/mobile_activator.h
index a136c05f7..55f49b8 100644
--- a/chrome/browser/ash/mobile/mobile_activator.h
+++ b/chrome/browser/ash/mobile/mobile_activator.h
@@ -9,7 +9,6 @@
 #include <memory>
 #include <string>
 
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/singleton.h"
 #include "base/memory/weak_ptr.h"
diff --git a/chrome/browser/ash/system_logs/single_log_file_log_source.cc b/chrome/browser/ash/system_logs/single_log_file_log_source.cc
index 34eb0fd..d64e23d 100644
--- a/chrome/browser/ash/system_logs/single_log_file_log_source.cc
+++ b/chrome/browser/ash/system_logs/single_log_file_log_source.cc
@@ -89,9 +89,7 @@
     : SystemLogsSource(GetLogFileSourceRelativeFilePathValue(source_type)),
       source_type_(source_type),
       log_file_dir_path_(kDefaultSystemLogDirPath),
-      max_read_size_(kMaxReadSize),
-      file_cursor_position_(0),
-      file_inode_(0) {}
+      max_read_size_(kMaxReadSize) {}
 
 SingleLogFileLogSource::~SingleLogFileLogSource() {}
 
@@ -139,35 +137,36 @@
     bool bytes_skipped,
     size_t num_rotations_allowed,
     SystemLogsResponse* response) {
-  // Attempt to open the file if it was not previously opened.
-  if (!file_.IsValid()) {
-    file_.Initialize(GetLogFilePath(),
-                     base::File::FLAG_OPEN | base::File::FLAG_READ);
-    if (!file_.IsValid())
-      return;
+  // Handle for reading the log file that is source of logging data.
+  base::File file;
 
-    file_cursor_position_ = 0;
-    file_inode_ = GetInodeValue(GetLogFilePath());
-  }
+  // Attempt to open the file if it was not previously opened.
+  file.Initialize(GetLogFilePath(),
+                  base::File::FLAG_OPEN | base::File::FLAG_READ);
+  if (!file.IsValid())
+    return;
+
+  // Keeps track of how much data has been read or skipped from |file|.
+  size_t file_cursor_position = 0;
+
+  // File system inode value that was associated with |log_file_path_| when it
+  // was originally opened for reading.
+  ino_t file_inode = GetInodeValue(GetLogFilePath());
 
   // Check for file size reset.
-  const size_t length = file_.GetLength();
-  if (length < file_cursor_position_) {
-    file_cursor_position_ = 0;
-    file_.Seek(base::File::FROM_BEGIN, 0);
-  }
+  const size_t length = file.GetLength();
 
   // Check for large read and skip forward to avoid out-of-memory conditions.
-  if (length - file_cursor_position_ > max_read_size_) {
+  if (length > max_read_size_) {
     bytes_skipped = true;
-    file_.Seek(base::File::FROM_END, -max_read_size_);
-    // Update |file_cursor_position_| to support the file size reset check.
-    file_cursor_position_ = length - max_read_size_;
+    file.Seek(base::File::FROM_END, -max_read_size_);
+    // Update |file_cursor_position| to support the file size reset check.
+    file_cursor_position = length - max_read_size_;
   }
 
   // The calculated amount of data to read, after adjusting for
   // |max_read_size_|.
-  const size_t size_to_read = length - file_cursor_position_;
+  const size_t size_to_read = length - file_cursor_position;
 
   // Trim down the previously read data before starting a new read.
   const size_t available_previous_read_size = max_read_size_ - size_to_read;
@@ -179,11 +178,10 @@
   // Read from file until end.
   std::string new_result_string;
   new_result_string.resize(size_to_read);
-  size_t size_read =
-      file_.ReadAtCurrentPos(&new_result_string[0], size_to_read);
+  size_t size_read = file.ReadAtCurrentPos(&new_result_string[0], size_to_read);
   new_result_string.resize(size_read);
 
-  const bool file_was_rotated = file_inode_ != GetInodeValue(GetLogFilePath());
+  const bool file_was_rotated = file_inode != GetInodeValue(GetLogFilePath());
   const bool should_handle_file_rotation =
       file_was_rotated && num_rotations_allowed > 0;
 
@@ -200,7 +198,7 @@
     // itself.
     size_t adjusted_size_read =
         last_newline_pos == std::string::npos ? 0 : last_newline_pos + 1;
-    file_.Seek(base::File::FROM_CURRENT, -size_read + adjusted_size_read);
+    file.Seek(base::File::FROM_CURRENT, -size_read + adjusted_size_read);
     new_result_string.resize(adjusted_size_read);
 
     // Update |size_read| to reflect that the read was only up to the last
@@ -208,16 +206,12 @@
     size_read = adjusted_size_read;
   }
 
-  file_cursor_position_ += size_read;
-
   result_string->append(new_result_string);
 
   // If the file was rotated, close the file handle and call this function
   // again, to read from the new file.
   if (should_handle_file_rotation) {
-    file_.Close();
-    file_cursor_position_ = 0;
-    file_inode_ = 0;
+    file.Close();
     ContinueReadFile(std::move(result_string), bytes_skipped,
                      num_rotations_allowed - 1, response);
   } else {
diff --git a/chrome/browser/ash/system_logs/single_log_file_log_source.h b/chrome/browser/ash/system_logs/single_log_file_log_source.h
index f5ddde8..bf5fc6e 100644
--- a/chrome/browser/ash/system_logs/single_log_file_log_source.h
+++ b/chrome/browser/ash/system_logs/single_log_file_log_source.h
@@ -19,7 +19,7 @@
 
 namespace system_logs {
 
-// Gathers log data from a single source, possibly incrementally.
+// Gathers log data from a single source.
 class SingleLogFileLogSource : public SystemLogsSource {
  public:
   enum class SupportedSource {
@@ -103,19 +103,9 @@
   // Path to system log file directory.
   base::FilePath log_file_dir_path_;
 
-  // The maximum size of a read from |file_|.
+  // The maximum size of a read from the system log file.
   size_t max_read_size_;
 
-  // Keeps track of how much data has been read or skipped from |file_|.
-  size_t file_cursor_position_;
-
-  // Handle for reading the log file that is source of logging data.
-  base::File file_;
-
-  // File system inode value that was associated with |log_file_path_| when it
-  // was originally opened for reading.
-  ino_t file_inode_;
-
   base::WeakPtrFactory<SingleLogFileLogSource> weak_ptr_factory_{this};
 
   DISALLOW_COPY_AND_ASSIGN(SingleLogFileLogSource);
diff --git a/chrome/browser/ash/system_logs/single_log_file_log_source_unittest.cc b/chrome/browser/ash/system_logs/single_log_file_log_source_unittest.cc
index b93a3c5..51eb151 100644
--- a/chrome/browser/ash/system_logs/single_log_file_log_source_unittest.cc
+++ b/chrome/browser/ash/system_logs/single_log_file_log_source_unittest.cc
@@ -169,62 +169,18 @@
   FetchFromSource();
 
   EXPECT_EQ(2, num_callback_calls());
-  EXPECT_EQ("The quick brown fox jumps over the lazy dog\n", latest_response());
+  EXPECT_EQ("Hello world!\nThe quick brown fox jumps over the lazy dog\n",
+            latest_response());
 
   EXPECT_TRUE(AppendToFile(base::FilePath("messages"),
                            "Some like it hot.\nSome like it cold\n"));
   FetchFromSource();
 
   EXPECT_EQ(3, num_callback_calls());
-  EXPECT_EQ("Some like it hot.\nSome like it cold\n", latest_response());
-
-  // As a sanity check, read entire contents of file separately to make sure it
-  // was written incrementally, and hence read incrementally.
-  std::string file_contents;
-  EXPECT_TRUE(base::ReadFileToString(log_file_path(), &file_contents));
   EXPECT_EQ(
-      "Hello world!\nThe quick brown fox jumps over the lazy dog\n"
-      "Some like it hot.\nSome like it cold\n",
-      file_contents);
-}
-
-// The log files read by SingleLogFileLogSource are not expected to be
-// overwritten. This test is just to ensure that the SingleLogFileLogSource
-// class is robust enough not to break in the event of an overwrite.
-TEST_F(SingleLogFileLogSourceTest, FileOverwrite) {
-  InitializeSource(SingleLogFileLogSource::SupportedSource::kUiLatest);
-
-  EXPECT_TRUE(AppendToFile(base::FilePath("ui/ui.LATEST"), "0123456789\n"));
-  FetchFromSource();
-
-  EXPECT_EQ(1, num_callback_calls());
-  EXPECT_EQ("0123456789\n", latest_response());
-
-  // Overwrite the file.
-  EXPECT_TRUE(WriteFile(base::FilePath("ui/ui.LATEST"), "abcdefg\n"));
-  FetchFromSource();
-
-  // Should re-read from the beginning.
-  EXPECT_EQ(2, num_callback_calls());
-  EXPECT_EQ("abcdefg\n", latest_response());
-
-  // Append to the file to make sure incremental read still works.
-  EXPECT_TRUE(AppendToFile(base::FilePath("ui/ui.LATEST"), "hijk\n"));
-  FetchFromSource();
-
-  EXPECT_EQ(3, num_callback_calls());
-  EXPECT_EQ("hijk\n", latest_response());
-
-  // Overwrite again, this time with a longer length than the existing file.
-  // Previous contents:
-  //   abcdefg~hijk~     <-- "~" is a single-char representation of newline.
-  // New contents:
-  //   lmnopqrstuvwxyz~  <-- excess text beyond end of prev contents: "yz~"
-  EXPECT_TRUE(WriteFile(base::FilePath("ui/ui.LATEST"), "lmnopqrstuvwxyz\n"));
-  FetchFromSource();
-
-  EXPECT_EQ(4, num_callback_calls());
-  EXPECT_EQ("yz\n", latest_response());
+      "Hello world!\nThe quick brown fox jumps over the lazy dog\nSome like it "
+      "hot.\nSome like it cold\n",
+      latest_response());
 }
 
 TEST_F(SingleLogFileLogSourceTest, IncompleteLines) {
@@ -255,52 +211,14 @@
   FetchFromSource();
 
   EXPECT_EQ(4, num_callback_calls());
-  EXPECT_EQ("Hello world\n", latest_response());
+  EXPECT_EQ("0123456789abcdefghijk\nHello world\n", latest_response());
 
   EXPECT_TRUE(AppendToFile(base::FilePath("messages"), "\n"));
   FetchFromSource();
 
   EXPECT_EQ(5, num_callback_calls());
-  EXPECT_EQ("Goodbye world\n", latest_response());
-}
-
-TEST_F(SingleLogFileLogSourceTest, HandleLogFileRotation) {
-  InitializeSource(SingleLogFileLogSource::SupportedSource::kMessages);
-
-  EXPECT_TRUE(AppendToFile(base::FilePath("messages"), "1st log file\n"));
-  FetchFromSource();
-  EXPECT_EQ(1, num_callback_calls());
-  EXPECT_EQ("1st log file\n", latest_response());
-
-  // Rotate file. Make sure the rest of the old file and the contents of the new
-  // file are both read.
-  EXPECT_TRUE(AppendToFile(base::FilePath("messages"), "More 1st log file\n"));
-  EXPECT_TRUE(
-      RotateFile(base::FilePath("messages"), base::FilePath("messages.1")));
-  EXPECT_TRUE(AppendToFile(base::FilePath("messages"), "2nd log file\n"));
-
-  FetchFromSource();
-  EXPECT_EQ(2, num_callback_calls());
-  EXPECT_EQ("More 1st log file\n2nd log file\n", latest_response());
-
-  // Rotate again, but this time omit the newline before rotating.
-  EXPECT_TRUE(AppendToFile(base::FilePath("messages"), "No newline here..."));
-  EXPECT_TRUE(
-      RotateFile(base::FilePath("messages"), base::FilePath("messages.1")));
-  EXPECT_TRUE(AppendToFile(base::FilePath("messages"), "3rd log file\n"));
-  EXPECT_TRUE(AppendToFile(base::FilePath("messages"), "Also no newline here"));
-
-  FetchFromSource();
-  EXPECT_EQ(3, num_callback_calls());
-  // Make sure the rotation didn't break anything: the last part of the new file
-  // does not end with a newline; thus the new file should not be read.
-  EXPECT_EQ("No newline here...3rd log file\n", latest_response());
-
-  // Finish the previous read attempt by adding the missing newline.
-  EXPECT_TRUE(AppendToFile(base::FilePath("messages"), "...yet\n"));
-  FetchFromSource();
-  EXPECT_EQ(4, num_callback_calls());
-  EXPECT_EQ("Also no newline here...yet\n", latest_response());
+  EXPECT_EQ("0123456789abcdefghijk\nHello world\nGoodbye world\n",
+            latest_response());
 }
 
 TEST_F(SingleLogFileLogSourceTest, ReadAtMaxReadSizeNotLimited) {
@@ -334,104 +252,6 @@
       latest_response());
 }
 
-TEST_F(SingleLogFileLogSourceTest, ReadOverMaxReadSizeBeforeRotate) {
-  InitializeSource(SingleLogFileLogSource::SupportedSource::kMessages);
-  SetMaxReadSize(14);
-
-  EXPECT_TRUE(AppendToFile(base::FilePath("messages"), "1st log file\n"));
-  EXPECT_TRUE(
-      AppendToFile(base::FilePath("messages"), "Exceeds max read size\n"));
-  FetchFromSource();
-  EXPECT_EQ(1, num_callback_calls());
-  EXPECT_EQ("<earlier logs truncated>\n<partial line>max read size\n",
-            latest_response());
-
-  // Rotate file. Make sure the rest of the old file and the contents of the new
-  // file are both read.
-  EXPECT_TRUE(AppendToFile(base::FilePath("messages"), "More\n"));
-  EXPECT_TRUE(
-      RotateFile(base::FilePath("messages"), base::FilePath("messages.1")));
-  EXPECT_TRUE(AppendToFile(base::FilePath("messages"), "2nd file\n"));
-
-  FetchFromSource();
-  EXPECT_EQ(2, num_callback_calls());
-  EXPECT_EQ("More\n2nd file\n", latest_response());
-
-  // Rotate again, but this time omit the newline before rotating.
-  EXPECT_TRUE(AppendToFile(base::FilePath("messages"),
-                           "Long line without a newline ... "));
-  EXPECT_TRUE(
-      RotateFile(base::FilePath("messages"), base::FilePath("messages.1")));
-  EXPECT_TRUE(AppendToFile(base::FilePath("messages"), "ended\n"));
-  // Partial line counted against max read size.
-  EXPECT_TRUE(AppendToFile(base::FilePath("messages"), "partial"));
-
-  FetchFromSource();
-  EXPECT_EQ(3, num_callback_calls());
-  EXPECT_EQ("<earlier logs truncated>\n<partial line> ended\n",
-            latest_response());
-}
-
-TEST_F(SingleLogFileLogSourceTest, ReadOverMaxReadSizeAfterRotate) {
-  InitializeSource(SingleLogFileLogSource::SupportedSource::kMessages);
-  SetMaxReadSize(14);
-
-  EXPECT_TRUE(AppendToFile(base::FilePath("messages"), "1st\n"));
-  FetchFromSource();
-  EXPECT_EQ(1, num_callback_calls());
-  EXPECT_EQ("1st\n", latest_response());
-
-  // Rotate file. Make sure the rest of the old file and the contents of the new
-  // file are both read.
-  EXPECT_TRUE(AppendToFile(base::FilePath("messages"), "More\n"));
-  EXPECT_TRUE(
-      RotateFile(base::FilePath("messages"), base::FilePath("messages.1")));
-  EXPECT_TRUE(AppendToFile(base::FilePath("messages"), "2nd file\n"));
-  EXPECT_TRUE(
-      AppendToFile(base::FilePath("messages"), "More data in 2nd file\n"));
-
-  FetchFromSource();
-  EXPECT_EQ(2, num_callback_calls());
-  EXPECT_EQ("<earlier logs truncated>\n<partial line>a in 2nd file\n",
-            latest_response());
-
-  // Rotate again, but this time omit the newline before rotating.
-  EXPECT_TRUE(AppendToFile(base::FilePath("messages"), "Start ... "));
-  EXPECT_TRUE(
-      RotateFile(base::FilePath("messages"), base::FilePath("messages.1")));
-  EXPECT_TRUE(AppendToFile(base::FilePath("messages"),
-                           "ended here but is a long line\n"));
-  // Partial line counted against max read size.
-  EXPECT_TRUE(AppendToFile(base::FilePath("messages"), "partial"));
-
-  FetchFromSource();
-  EXPECT_EQ(3, num_callback_calls());
-  EXPECT_EQ("<earlier logs truncated>\n<partial line>g line\n",
-            latest_response());
-}
-
-TEST_F(SingleLogFileLogSourceTest, ReadOverMaxReadSizeBeforeAndAfterRotate) {
-  InitializeSource(SingleLogFileLogSource::SupportedSource::kMessages);
-  SetMaxReadSize(14);
-
-  EXPECT_TRUE(AppendToFile(base::FilePath("messages"), "1st log file\n"));
-  FetchFromSource();
-  EXPECT_EQ(1, num_callback_calls());
-  EXPECT_EQ("1st log file\n", latest_response());
-
-  EXPECT_TRUE(
-      AppendToFile(base::FilePath("messages"), "Exceeds max read size 1\n"));
-  EXPECT_TRUE(
-      RotateFile(base::FilePath("messages"), base::FilePath("messages.1")));
-  EXPECT_TRUE(AppendToFile(base::FilePath("messages"), "2nd file\n"));
-  EXPECT_TRUE(
-      AppendToFile(base::FilePath("messages"), "Exceeds max read size 2\n"));
-  FetchFromSource();
-  EXPECT_EQ(2, num_callback_calls());
-  EXPECT_EQ("<earlier logs truncated>\n<partial line>x read size 2\n",
-            latest_response());
-}
-
 TEST_F(SingleLogFileLogSourceTest, LongPartialLineEventuallySkipped) {
   InitializeSource(SingleLogFileLogSource::SupportedSource::kMessages);
   SetMaxReadSize(14);
diff --git a/chrome/browser/autofill/android/personal_data_manager_android.cc b/chrome/browser/autofill/android/personal_data_manager_android.cc
index 93f0ee7..4d2592b 100644
--- a/chrome/browser/autofill/android/personal_data_manager_android.cc
+++ b/chrome/browser/autofill/android/personal_data_manager_android.cc
@@ -356,6 +356,7 @@
                   Java_AutofillProfile_getEmailAddress(env, jprofile));
   profile->set_language_code(ConvertJavaStringToUTF8(
       Java_AutofillProfile_getLanguageCode(env, jprofile)));
+  profile->FinalizeAfterImport();
 }
 
 jboolean PersonalDataManagerAndroid::IsDataLoaded(
diff --git a/chrome/browser/autofill/android/save_address_profile_prompt_controller_unittest.cc b/chrome/browser/autofill/android/save_address_profile_prompt_controller_unittest.cc
index 16ee824e..c4d5997 100644
--- a/chrome/browser/autofill/android/save_address_profile_prompt_controller_unittest.cc
+++ b/chrome/browser/autofill/android/save_address_profile_prompt_controller_unittest.cc
@@ -51,13 +51,13 @@
   }
 
   // Profile with raw data as it is returned from Java.
-  AutofillProfile GetFullProfileNotFinalizedNoStatus() {
+  AutofillProfile GetFullProfileNoStatus() {
     AutofillProfile profile(base::GenerateGUID(), test::kEmptyOrigin);
     profile.SetRawInfo(NAME_FULL, u"Mona J. Liza");
     test::SetProfileInfo(&profile, "", "", "", "email@example.com",
                          "Company Inc.", "33 Narrow Street", "Apt 42",
                          "Playa Vista", "LA", "12345", "US", "13105551234",
-                         /*finalize=*/false,
+                         /*finalize=*/true,
                          structured_address::VerificationStatus::kNoStatus);
     return profile;
   }
@@ -138,7 +138,7 @@
        ShouldInvokeSaveCallbackWhenUserAcceptsAfterEditingTheProfile) {
   controller_->DisplayPrompt();
 
-  AutofillProfile edited_profile = GetFullProfileNotFinalizedNoStatus();
+  AutofillProfile edited_profile = GetFullProfileNoStatus();
   EXPECT_CALL(decision_callback_,
               Run(AutofillClient::SaveAddressProfileOfferUserDecision::kEdited,
                   edited_profile));
@@ -196,7 +196,7 @@
        ShouldRefreshContentAfterEditingTheProfile) {
   controller_->DisplayPrompt();
 
-  AutofillProfile edited_profile = GetFullProfileNotFinalizedNoStatus();
+  AutofillProfile edited_profile = GetFullProfileNoStatus();
   base::android::ScopedJavaLocalRef<jobject> edited_profile_java =
       PersonalDataManagerAndroid::CreateJavaProfileFromNative(env_,
                                                               edited_profile);
diff --git a/chrome/browser/autofill/manual_filling_controller.h b/chrome/browser/autofill/manual_filling_controller.h
index 8c581f2b..03a0f70e 100644
--- a/chrome/browser/autofill/manual_filling_controller.h
+++ b/chrome/browser/autofill/manual_filling_controller.h
@@ -119,6 +119,12 @@
   virtual void OnToggleChanged(autofill::AccessoryAction toggled_action,
                                bool enabled) const = 0;
 
+  // Called by the UI to explicitly request a new sheet of the given type.
+  virtual void RequestAccessorySheet(
+      autofill::AccessoryTabType tab_type,
+      base::OnceCallback<void(const autofill::AccessorySheetData&)>
+          callback) = 0;
+
   // -----------------
   // Member accessors:
   // -----------------
diff --git a/chrome/browser/autofill/manual_filling_controller_impl.cc b/chrome/browser/autofill/manual_filling_controller_impl.cc
index 8e759f0..da10fe10 100644
--- a/chrome/browser/autofill/manual_filling_controller_impl.cc
+++ b/chrome/browser/autofill/manual_filling_controller_impl.cc
@@ -214,6 +214,24 @@
   controller->OnToggleChanged(toggled_action, enabled);
 }
 
+void ManualFillingControllerImpl::RequestAccessorySheet(
+    autofill::AccessoryTabType tab_type,
+    base::OnceCallback<void(const autofill::AccessorySheetData&)> callback) {
+  // TODO(crbug.com/1169167): Consider to execute this async to reduce jank.
+  base::Optional<AccessorySheetData> sheet =
+      GetControllerForTabType(tab_type)->GetSheetData();
+  // After they were loaded, all currently existing sheet types always return a
+  // value and will always result in a called callback.
+  // The only case where they are not available is before their first load (so
+  // if a user entered a tab but didn't focus any fields yet). In that case, the
+  // update is unnecessary since the first focus will push the correct sheet.
+  // TODO(crbug.com/1169167): Consider sending a null or default sheet to cover
+  // future cases where we can't rely on a sheet always being available.
+  if (sheet.has_value()) {
+    std::move(callback).Run(sheet.value());
+  }
+}
+
 gfx::NativeView ManualFillingControllerImpl::container_view() const {
   return web_contents_->GetNativeView();
 }
diff --git a/chrome/browser/autofill/manual_filling_controller_impl.h b/chrome/browser/autofill/manual_filling_controller_impl.h
index c743849..79654a8 100644
--- a/chrome/browser/autofill/manual_filling_controller_impl.h
+++ b/chrome/browser/autofill/manual_filling_controller_impl.h
@@ -8,6 +8,7 @@
 #include <memory>
 #include <string>
 
+#include "base/callback_forward.h"
 #include "base/containers/flat_set.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
@@ -50,6 +51,11 @@
       autofill::AccessoryAction selected_action) const override;
   void OnToggleChanged(autofill::AccessoryAction toggled_action,
                        bool enabled) const override;
+  void RequestAccessorySheet(
+      autofill::AccessoryTabType tab_type,
+      base::OnceCallback<void(const autofill::AccessorySheetData&)> callback)
+      override;
+
   gfx::NativeView container_view() const override;
 
   // Returns a weak pointer for this object.
diff --git a/chrome/browser/autofill/mock_manual_filling_controller.h b/chrome/browser/autofill/mock_manual_filling_controller.h
index bdc8d5b..35d101e 100644
--- a/chrome/browser/autofill/mock_manual_filling_controller.h
+++ b/chrome/browser/autofill/mock_manual_filling_controller.h
@@ -32,6 +32,10 @@
   MOCK_CONST_METHOD2(OnToggleChanged,
                      void(autofill::AccessoryAction toggled_action,
                           bool enabled));
+  MOCK_METHOD2(
+      RequestAccessorySheet,
+      void(autofill::AccessoryTabType,
+           base::OnceCallback<void(const autofill::AccessorySheetData&)>));
   MOCK_CONST_METHOD0(container_view, gfx::NativeView());
 
  private:
diff --git a/chrome/browser/chrome_navigation_browsertest.cc b/chrome/browser/chrome_navigation_browsertest.cc
index ddd3c739..0498b11 100644
--- a/chrome/browser/chrome_navigation_browsertest.cc
+++ b/chrome/browser/chrome_navigation_browsertest.cc
@@ -1902,6 +1902,13 @@
         {features::kSitePerProcess});
   }
 
+  void StartIsolatingSite(Profile* profile, const GURL& url) {
+    content::SiteInstance::StartIsolatingSite(
+        profile, url,
+        content::ChildProcessSecurityPolicy::IsolatedOriginSource::
+            USER_TRIGGERED);
+  }
+
   std::vector<std::string> GetSavedIsolatedSites() {
     return GetSavedIsolatedSites(browser()->profile());
   }
@@ -2095,9 +2102,9 @@
 
   // Isolate saved.com and saved2.com persistently.
   GURL saved_url(embedded_test_server()->GetURL("saved.com", "/title1.html"));
-  content::SiteInstance::StartIsolatingSite(browser()->profile(), saved_url);
+  StartIsolatingSite(browser()->profile(), saved_url);
   GURL saved2_url(embedded_test_server()->GetURL("saved2.com", "/title1.html"));
-  content::SiteInstance::StartIsolatingSite(browser()->profile(), saved2_url);
+  StartIsolatingSite(browser()->profile(), saved2_url);
 
   // Check that saved.com utilizes a dedicated process in future navigations.
   // Open a new tab to force creation of a new BrowsingInstance.
@@ -2146,9 +2153,9 @@
 IN_PROC_BROWSER_TEST_F(SiteIsolationForPasswordSitesBrowserTest,
                        IsolatedSiteIsSavedOnlyOnce) {
   GURL saved_url(embedded_test_server()->GetURL("saved.com", "/title1.html"));
-  content::SiteInstance::StartIsolatingSite(browser()->profile(), saved_url);
-  content::SiteInstance::StartIsolatingSite(browser()->profile(), saved_url);
-  content::SiteInstance::StartIsolatingSite(browser()->profile(), saved_url);
+  StartIsolatingSite(browser()->profile(), saved_url);
+  StartIsolatingSite(browser()->profile(), saved_url);
+  StartIsolatingSite(browser()->profile(), saved_url);
   EXPECT_THAT(GetSavedIsolatedSites(),
               UnorderedElementsAre("http://saved.com"));
 }
@@ -2160,7 +2167,7 @@
                        IncognitoWithIsolatedSites) {
   // Isolate saved.com and verify it's been saved to disk.
   GURL saved_url(embedded_test_server()->GetURL("saved.com", "/title1.html"));
-  content::SiteInstance::StartIsolatingSite(browser()->profile(), saved_url);
+  StartIsolatingSite(browser()->profile(), saved_url);
   EXPECT_THAT(GetSavedIsolatedSites(),
               UnorderedElementsAre("http://saved.com"));
 
@@ -2183,7 +2190,7 @@
   // process, and the site is not persisted for either the main or incognito
   // profiles.
   GURL foo_url(embedded_test_server()->GetURL("foo.com", "/title1.html"));
-  content::SiteInstance::StartIsolatingSite(incognito->profile(), foo_url);
+  StartIsolatingSite(incognito->profile(), foo_url);
 
   AddBlankTabAndShow(incognito);
   ui_test_utils::NavigateToURL(incognito, foo_url);
@@ -2215,7 +2222,7 @@
 
   // Isolate saved.com and verify it's been saved to disk.
   GURL saved_url(https_server.GetURL("saved.com", "/clear_site_data.html"));
-  content::SiteInstance::StartIsolatingSite(browser()->profile(), saved_url);
+  StartIsolatingSite(browser()->profile(), saved_url);
   EXPECT_THAT(GetSavedIsolatedSites(),
               UnorderedElementsAre("https://saved.com"));
 
diff --git a/chrome/browser/chromeos/extensions/file_manager/private_api_mount.h b/chrome/browser/chromeos/extensions/file_manager/private_api_mount.h
index 2e9ac39..e2697276 100644
--- a/chrome/browser/chromeos/extensions/file_manager/private_api_mount.h
+++ b/chrome/browser/chromeos/extensions/file_manager/private_api_mount.h
@@ -7,7 +7,6 @@
 #ifndef CHROME_BROWSER_CHROMEOS_EXTENSIONS_FILE_MANAGER_PRIVATE_API_MOUNT_H_
 #define CHROME_BROWSER_CHROMEOS_EXTENSIONS_FILE_MANAGER_PRIVATE_API_MOUNT_H_
 
-#include "base/files/file_path.h"
 #include "chrome/browser/chromeos/extensions/file_manager/private_api_base.h"
 #include "components/drive/file_errors.h"
 
diff --git a/chrome/browser/chromeos/extensions/install_limiter.h b/chrome/browser/chromeos/extensions/install_limiter.h
index 16acd3e..9134b6f 100644
--- a/chrome/browser/chromeos/extensions/install_limiter.h
+++ b/chrome/browser/chromeos/extensions/install_limiter.h
@@ -11,7 +11,6 @@
 
 #include "base/compiler_specific.h"
 #include "base/containers/queue.h"
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
diff --git a/chrome/browser/chromeos/extensions/quick_unlock_private/quick_unlock_private_api_unittest.cc b/chrome/browser/chromeos/extensions/quick_unlock_private/quick_unlock_private_api_unittest.cc
index ab2a250..70db3fb0 100644
--- a/chrome/browser/chromeos/extensions/quick_unlock_private/quick_unlock_private_api_unittest.cc
+++ b/chrome/browser/chromeos/extensions/quick_unlock_private/quick_unlock_private_api_unittest.cc
@@ -324,9 +324,8 @@
     // Extract the results.
     QuickUnlockModeList modes;
 
-    base::ListValue* list = nullptr;
-    EXPECT_TRUE(result->GetAsList(&list));
-    for (const base::Value& value : *list) {
+    EXPECT_TRUE(result->is_list());
+    for (const base::Value& value : result->GetList()) {
       std::string mode;
       EXPECT_TRUE(value.GetAsString(&mode));
       modes.push_back(quick_unlock_private::ParseQuickUnlockMode(mode));
@@ -343,9 +342,8 @@
 
     QuickUnlockModeList modes;
 
-    base::ListValue* list = nullptr;
-    EXPECT_TRUE(result->GetAsList(&list));
-    for (const base::Value& value : *list) {
+    EXPECT_TRUE(result->is_list());
+    for (const base::Value& value : result->GetList()) {
       std::string mode;
       EXPECT_TRUE(value.GetAsString(&mode));
       modes.push_back(quick_unlock_private::ParseQuickUnlockMode(mode));
diff --git a/chrome/browser/chromeos/file_system_provider/fileapi/file_stream_reader.h b/chrome/browser/chromeos/file_system_provider/fileapi/file_stream_reader.h
index f8efd08..f632f5b 100644
--- a/chrome/browser/chromeos/file_system_provider/fileapi/file_stream_reader.h
+++ b/chrome/browser/chromeos/file_system_provider/fileapi/file_stream_reader.h
@@ -9,7 +9,6 @@
 
 #include <memory>
 
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
diff --git a/chrome/browser/chromeos/file_system_provider/fileapi/file_stream_writer.h b/chrome/browser/chromeos/file_system_provider/fileapi/file_stream_writer.h
index 8ed9e15..5bbf4e5 100644
--- a/chrome/browser/chromeos/file_system_provider/fileapi/file_stream_writer.h
+++ b/chrome/browser/chromeos/file_system_provider/fileapi/file_stream_writer.h
@@ -8,7 +8,6 @@
 #include <stdint.h>
 
 #include "base/files/file.h"
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
diff --git a/chrome/browser/chromeos/file_system_provider/registry_interface.h b/chrome/browser/chromeos/file_system_provider/registry_interface.h
index 4ca3790..d286dd63 100644
--- a/chrome/browser/chromeos/file_system_provider/registry_interface.h
+++ b/chrome/browser/chromeos/file_system_provider/registry_interface.h
@@ -9,7 +9,6 @@
 #include <string>
 #include <vector>
 
-#include "base/files/file_path.h"
 #include "chrome/browser/chromeos/file_system_provider/provided_file_system_info.h"
 #include "chrome/browser/chromeos/file_system_provider/watcher.h"
 
diff --git a/chrome/browser/chromeos/file_system_provider/service.h b/chrome/browser/chromeos/file_system_provider/service.h
index cee8f65..bb99dd5 100644
--- a/chrome/browser/chromeos/file_system_provider/service.h
+++ b/chrome/browser/chromeos/file_system_provider/service.h
@@ -12,7 +12,6 @@
 #include <vector>
 
 #include "base/files/file.h"
-#include "base/files/file_path.h"
 #include "base/gtest_prod_util.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
diff --git a/chrome/browser/chromeos/fileapi/recent_model.h b/chrome/browser/chromeos/fileapi/recent_model.h
index 736f86d..b3dc3d8 100644
--- a/chrome/browser/chromeos/fileapi/recent_model.h
+++ b/chrome/browser/chromeos/fileapi/recent_model.h
@@ -10,7 +10,6 @@
 #include <vector>
 
 #include "base/callback_forward.h"
-#include "base/files/file_path.h"
 #include "base/gtest_prod_util.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
diff --git a/chrome/browser/chromeos/policy/arc_app_install_event_logger.h b/chrome/browser/chromeos/policy/arc_app_install_event_logger.h
index 17c7ba3..e81069d 100644
--- a/chrome/browser/chromeos/policy/arc_app_install_event_logger.h
+++ b/chrome/browser/chromeos/policy/arc_app_install_event_logger.h
@@ -9,7 +9,6 @@
 #include <set>
 #include <string>
 
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "chrome/browser/ash/arc/policy/arc_policy_bridge.h"
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_reporting_manager.cc b/chrome/browser/chromeos/policy/dlp/dlp_reporting_manager.cc
index 125477f..bfb6edf 100644
--- a/chrome/browser/chromeos/policy/dlp/dlp_reporting_manager.cc
+++ b/chrome/browser/chromeos/policy/dlp/dlp_reporting_manager.cc
@@ -53,25 +53,61 @@
   }
 }
 
-DlpPolicyEvent* CreateDlpPolicyEvent(const std::string& src_pattern,
-                                     DlpRulesManager::Level level,
-                                     DlpRulesManager::Restriction restriction) {
-  DlpPolicyEvent* event = new DlpPolicyEvent();
+DlpPolicyEvent CreateDlpPolicyEvent(const std::string& src_pattern,
+                                    DlpRulesManager::Restriction restriction,
+                                    DlpRulesManager::Level level) {
+  DlpPolicyEvent event;
 
-  DlpPolicyEventSource* event_source = new DlpPolicyEventSource();
+  DlpPolicyEventSource* event_source = new DlpPolicyEventSource;
   event_source->set_url(src_pattern);
-  event->set_allocated_source(event_source);
+  event.set_allocated_source(event_source);
 
-  // TODO(1187479, marcgrimme): add proper destination as soon as available
-  // DlpPolicyEventDestination* event_destination = new
-  // DlpPolicyEventDestination();
-  // event_destination->set_component(DlpPolicyEventDestination_Component_UNDEFINED_COMPONENT);
-  // event->set_allocated_destination(event_destination);
-
-  event->set_restriction(
+  event.set_restriction(
       DlpRulesManagerRestriction2DlpEventRestriction(restriction));
-  event->set_mode(DlpRulesManagerLevel2DlpEventMode(level));
-  event->set_timestamp(base::Time::Now().ToTimeT());
+  event.set_mode(DlpRulesManagerLevel2DlpEventMode(level));
+  event.set_timestamp(base::Time::Now().ToTimeT());
+
+  return event;
+}
+
+DlpPolicyEvent CreateDlpPolicyEvent(const std::string& src_pattern,
+                                    const std::string& dst_pattern,
+                                    DlpRulesManager::Restriction restriction,
+                                    DlpRulesManager::Level level) {
+  auto event = CreateDlpPolicyEvent(src_pattern, restriction, level);
+
+  DlpPolicyEventDestination* event_destination = new DlpPolicyEventDestination;
+  event_destination->set_url(src_pattern);
+  event.set_allocated_destination(event_destination);
+
+  return event;
+}
+
+DlpPolicyEvent CreateDlpPolicyEvent(const std::string& src_pattern,
+                                    DlpRulesManager::Component dst_component,
+                                    DlpRulesManager::Restriction restriction,
+                                    DlpRulesManager::Level level) {
+  auto event = CreateDlpPolicyEvent(src_pattern, restriction, level);
+
+  DlpPolicyEventDestination* event_destination = new DlpPolicyEventDestination;
+  switch (dst_component) {
+    case (DlpRulesManager::Component::kArc):
+      event_destination->set_component(DlpPolicyEventDestination_Component_ARC);
+      break;
+    case (DlpRulesManager::Component::kCrostini):
+      event_destination->set_component(
+          DlpPolicyEventDestination_Component_CROSTINI);
+      break;
+    case (DlpRulesManager::Component::kPluginVm):
+      event_destination->set_component(
+          DlpPolicyEventDestination_Component_PLUGIN_VM);
+      break;
+    case (DlpRulesManager::Component::kUnknownComponent):
+      event_destination->set_component(
+          DlpPolicyEventDestination_Component_UNDEFINED_COMPONENT);
+      break;
+  }
+  event.set_allocated_destination(event_destination);
 
   return event;
 }
@@ -95,6 +131,38 @@
 void DlpReportingManager::ReportEvent(const std::string& src_pattern,
                                       DlpRulesManager::Restriction restriction,
                                       DlpRulesManager::Level level) const {
+  auto event = CreateDlpPolicyEvent(
+      src_pattern, DlpRulesManager::Restriction::kPrinting, level);
+  ReportEvent(std::move(event));
+}
+
+void DlpReportingManager::ReportEvent(const std::string& src_pattern,
+                                      const std::string& dst_pattern,
+                                      DlpRulesManager::Restriction restriction,
+                                      DlpRulesManager::Level level) const {
+  auto event =
+      CreateDlpPolicyEvent(src_pattern, dst_pattern, restriction, level);
+  ReportEvent(std::move(event));
+}
+
+void DlpReportingManager::ReportEvent(
+    const std::string& src_pattern,
+    const DlpRulesManager::Component dst_component,
+    DlpRulesManager::Restriction restriction,
+    DlpRulesManager::Level level) const {
+  auto event =
+      CreateDlpPolicyEvent(src_pattern, dst_component, restriction, level);
+  ReportEvent(std::move(event));
+}
+
+void DlpReportingManager::OnEventEnqueued(reporting::Status status) const {
+  if (!status.ok()) {
+    VLOG(1) << "Could not enqueue event to DLP reporting queue because of "
+            << status;
+  }
+}
+
+void DlpReportingManager::ReportEvent(DlpPolicyEvent event) const {
   // TODO(1187506, marcgrimme) Refactor to handle gracefully with user
   // interaction when queue is not ready.
   if (!report_queue_.get()) {
@@ -104,14 +172,8 @@
   }
   reporting::ReportQueue::EnqueueCallback callback = base::BindOnce(
       &DlpReportingManager::OnEventEnqueued, base::Unretained(this));
-  report_queue_->Enqueue(CreateDlpPolicyEvent(src_pattern, level, restriction),
-                         reporting::Priority::IMMEDIATE, std::move(callback));
+  report_queue_->Enqueue(&event, reporting::Priority::IMMEDIATE,
+                         std::move(callback));
 }
 
-void DlpReportingManager::OnEventEnqueued(reporting::Status status) const {
-  if (!status.ok()) {
-    VLOG(1) << "Could not enqueue event to DLP reporting queue because of "
-            << status;
-  }
-}
 }  // namespace policy
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_reporting_manager.h b/chrome/browser/chromeos/policy/dlp/dlp_reporting_manager.h
index baacd78..d9e989e 100644
--- a/chrome/browser/chromeos/policy/dlp/dlp_reporting_manager.h
+++ b/chrome/browser/chromeos/policy/dlp/dlp_reporting_manager.h
@@ -16,9 +16,17 @@
 namespace policy {
 // helper function to create DlpPolicyEvents to be enqueued or used to test
 // against.
-DlpPolicyEvent* CreateDlpPolicyEvent(const std::string& src_pattern,
-                                     DlpRulesManager::Level level,
-                                     DlpRulesManager::Restriction restriction);
+DlpPolicyEvent CreateDlpPolicyEvent(const std::string& src_pattern,
+                                    DlpRulesManager::Restriction restriction,
+                                    DlpRulesManager::Level level);
+DlpPolicyEvent CreateDlpPolicyEvent(const std::string& src_pattern,
+                                    const std::string& dst_pattern,
+                                    DlpRulesManager::Restriction restriction,
+                                    DlpRulesManager::Level level);
+DlpPolicyEvent CreateDlpPolicyEvent(const std::string& src_pattern,
+                                    DlpRulesManager::Component dst_component,
+                                    DlpRulesManager::Restriction restriction,
+                                    DlpRulesManager::Level level);
 
 // DlpReportingManger controls the coordination and setup towards the reporting
 // pipeline so that other areas of the DLP functionality don't need to know
@@ -40,6 +48,14 @@
   void ReportEvent(const std::string& src_pattern,
                    DlpRulesManager::Restriction restriction,
                    DlpRulesManager::Level level) const;
+  void ReportEvent(const std::string& src_pattern,
+                   const std::string& dst_pattern,
+                   DlpRulesManager::Restriction restriction,
+                   DlpRulesManager::Level level) const;
+  void ReportEvent(const std::string& src_pattern,
+                   DlpRulesManager::Component dst_component,
+                   DlpRulesManager::Restriction restriction,
+                   DlpRulesManager::Level level) const;
 
   ReportQueueSetterCallback GetReportQueueSetter();
 
@@ -50,6 +66,8 @@
 
   void OnEventEnqueued(reporting::Status status) const;
 
+  void ReportEvent(DlpPolicyEvent event) const;
+
   std::unique_ptr<reporting::ReportQueue> report_queue_;
 
   base::WeakPtrFactory<DlpReportingManager> weak_factory_{this};
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_reporting_manager_test_helper.cc b/chrome/browser/chromeos/policy/dlp/dlp_reporting_manager_test_helper.cc
index 3a2dab03..2d2df24 100644
--- a/chrome/browser/chromeos/policy/dlp/dlp_reporting_manager_test_helper.cc
+++ b/chrome/browser/chromeos/policy/dlp/dlp_reporting_manager_test_helper.cc
@@ -45,9 +45,9 @@
 
 DlpPolicyEvent CreatePrintingRestrictedDlpEvent(
     const std::string& src_pattern) {
-  return *policy::CreateDlpPolicyEvent(
-      src_pattern, policy::DlpRulesManager::Level::kBlock,
-      policy::DlpRulesManager::Restriction::kPrinting);
+  return policy::CreateDlpPolicyEvent(
+      src_pattern, policy::DlpRulesManager::Restriction::kPrinting,
+      policy::DlpRulesManager::Level::kBlock);
 }
 
 void SetReportQueueForReportingManager(policy::DlpReportingManager* manager,
diff --git a/chrome/browser/chromeos/power/freezer_cgroup_process_manager.h b/chrome/browser/chromeos/power/freezer_cgroup_process_manager.h
index 7dc4e34..eebe82f 100644
--- a/chrome/browser/chromeos/power/freezer_cgroup_process_manager.h
+++ b/chrome/browser/chromeos/power/freezer_cgroup_process_manager.h
@@ -9,7 +9,6 @@
 #include <string>
 
 #include "base/callback.h"
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/process/process_handle.h"
diff --git a/chrome/browser/download/android/download_manager_service.h b/chrome/browser/download/android/download_manager_service.h
index 67ec75c..f4033f5 100644
--- a/chrome/browser/download/android/download_manager_service.h
+++ b/chrome/browser/download/android/download_manager_service.h
@@ -11,7 +11,6 @@
 
 #include "base/android/scoped_java_ref.h"
 #include "base/callback.h"
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/singleton.h"
 #include "base/scoped_observer.h"
diff --git a/chrome/browser/download/deferred_client_wrapper.h b/chrome/browser/download/deferred_client_wrapper.h
index ad7a2a4..33ac695 100644
--- a/chrome/browser/download/deferred_client_wrapper.h
+++ b/chrome/browser/download/deferred_client_wrapper.h
@@ -9,7 +9,6 @@
 #include <vector>
 
 #include "base/callback.h"
-#include "base/files/file_path.h"
 #include "base/memory/weak_ptr.h"
 #include "build/build_config.h"
 #include "components/download/public/background_service/client.h"
diff --git a/chrome/browser/extensions/api/storage/managed_value_store_cache.h b/chrome/browser/extensions/api/storage/managed_value_store_cache.h
index 091a394..a4d0b43 100644
--- a/chrome/browser/extensions/api/storage/managed_value_store_cache.h
+++ b/chrome/browser/extensions/api/storage/managed_value_store_cache.h
@@ -10,7 +10,6 @@
 #include <string>
 
 #include "base/compiler_specific.h"
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "components/policy/core/common/policy_namespace.h"
diff --git a/chrome/browser/extensions/api/storage/sync_storage_backend.h b/chrome/browser/extensions/api/storage/sync_storage_backend.h
index 165f545..81cbed3 100644
--- a/chrome/browser/extensions/api/storage/sync_storage_backend.h
+++ b/chrome/browser/extensions/api/storage/sync_storage_backend.h
@@ -11,7 +11,6 @@
 #include <string>
 
 #include "base/compiler_specific.h"
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "components/sync/model/syncable_service.h"
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index 91fdf018..7e184f8 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -1471,6 +1471,11 @@
     "expiry_milestone": 94
   },
   {
+    "name": "enable-compositing-based-throttling",
+    "owners": [ "yjliu", "chromeos-perf@google.com"],
+    "expiry_milestone": 98
+  },
+  {
     "name": "enable-conditional-tabstrip",
     "owners": [ "memex-team@google.com" ],
     "expiry_milestone": 90
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index 0a1d4f03..6515792 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -463,6 +463,11 @@
     "popular Chrome features.";
 #endif
 
+const char kCompositingBasedThrottling[] = "Compositing-based Throttling";
+const char kCompositingBasedThrottlingDescription[] =
+    "Enables compositing-based throttling to throttle appropriate frame sinks "
+    "that do not need to be refreshed at high fps.";
+
 const char kDarkLightTestName[] = "Dark/light mode of system UI";
 const char kDarkLightTestDescription[] =
     "Enables the dark/light mode of system UI, which includes shelf, launcher, "
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index 194cc60..bf3396d 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -275,6 +275,9 @@
 extern const char kChromeTipsInMainMenuDescription[];
 #endif
 
+extern const char kCompositingBasedThrottling[];
+extern const char kCompositingBasedThrottlingDescription[];
+
 extern const char kDarkLightTestName[];
 extern const char kDarkLightTestDescription[];
 
diff --git a/chrome/browser/login_detection/login_detection_browsertest.cc b/chrome/browser/login_detection/login_detection_browsertest.cc
index 9994439..aedeb44 100644
--- a/chrome/browser/login_detection/login_detection_browsertest.cc
+++ b/chrome/browser/login_detection/login_detection_browsertest.cc
@@ -75,8 +75,11 @@
   ui_test_utils::NavigateToURL(browser(), test_url);
   ExpectLoginDetectionTypeMetric(LoginDetectionType::kNoLogin);
 
-  // Use site-isolaiton to save the site to manual passworded list.
-  content::SiteInstance::StartIsolatingSite(browser()->profile(), test_url);
+  // Use site isolation to save the site to manual passworded list.
+  content::SiteInstance::StartIsolatingSite(
+      browser()->profile(), test_url,
+      content::ChildProcessSecurityPolicy::IsolatedOriginSource::
+          USER_TRIGGERED);
 
   // Subsequent navigation be detected as login.
   ResetHistogramTester();
diff --git a/chrome/browser/media/library_cdm_test_helper.h b/chrome/browser/media/library_cdm_test_helper.h
index 2570648..9809656 100644
--- a/chrome/browser/media/library_cdm_test_helper.h
+++ b/chrome/browser/media/library_cdm_test_helper.h
@@ -5,8 +5,6 @@
 #ifndef CHROME_BROWSER_MEDIA_LIBRARY_CDM_TEST_HELPER_H_
 #define CHROME_BROWSER_MEDIA_LIBRARY_CDM_TEST_HELPER_H_
 
-#include "base/files/file_path.h"
-
 namespace base {
 class CommandLine;
 class Token;
diff --git a/chrome/browser/media/router/discovery/dial/device_description_fetcher.cc b/chrome/browser/media/router/discovery/dial/device_description_fetcher.cc
index 9b2cbd81..64f416ef 100644
--- a/chrome/browser/media/router/discovery/dial/device_description_fetcher.cc
+++ b/chrome/browser/media/router/discovery/dial/device_description_fetcher.cc
@@ -11,6 +11,7 @@
 #include "chrome/browser/media/router/discovery/dial/dial_device_data.h"
 #include "net/base/ip_address.h"
 #include "net/http/http_response_headers.h"
+#include "services/network/public/mojom/url_response_head.mojom.h"
 
 constexpr char kApplicationUrlHeaderName[] = "Application-URL";
 
diff --git a/chrome/browser/media/router/discovery/dial/dial_url_fetcher.h b/chrome/browser/media/router/discovery/dial/dial_url_fetcher.h
index 300cdc7..8d8cf20 100644
--- a/chrome/browser/media/router/discovery/dial/dial_url_fetcher.h
+++ b/chrome/browser/media/router/discovery/dial/dial_url_fetcher.h
@@ -11,9 +11,7 @@
 
 #include "base/callback.h"
 #include "base/optional.h"
-#include "services/network/public/mojom/url_loader_factory.mojom.h"
 #include "services/network/public/mojom/url_response_head.mojom-forward.h"
-#include "services/network/public/mojom/url_response_head.mojom.h"
 #include "url/gurl.h"
 
 namespace net {
diff --git a/chrome/browser/media/router/providers/dial/dial_activity_manager.cc b/chrome/browser/media/router/providers/dial/dial_activity_manager.cc
index 3faece9..ea6a8ead 100644
--- a/chrome/browser/media/router/providers/dial/dial_activity_manager.cc
+++ b/chrome/browser/media/router/providers/dial/dial_activity_manager.cc
@@ -10,6 +10,7 @@
 #include "chrome/browser/media/router/providers/dial/dial_internal_message_util.h"
 #include "components/media_router/common/media_source.h"
 #include "net/base/url_util.h"
+#include "services/network/public/mojom/url_response_head.mojom.h"
 
 namespace media_router {
 
diff --git a/chrome/browser/nearby_sharing/nearby_sharing_service.h b/chrome/browser/nearby_sharing/nearby_sharing_service.h
index 54483ee..b64e7531 100644
--- a/chrome/browser/nearby_sharing/nearby_sharing_service.h
+++ b/chrome/browser/nearby_sharing/nearby_sharing_service.h
@@ -10,7 +10,6 @@
 #include <vector>
 
 #include "base/callback.h"
-#include "base/files/file_path.h"
 #include "chrome/browser/nearby_sharing/nearby_share_settings.h"
 #include "chrome/browser/nearby_sharing/share_target_discovered_callback.h"
 #include "chrome/browser/nearby_sharing/transfer_update_callback.h"
diff --git a/chrome/browser/net/stub_resolver_config_reader.cc b/chrome/browser/net/stub_resolver_config_reader.cc
index c5c6ef4..600fb12 100644
--- a/chrome/browser/net/stub_resolver_config_reader.cc
+++ b/chrome/browser/net/stub_resolver_config_reader.cc
@@ -231,7 +231,7 @@
   if (base::IsMachineExternallyManaged())
     return true;
 #endif
-#if !defined(OS_ANDROID) && !BUILDFLAG(IS_CHROMEOS_ASH)
+#if !defined(OS_ANDROID) && !defined(OS_CHROMEOS)
   if (g_browser_process->browser_policy_connector()->HasMachineLevelPolicies())
     return true;
 #endif
diff --git a/chrome/browser/offline_pages/android/offline_page_archive_publisher_impl.h b/chrome/browser/offline_pages/android/offline_page_archive_publisher_impl.h
index 0740e4fe..890b551 100644
--- a/chrome/browser/offline_pages/android/offline_page_archive_publisher_impl.h
+++ b/chrome/browser/offline_pages/android/offline_page_archive_publisher_impl.h
@@ -9,7 +9,6 @@
 #include <string>
 
 #include "base/callback.h"
-#include "base/files/file_path.h"
 #include "components/offline_pages/core/offline_page_archive_publisher.h"
 #include "components/offline_pages/core/offline_page_item.h"
 #include "components/offline_pages/core/offline_page_types.h"
diff --git a/chrome/browser/optimization_guide/prediction/prediction_model_download_manager.h b/chrome/browser/optimization_guide/prediction/prediction_model_download_manager.h
index 405c92a..3517343 100644
--- a/chrome/browser/optimization_guide/prediction/prediction_model_download_manager.h
+++ b/chrome/browser/optimization_guide/prediction/prediction_model_download_manager.h
@@ -9,6 +9,7 @@
 #include <set>
 #include <string>
 
+#include "base/files/file_path.h"
 #include "base/memory/weak_ptr.h"
 #include "base/observer_list.h"
 #include "components/download/public/background_service/download_params.h"
diff --git a/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_controller_win.h b/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_controller_win.h
index 1183741c..f645691 100644
--- a/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_controller_win.h
+++ b/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_controller_win.h
@@ -9,7 +9,6 @@
 #include <vector>
 
 #include "base/callback.h"
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/observer_list.h"
 #include "chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_scanner_results_win.h"
diff --git a/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_dialog_controller_impl_win.h b/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_dialog_controller_impl_win.h
index 1d1ef66..695c333 100644
--- a/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_dialog_controller_impl_win.h
+++ b/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_dialog_controller_impl_win.h
@@ -8,7 +8,6 @@
 #include <memory>
 #include <set>
 
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/time/time.h"
 #include "chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_controller_win.h"
diff --git a/chrome/browser/safe_browsing/download_protection/check_file_system_access_write_request.h b/chrome/browser/safe_browsing/download_protection/check_file_system_access_write_request.h
index 276eaef5..64866b49e1 100644
--- a/chrome/browser/safe_browsing/download_protection/check_file_system_access_write_request.h
+++ b/chrome/browser/safe_browsing/download_protection/check_file_system_access_write_request.h
@@ -11,7 +11,6 @@
 #include <vector>
 
 #include "base/callback.h"
-#include "base/files/file_path.h"
 #include "base/memory/ref_counted.h"
 #include "build/build_config.h"
 #include "chrome/browser/safe_browsing/download_protection/check_client_download_request_base.h"
diff --git a/chrome/browser/safe_browsing/local_two_phase_testserver.h b/chrome/browser/safe_browsing/local_two_phase_testserver.h
index b58a108..978be0e 100644
--- a/chrome/browser/safe_browsing/local_two_phase_testserver.h
+++ b/chrome/browser/safe_browsing/local_two_phase_testserver.h
@@ -8,7 +8,6 @@
 #include <string>
 
 #include "base/compiler_specific.h"
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "net/test/embedded_test_server/embedded_test_server.h"
 #include "url/gurl.h"
diff --git a/chrome/browser/sharing_hub/sharing_hub_model.cc b/chrome/browser/sharing_hub/sharing_hub_model.cc
new file mode 100644
index 0000000..ec639fb
--- /dev/null
+++ b/chrome/browser/sharing_hub/sharing_hub_model.cc
@@ -0,0 +1,70 @@
+// 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/sharing_hub/sharing_hub_model.h"
+
+#include "chrome/app/chrome_command_ids.h"
+#include "chrome/app/vector_icons/vector_icons.h"
+#include "chrome/browser/media/router/media_router_feature.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/send_tab_to_self/send_tab_to_self_util.h"
+#include "chrome/grit/generated_resources.h"
+#include "components/vector_icons/vector_icons.h"
+#include "content/public/browser/browser_context.h"
+
+namespace sharing_hub {
+
+SharingHubModel::SharingHubModel(content::BrowserContext* context)
+    : context_(context) {
+  PopulateFirstPartyActions();
+  PopulateThirdPartyActions();
+}
+
+SharingHubModel::~SharingHubModel() = default;
+
+void SharingHubModel::GetActionList(content::WebContents* web_contents,
+                                    std::vector<SharingHubAction>* list) {
+  for (const auto& action : action_list_) {
+    if (action.command_id == IDC_SEND_TAB_TO_SELF) {
+      if (DoShowSendTabToSelfForWebContents(web_contents)) {
+        list->push_back(action);
+      }
+    } else {
+      list->push_back(action);
+    }
+  }
+}
+
+void SharingHubModel::PopulateFirstPartyActions() {
+  action_list_.push_back(
+      {IDC_COPY_URL, IDS_SHARING_HUB_COPY_LINK_LABEL, kCopyIcon, true});
+
+  action_list_.push_back({IDC_QRCODE_GENERATOR,
+                          IDS_OMNIBOX_QRCODE_GENERATOR_ICON_LABEL,
+                          kQrcodeGeneratorIcon, true});
+
+  action_list_.push_back({IDC_SEND_TAB_TO_SELF,
+                          IDS_CONTEXT_MENU_SEND_TAB_TO_SELF, kSendTabToSelfIcon,
+                          true});
+
+  // TODO(1186843): Add save page icon.
+  action_list_.push_back(
+      {IDC_SAVE_PAGE, IDS_SHARING_HUB_SAVE_PAGE_LABEL, kCopyIcon, true});
+
+  if (media_router::MediaRouterEnabled(context_)) {
+    action_list_.push_back({IDC_ROUTE_MEDIA, IDS_SHARING_HUB_MEDIA_ROUTER_LABEL,
+                            vector_icons::kMediaRouterIdleIcon, true});
+  }
+}
+
+void SharingHubModel::PopulateThirdPartyActions() {
+  // TODO(1186833): add third party actions
+}
+
+bool SharingHubModel::DoShowSendTabToSelfForWebContents(
+    content::WebContents* web_contents) {
+  return send_tab_to_self::ShouldOfferFeature(web_contents);
+}
+
+}  // namespace sharing_hub
diff --git a/chrome/browser/sharing_hub/sharing_hub_model.h b/chrome/browser/sharing_hub/sharing_hub_model.h
new file mode 100644
index 0000000..b2792d2
--- /dev/null
+++ b/chrome/browser/sharing_hub/sharing_hub_model.h
@@ -0,0 +1,60 @@
+// 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_SHARING_HUB_SHARING_HUB_MODEL_H_
+#define CHROME_BROWSER_SHARING_HUB_SHARING_HUB_MODEL_H_
+
+#include <vector>
+
+#include "base/macros.h"
+
+namespace content {
+class BrowserContext;
+class WebContents;
+}  // namespace content
+
+namespace gfx {
+struct VectorIcon;
+}  // namespace gfx
+
+namespace sharing_hub {
+
+struct SharingHubAction {
+  int command_id;
+  int title;
+  const gfx::VectorIcon& icon;
+  bool is_first_party;
+};
+
+// The Sharing Hub model contains a list of first and third party actions.
+// This object should only be accessed from one thread, which is usually the
+// main thread.
+class SharingHubModel {
+ public:
+  explicit SharingHubModel(content::BrowserContext* context);
+  ~SharingHubModel();
+
+  // Populates the vector with Sharing Hub actions, ordered by appearance in the
+  // dialog. Some actions (i.e. send tab to self) may not be shown for some
+  // URLs.
+  void GetActionList(content::WebContents* web_contents,
+                     std::vector<SharingHubAction>* list);
+
+ private:
+  void PopulateFirstPartyActions();
+  void PopulateThirdPartyActions();
+
+  bool DoShowSendTabToSelfForWebContents(content::WebContents* web_contents);
+
+  // A list of Sharing Hub actions in order in which they appear.
+  std::vector<SharingHubAction> action_list_;
+
+  content::BrowserContext* context_;
+
+  DISALLOW_COPY_AND_ASSIGN(SharingHubModel);
+};
+
+}  // namespace sharing_hub
+
+#endif  // CHROME_BROWSER_SHARING_HUB_SHARING_HUB_MODEL_H_
diff --git a/chrome/browser/sharing_hub/sharing_hub_service.cc b/chrome/browser/sharing_hub/sharing_hub_service.cc
new file mode 100644
index 0000000..9015a2c
--- /dev/null
+++ b/chrome/browser/sharing_hub/sharing_hub_service.cc
@@ -0,0 +1,22 @@
+// 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/sharing_hub/sharing_hub_service.h"
+
+#include "chrome/browser/sharing_hub/sharing_hub_model.h"
+#include "content/public/browser/browser_context.h"
+
+namespace sharing_hub {
+
+SharingHubService::SharingHubService(content::BrowserContext* context) {
+  model_ = std::make_unique<SharingHubModel>(context);
+}
+
+SharingHubService::~SharingHubService() = default;
+
+SharingHubModel* SharingHubService::GetSharingHubModel() {
+  return model_.get();
+}
+
+}  // namespace sharing_hub
diff --git a/chrome/browser/sharing_hub/sharing_hub_service.h b/chrome/browser/sharing_hub/sharing_hub_service.h
new file mode 100644
index 0000000..ff2aba25
--- /dev/null
+++ b/chrome/browser/sharing_hub/sharing_hub_service.h
@@ -0,0 +1,37 @@
+// 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_SHARING_HUB_SHARING_HUB_SERVICE_H_
+#define CHROME_BROWSER_SHARING_HUB_SHARING_HUB_SERVICE_H_
+
+#include <memory>
+
+#include "base/memory/weak_ptr.h"
+#include "components/keyed_service/core/keyed_service.h"
+
+namespace content {
+class BrowserContext;
+}
+
+namespace sharing_hub {
+
+class SharingHubModel;
+
+// KeyedService responsible for the cache of Sharing Hub actions.
+class SharingHubService : public KeyedService {
+ public:
+  explicit SharingHubService(content::BrowserContext* context);
+  ~SharingHubService() override;
+
+  virtual SharingHubModel* GetSharingHubModel();
+
+ private:
+  std::unique_ptr<SharingHubModel> model_;
+
+  DISALLOW_COPY_AND_ASSIGN(SharingHubService);
+};
+
+}  // namespace sharing_hub
+
+#endif  // CHROME_BROWSER_SHARING_HUB_SHARING_HUB_SERVICE_H_
diff --git a/chrome/browser/sharing_hub/sharing_hub_service_factory.cc b/chrome/browser/sharing_hub/sharing_hub_service_factory.cc
new file mode 100644
index 0000000..a576846b
--- /dev/null
+++ b/chrome/browser/sharing_hub/sharing_hub_service_factory.cc
@@ -0,0 +1,37 @@
+// 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/sharing_hub/sharing_hub_service_factory.h"
+
+#include "base/memory/singleton.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/sharing_hub/sharing_hub_service.h"
+#include "components/keyed_service/content/browser_context_dependency_manager.h"
+
+namespace sharing_hub {
+
+// static
+SharingHubService* SharingHubServiceFactory::GetForProfile(Profile* profile) {
+  return static_cast<SharingHubService*>(
+      GetInstance()->GetServiceForBrowserContext(profile, true));
+}
+
+// static
+SharingHubServiceFactory* SharingHubServiceFactory::GetInstance() {
+  return base::Singleton<SharingHubServiceFactory>::get();
+}
+
+SharingHubServiceFactory::SharingHubServiceFactory()
+    : BrowserContextKeyedServiceFactory(
+          "SharingHubService",
+          BrowserContextDependencyManager::GetInstance()) {}
+
+SharingHubServiceFactory::~SharingHubServiceFactory() = default;
+
+KeyedService* SharingHubServiceFactory::BuildServiceInstanceFor(
+    content::BrowserContext* context) const {
+  return new SharingHubService(context);
+}
+
+}  // namespace sharing_hub
diff --git a/chrome/browser/sharing_hub/sharing_hub_service_factory.h b/chrome/browser/sharing_hub/sharing_hub_service_factory.h
new file mode 100644
index 0000000..9cfd86a
--- /dev/null
+++ b/chrome/browser/sharing_hub/sharing_hub_service_factory.h
@@ -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.
+
+#ifndef CHROME_BROWSER_SHARING_HUB_SHARING_HUB_SERVICE_FACTORY_H_
+#define CHROME_BROWSER_SHARING_HUB_SHARING_HUB_SERVICE_FACTORY_H_
+
+#include <memory>
+
+#include "base/macros.h"
+#include "base/memory/singleton.h"
+#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+
+class Profile;
+
+namespace sharing_hub {
+
+class SharingHubService;
+
+class SharingHubServiceFactory : public BrowserContextKeyedServiceFactory {
+ public:
+  static SharingHubService* GetForProfile(Profile* profile);
+  static SharingHubServiceFactory* GetInstance();
+
+ private:
+  friend struct base::DefaultSingletonTraits<SharingHubServiceFactory>;
+
+  SharingHubServiceFactory();
+  ~SharingHubServiceFactory() override;
+
+  // BrowserContextKeyedServiceFactory:
+  KeyedService* BuildServiceInstanceFor(
+      content::BrowserContext* context) const override;
+
+  DISALLOW_COPY_AND_ASSIGN(SharingHubServiceFactory);
+};
+
+}  // namespace sharing_hub
+
+#endif  // CHROME_BROWSER_SHARING_HUB_SHARING_HUB_SERVICE_FACTORY_H_
diff --git a/chrome/browser/sync/test/integration/preferences_helper.h b/chrome/browser/sync/test/integration/preferences_helper.h
index 2b68898..32f6fdc 100644
--- a/chrome/browser/sync/test/integration/preferences_helper.h
+++ b/chrome/browser/sync/test/integration/preferences_helper.h
@@ -13,7 +13,6 @@
 #include <string>
 #include <vector>
 
-#include "base/files/file_path.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/values.h"
 #include "chrome/browser/sync/test/integration/fake_server_match_status_checker.h"
diff --git a/chrome/browser/sync_file_system/file_change.h b/chrome/browser/sync_file_system/file_change.h
index 088e0254..c197f81b 100644
--- a/chrome/browser/sync_file_system/file_change.h
+++ b/chrome/browser/sync_file_system/file_change.h
@@ -10,7 +10,6 @@
 #include <string>
 
 #include "base/containers/circular_deque.h"
-#include "base/files/file_path.h"
 #include "chrome/browser/sync_file_system/sync_file_type.h"
 #include "storage/browser/file_system/file_system_url.h"
 
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index c0ae2ba..909f023 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -4140,6 +4140,8 @@
       "views/sharing/sharing_dialog_view.h",
       "views/sharing/sharing_icon_view.cc",
       "views/sharing/sharing_icon_view.h",
+      "views/sharing_hub/sharing_hub_bubble_action_button.cc",
+      "views/sharing_hub/sharing_hub_bubble_action_button.h",
       "views/sharing_hub/sharing_hub_bubble_view_impl.cc",
       "views/sharing_hub/sharing_hub_bubble_view_impl.h",
       "views/sharing_hub/sharing_hub_icon_view.cc",
diff --git a/chrome/browser/ui/android/passwords/manual_filling_view_android.cc b/chrome/browser/ui/android/passwords/manual_filling_view_android.cc
index 9b7f6ed..b5316b44 100644
--- a/chrome/browser/ui/android/passwords/manual_filling_view_android.cc
+++ b/chrome/browser/ui/android/passwords/manual_filling_view_android.cc
@@ -15,6 +15,7 @@
 #include "base/android/jni_array.h"
 #include "base/android/jni_string.h"
 #include "base/bind.h"
+#include "base/callback.h"
 #include "base/macros.h"
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/android/features/keyboard_accessory/jni_headers/ManualFillingComponentBridge_jni.h"
@@ -130,6 +131,18 @@
       static_cast<autofill::AccessoryAction>(selected_action), enabled);
 }
 
+void ManualFillingViewAndroid::RequestAccessorySheet(
+    JNIEnv* env,
+    const base::android::JavaParamRef<jobject>& obj,
+    jint tab_type) {
+  // controller_ owns this class. Therefore, the callback can't outlive the view
+  // and base::Unretained is always a valid reference.
+  controller_->RequestAccessorySheet(
+      static_cast<autofill::AccessoryTabType>(tab_type),
+      base::BindOnce(&ManualFillingViewAndroid::OnItemsAvailable,
+                     base::Unretained(this)));
+}
+
 void ManualFillingViewAndroid::OnViewDestroyed(
     JNIEnv* env,
     const base::android::JavaParamRef<jobject>& obj) {
diff --git a/chrome/browser/ui/android/passwords/manual_filling_view_android.h b/chrome/browser/ui/android/passwords/manual_filling_view_android.h
index ed763ec..2f7ed0cc 100644
--- a/chrome/browser/ui/android/passwords/manual_filling_view_android.h
+++ b/chrome/browser/ui/android/passwords/manual_filling_view_android.h
@@ -8,6 +8,7 @@
 #include <jni.h>
 
 #include "base/android/scoped_java_ref.h"
+#include "base/callback_forward.h"
 #include "chrome/browser/autofill/manual_filling_view_interface.h"
 #include "components/autofill/core/browser/ui/accessory_sheet_data.h"
 
@@ -58,6 +59,9 @@
                        const base::android::JavaParamRef<jobject>& obj,
                        jint selected_action,
                        jboolean enabled);
+  void RequestAccessorySheet(JNIEnv* env,
+                             const base::android::JavaParamRef<jobject>& obj,
+                             jint tab_type);
   void OnViewDestroyed(JNIEnv* env,
                        const base::android::JavaParamRef<jobject>& obj);
 
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd
index f2a9ebd..322f495 100644
--- a/chrome/browser/ui/android/strings/android_chrome_strings.grd
+++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd
@@ -375,15 +375,6 @@
       <message name="IDS_USAGE_AND_CRASH_REPORTS_SUMMARY" desc="Description for 'Help improve Chrome's features and performance' preference.">
         Automatically sends usage statistics and crash reports to Google
       </message>
-      <message name="IDS_CANCEL_SYNC_DIALOG_TITLE" desc="The title of a dialog that is shown when users tries closing 'Sync and Google services' preferences without confirming the changes.">
-        Cancel sync?
-      </message>
-      <message name="IDS_CANCEL_SYNC_DIALOG_MESSAGE" desc="The text of a dialog that is shown when users tries closing 'Sync and Google services' preferences without confirming the changes.">
-        You can turn on sync anytime in settings
-      </message>
-      <message name="IDS_CANCEL_SYNC_BUTTON" desc="The text of a button in a dialog that is shown when users tries closing 'Sync and Google services' preferences without confirming the changes.">
-        Cancel sync
-      </message>
 
       <!-- Metrics settings -->
       <message name="IDS_PREFS_METRICS_SETTINGS" desc="Title for the page that allows the user to control how much usage data Chrome uploads. [CHAR_LIMIT=32]">
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_CANCEL_SYNC_BUTTON.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_CANCEL_SYNC_BUTTON.png.sha1
deleted file mode 100644
index e825d3a..0000000
--- a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_CANCEL_SYNC_BUTTON.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c3796d3a7df422ead94d1fe32a2480cc42ef84a5
\ No newline at end of file
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_CANCEL_SYNC_DIALOG_MESSAGE.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_CANCEL_SYNC_DIALOG_MESSAGE.png.sha1
deleted file mode 100644
index e825d3a..0000000
--- a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_CANCEL_SYNC_DIALOG_MESSAGE.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c3796d3a7df422ead94d1fe32a2480cc42ef84a5
\ No newline at end of file
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_CANCEL_SYNC_DIALOG_TITLE.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_CANCEL_SYNC_DIALOG_TITLE.png.sha1
deleted file mode 100644
index e825d3a..0000000
--- a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_CANCEL_SYNC_DIALOG_TITLE.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c3796d3a7df422ead94d1fe32a2480cc42ef84a5
\ No newline at end of file
diff --git a/chrome/browser/ui/android/theme/java/src/org/chromium/chrome/browser/theme/TopUiThemeColorProvider.java b/chrome/browser/ui/android/theme/java/src/org/chromium/chrome/browser/theme/TopUiThemeColorProvider.java
index 0bd6572b..9866738a 100644
--- a/chrome/browser/ui/android/theme/java/src/org/chromium/chrome/browser/theme/TopUiThemeColorProvider.java
+++ b/chrome/browser/ui/android/theme/java/src/org/chromium/chrome/browser/theme/TopUiThemeColorProvider.java
@@ -48,6 +48,9 @@
     private final Supplier<Integer> mActivityThemeColorSupplier;
     private final BooleanSupplier mIsTabletSupplier;
 
+    /** Whether the theme should apply while in dark mode. */
+    private final boolean mAllowThemingInNightMode;
+
     /** Whether or not the default color is used. */
     private boolean mIsDefaultColorUsed;
 
@@ -56,9 +59,12 @@
      * @param tabSupplier Supplier of the current tab.
      * @param activityThemeColorSupplier Supplier of activity theme color.
      * @param isTabletSupplier Supplier of a boolean indicating we're on a tablet device.
+     * @param allowThemingInNightMode Whether the tab theme should be used when the device is in
+     *                                night mode.
      */
     public TopUiThemeColorProvider(Context context, ObservableSupplier<Tab> tabSupplier,
-            Supplier<Integer> activityThemeColorSupplier, BooleanSupplier isTabletSupplier) {
+            Supplier<Integer> activityThemeColorSupplier, BooleanSupplier isTabletSupplier,
+            boolean allowThemingInNightMode) {
         super(context);
         mTabObserver = new CurrentTabObserver(tabSupplier,
                 new EmptyTabObserver() {
@@ -77,6 +83,7 @@
                 });
         mActivityThemeColorSupplier = activityThemeColorSupplier;
         mIsTabletSupplier = isTabletSupplier;
+        mAllowThemingInNightMode = allowThemingInNightMode;
     }
 
     /**
@@ -149,9 +156,11 @@
      * activity).
      */
     private boolean isThemingAllowed(Tab tab) {
+        boolean disallowDueToNightMode =
+                !mAllowThemingInNightMode && ColorUtils.inNightMode(tab.getContext());
+
         return tab.isThemingAllowed() && !mIsTabletSupplier.getAsBoolean()
-                && !ColorUtils.inNightMode(tab.getContext()) && !tab.isNativePage()
-                && !tab.isIncognito();
+                && !disallowDueToNightMode && !tab.isNativePage() && !tab.isIncognito();
     }
 
     /**
diff --git a/chrome/browser/ui/ash/chrome_screenshot_grabber.h b/chrome/browser/ui/ash/chrome_screenshot_grabber.h
index b37612f1..37234fe 100644
--- a/chrome/browser/ui/ash/chrome_screenshot_grabber.h
+++ b/chrome/browser/ui/ash/chrome_screenshot_grabber.h
@@ -25,6 +25,10 @@
 class ChromeScreenshotGrabberTest;
 }  // namespace ash
 
+namespace base {
+class FilePath;
+}  // namespace base
+
 namespace policy {
 class PolicyTest;
 }  // namespace policy
diff --git a/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_unittest.cc b/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_unittest.cc
index 051419f..c0feff05 100644
--- a/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_unittest.cc
+++ b/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_unittest.cc
@@ -36,6 +36,7 @@
 #include "chrome/browser/ui/ash/holding_space/holding_space_persistence_delegate.h"
 #include "chrome/browser/ui/ash/holding_space/holding_space_util.h"
 #include "chrome/browser/ui/ash/holding_space/scoped_test_mount_point.h"
+#include "chrome/browser/ui/webui/print_preview/pdf_printer_handler.h"
 #include "chrome/test/base/browser_with_test_window_test.h"
 #include "chrome/test/base/testing_profile_manager.h"
 #include "chromeos/disks/disk_mount_manager.h"
@@ -296,6 +297,21 @@
     HoldingSpaceImage::SetUseZeroInvalidationDelayForTesting(false);
   }
 
+  // BrowserWithTestWindowTest:
+  void SetUp() override {
+    // Needed by `file_manager::VolumeManager`.
+    chromeos::disks::DiskMountManager::InitializeForTesting(
+        new file_manager::FakeDiskMountManager);
+    SetUpDownloadManager();
+    BrowserWithTestWindowTest::SetUp();
+    holding_space_util::SetNowForTesting(base::nullopt);
+  }
+
+  void TearDown() override {
+    BrowserWithTestWindowTest::TearDown();
+    chromeos::disks::DiskMountManager::Shutdown();
+  }
+
   TestingProfile* CreateProfile() override {
     const std::string kPrimaryProfileName = "primary_profile";
     const AccountId account_id(AccountId::FromUserEmail(kPrimaryProfileName));
@@ -428,21 +444,6 @@
   MockDownloadManager* download_manager() { return &download_manager_; }
 
  private:
-  // BrowserWithTestWindowTest:
-  void SetUp() override {
-    // Needed by `file_manager::VolumeManager`.
-    chromeos::disks::DiskMountManager::InitializeForTesting(
-        new file_manager::FakeDiskMountManager);
-    SetUpDownloadManager();
-    BrowserWithTestWindowTest::SetUp();
-    holding_space_util::SetNowForTesting(base::nullopt);
-  }
-
-  void TearDown() override {
-    BrowserWithTestWindowTest::TearDown();
-    chromeos::disks::DiskMountManager::Shutdown();
-  }
-
   void SetUpDownloadManager() {
     // The `content::DownloadManager` needs to be set prior to initialization
     // of the `HoldingSpaceDownloadsDelegate`. This must happen before the
@@ -1819,97 +1820,64 @@
   EXPECT_EQ(u"File 2.png", item_2->text());
 }
 
-TEST_F(HoldingSpaceKeyedServiceTest, AddScreenRecordingItem) {
-  // Create a test downloads mount point.
-  std::unique_ptr<ScopedTestMountPoint> downloads_mount =
+// Base class for tests of print-to-PDF integration.
+class HoldingSpaceKeyedServicePrintToPdfIntegrationTest
+    : public HoldingSpaceKeyedServiceTest {
+ public:
+  // Starts a job to print an empty PDF to the specified `file_path`.
+  // NOTE: This method will not return until the print job completes.
+  void StartPrintToPdfAndWaitForSave(const std::u16string& job_title,
+                                     const base::FilePath& file_path) {
+    base::RunLoop run_loop;
+    pdf_printer_handler_->SetPdfSavedClosureForTesting(run_loop.QuitClosure());
+    pdf_printer_handler_->SetPrintToPdfPathForTesting(file_path);
+
+    std::string data;
+    pdf_printer_handler_->StartPrint(job_title, /*settings=*/base::Value(),
+                                     base::RefCountedString::TakeString(&data),
+                                     /*callback=*/base::DoNothing());
+
+    run_loop.Run();
+  }
+
+ private:
+  // HoldingSpaceKeyedServiceTest:
+  void SetUp() override {
+    HoldingSpaceKeyedServiceTest::SetUp();
+
+    // Create the PDF printer handler.
+    pdf_printer_handler_ = std::make_unique<printing::PdfPrinterHandler>(
+        profile(), browser()->tab_strip_model()->GetActiveWebContents(),
+        /*sticky_settings=*/nullptr);
+  }
+
+  std::unique_ptr<printing::PdfPrinterHandler> pdf_printer_handler_;
+};
+
+// Verifies that print-to-PDF adds an associated item to holding space.
+TEST_F(HoldingSpaceKeyedServicePrintToPdfIntegrationTest, AddPrintedPdfItem) {
+  // Create a file system mount point.
+  std::unique_ptr<ScopedTestMountPoint> mount_point =
       ScopedTestMountPoint::CreateAndMountDownloads(GetProfile());
-  ASSERT_TRUE(downloads_mount->IsValid());
+  ASSERT_TRUE(mount_point->IsValid());
 
-  // Wait for the holding space model.
-  HoldingSpaceModelAttachedWaiter(GetProfile()).Wait();
+  // Cache a pointer to the holding space model.
+  const HoldingSpaceModel* model =
+      HoldingSpaceKeyedServiceFactory::GetInstance()
+          ->GetService(GetProfile())
+          ->model_for_testing();
 
-  // Verify that the holding space model gets set even if the holding space
-  // keyed service is not explicitly created.
-  HoldingSpaceModel* const initial_model =
-      HoldingSpaceController::Get()->model();
-  EXPECT_TRUE(initial_model);
+  // Verify that the holding space is initially empty.
+  EXPECT_EQ(model->items().size(), 0u);
 
-  HoldingSpaceKeyedService* const holding_space_service =
-      HoldingSpaceKeyedServiceFactory::GetInstance()->GetService(GetProfile());
-  const base::FilePath item_1_virtual_path("Screen Recording 1.mpg");
-  // Create some fake screen recording file on the local file system - later
-  // parts of the test will try to resolve the file's file system URL, which
-  // fails if the file does not exist.
-  const base::FilePath item_1_full_path =
-      downloads_mount->CreateFile(item_1_virtual_path, "recording 1");
-  ASSERT_FALSE(item_1_full_path.empty());
+  // Start a job to print an empty PDF to `file_path`.
+  base::FilePath file_path = mount_point->GetRootPath().Append("foo.pdf");
+  StartPrintToPdfAndWaitForSave(u"job_title", file_path);
 
-  holding_space_service->AddScreenRecording(item_1_full_path);
-
-  const base::FilePath item_2_virtual_path =
-      base::FilePath("Alt/Screen Recording 2.mpg");
-  const base::FilePath item_2_full_path =
-      downloads_mount->CreateFile(item_2_virtual_path, "recording 2");
-  ASSERT_FALSE(item_2_full_path.empty());
-  holding_space_service->AddScreenRecording(item_2_full_path);
-
-  EXPECT_EQ(initial_model, HoldingSpaceController::Get()->model());
-  EXPECT_EQ(HoldingSpaceController::Get()->model(),
-            holding_space_service->model_for_testing());
-
-  HoldingSpaceModel* const model = HoldingSpaceController::Get()->model();
-  ASSERT_EQ(2u, model->items().size());
-
-  const HoldingSpaceItem* item_1 = model->items()[0].get();
-  EXPECT_EQ(item_1_full_path, item_1->file_path());
-  EXPECT_TRUE(gfx::BitmapsAreEqual(
-      *holding_space_util::ResolveImage(
-           holding_space_service->thumbnail_loader_for_testing(),
-           HoldingSpaceItem::Type::kScreenRecording, item_1_full_path)
-           ->GetImageSkia()
-           .bitmap(),
-      *item_1->image().GetImageSkia().bitmap()));
-  // Verify the item file system URL resolves to the correct file in the file
-  // manager's context.
-  EXPECT_EQ(item_1_virtual_path,
-            GetVirtualPathFromUrl(item_1->file_system_url(),
-                                  downloads_mount->name()));
-  EXPECT_EQ(u"Screen Recording 1.mpg", item_1->text());
-
-  const HoldingSpaceItem* item_2 = model->items()[1].get();
-  EXPECT_EQ(item_2_full_path, item_2->file_path());
-  EXPECT_TRUE(gfx::BitmapsAreEqual(
-      *holding_space_util::ResolveImage(
-           holding_space_service->thumbnail_loader_for_testing(),
-           HoldingSpaceItem::Type::kScreenRecording, item_2_full_path)
-           ->GetImageSkia()
-           .bitmap(),
-      *item_2->image().GetImageSkia().bitmap()));
-  // Verify the item file system URL resolves to the correct file in the file
-  // manager's context.
-  EXPECT_EQ(item_2_virtual_path,
-            GetVirtualPathFromUrl(item_2->file_system_url(),
-                                  downloads_mount->name()));
-  EXPECT_EQ(u"Screen Recording 2.mpg", item_2->text());
-
-  // Attempt to add an item with an empty file. Verify nothing gets added to the
-  // model.
-  const base::FilePath item_3_virtual_path = base::FilePath("");
-  const base::FilePath item_3_full_path =
-      downloads_mount->CreateFile(item_3_virtual_path, "");
-  ASSERT_TRUE(item_3_full_path.empty());
-  holding_space_service->AddScreenRecording(item_3_full_path);
-
-  ASSERT_EQ(2u, model->items().size());
-
-  // Attempt to add an already added screen capture to the model.
-  EXPECT_EQ(model->items()[1]->file_path(), item_2_full_path);
-  holding_space_service->AddScreenRecording(item_2_full_path);
-
-  // Attempts to add already added screen capture should be ignored.
-  ASSERT_EQ(model->items().size(), 2u);
-  EXPECT_EQ(model->items()[0].get(), item_1);
-  EXPECT_EQ(model->items()[1].get(), item_2);
+  // Verify that the holding space is now populated with the expected item.
+  ASSERT_EQ(model->items().size(), 1u);
+  EXPECT_EQ(model->items()[0]->type(), HoldingSpaceItem::Type::kPrintedPdf);
+  EXPECT_EQ(model->items()[0]->file_path(), file_path);
 }
 
 }  // namespace ash
diff --git a/chrome/browser/ui/autofill/address_editor_controller.cc b/chrome/browser/ui/autofill/address_editor_controller.cc
index d0d3aae..af72066 100644
--- a/chrome/browser/ui/autofill/address_editor_controller.cc
+++ b/chrome/browser/ui/autofill/address_editor_controller.cc
@@ -65,7 +65,7 @@
   editor_fields_.emplace_back(
       autofill::ADDRESS_HOME_COUNTRY,
       l10n_util::GetStringUTF16(IDS_LIBADDRESSINPUT_COUNTRY_OR_REGION_LABEL),
-      EditorField::LengthHint::HINT_SHORT, EditorField::ControlType::COMBOBOX);
+      EditorField::LengthHint::HINT_LONG, EditorField::ControlType::COMBOBOX);
 
   for (const std::vector<::i18n::addressinput::AddressUiComponent>& line :
        components) {
diff --git a/chrome/browser/ui/autofill/chrome_autofill_client.cc b/chrome/browser/ui/autofill/chrome_autofill_client.cc
index 13776175..2e7499c 100644
--- a/chrome/browser/ui/autofill/chrome_autofill_client.cc
+++ b/chrome/browser/ui/autofill/chrome_autofill_client.cc
@@ -539,13 +539,13 @@
   save_address_profile_flow_manager_.OfferSave(
       web_contents(), profile, original_profile, std::move(callback));
 #else
-  // TODO(crbug.com/1167060): Respect SaveAddressProfilePromptOptions.
   SaveUpdateAddressProfileBubbleControllerImpl::CreateForWebContents(
       web_contents());
   SaveUpdateAddressProfileBubbleControllerImpl* controller =
       SaveUpdateAddressProfileBubbleControllerImpl::FromWebContents(
           web_contents());
-  controller->OfferSave(profile, original_profile, std::move(callback));
+  controller->OfferSave(profile, original_profile, options,
+                        std::move(callback));
 #endif
 }
 
diff --git a/chrome/browser/ui/autofill/edit_address_profile_dialog_controller_impl.cc b/chrome/browser/ui/autofill/edit_address_profile_dialog_controller_impl.cc
index 0f88886..b095a1cb 100644
--- a/chrome/browser/ui/autofill/edit_address_profile_dialog_controller_impl.cc
+++ b/chrome/browser/ui/autofill/edit_address_profile_dialog_controller_impl.cc
@@ -9,6 +9,7 @@
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_finder.h"
 #include "chrome/browser/ui/browser_window.h"
+#include "components/autofill/core/browser/autofill_client.h"
 #include "components/autofill/core/common/autofill_features.h"
 
 namespace autofill {
@@ -65,8 +66,10 @@
   SaveUpdateAddressProfileBubbleControllerImpl* controller =
       SaveUpdateAddressProfileBubbleControllerImpl::FromWebContents(
           web_contents());
-  controller->OfferSave(profile, base::OptionalOrNullptr(original_profile_),
-                        std::move(address_profile_save_prompt_callback_));
+  controller->OfferSave(
+      profile, base::OptionalOrNullptr(original_profile_),
+      AutofillClient::SaveAddressProfilePromptOptions{.show_prompt = true},
+      std::move(address_profile_save_prompt_callback_));
 }
 
 void EditAddressProfileDialogControllerImpl::OnDialogClosed() {
diff --git a/chrome/browser/ui/autofill/save_update_address_profile_bubble_controller_impl.cc b/chrome/browser/ui/autofill/save_update_address_profile_bubble_controller_impl.cc
index 4ea7c59..ef11914 100644
--- a/chrome/browser/ui/autofill/save_update_address_profile_bubble_controller_impl.cc
+++ b/chrome/browser/ui/autofill/save_update_address_profile_bubble_controller_impl.cc
@@ -29,6 +29,7 @@
 void SaveUpdateAddressProfileBubbleControllerImpl::OfferSave(
     const AutofillProfile& profile,
     const AutofillProfile* original_profile,
+    AutofillClient::SaveAddressProfilePromptOptions options,
     AutofillClient::AddressProfileSavePromptCallback
         address_profile_save_prompt_callback) {
   // Don't show the bubble if it's already visible.
@@ -39,12 +40,13 @@
   address_profile_save_prompt_callback_ =
       std::move(address_profile_save_prompt_callback);
   shown_by_user_gesture_ = false;
-  Show();
+  if (options.show_prompt)
+    Show();
 }
 
 std::u16string SaveUpdateAddressProfileBubbleControllerImpl::GetWindowTitle()
     const {
-  // TODO(crbug.com/1167060): Use ineternationalized string upon having final
+  // TODO(crbug.com/1167060): Use internationalized string upon having final
   // strings.
   // TODO(crbug.com/1167060): Update prompt title should reflect the fields that
   // are being updated.
diff --git a/chrome/browser/ui/autofill/save_update_address_profile_bubble_controller_impl.h b/chrome/browser/ui/autofill/save_update_address_profile_bubble_controller_impl.h
index ce1ab37..87a6dcef 100644
--- a/chrome/browser/ui/autofill/save_update_address_profile_bubble_controller_impl.h
+++ b/chrome/browser/ui/autofill/save_update_address_profile_bubble_controller_impl.h
@@ -36,8 +36,10 @@
   // `original_profile` is not nullptr, it will be updated of the user accepts
   // the offer. `address_profile_save_prompt_callback` will be invoked once the
   // user makes a decision with respect to the offer-to-save prompt.
+  // `options` carries extra configuration for opening the prompt.
   void OfferSave(const AutofillProfile& profile,
                  const AutofillProfile* original_profile,
+                 AutofillClient::SaveAddressProfilePromptOptions options,
                  AutofillClient::AddressProfileSavePromptCallback
                      address_profile_save_prompt_callback);
 
diff --git a/chrome/browser/ui/autofill/save_update_address_profile_bubble_controller_impl_unittest.cc b/chrome/browser/ui/autofill/save_update_address_profile_bubble_controller_impl_unittest.cc
index 86047565..057469d 100644
--- a/chrome/browser/ui/autofill/save_update_address_profile_bubble_controller_impl_unittest.cc
+++ b/chrome/browser/ui/autofill/save_update_address_profile_bubble_controller_impl_unittest.cc
@@ -7,6 +7,7 @@
 #include "base/test/mock_callback.h"
 #include "base/test/scoped_feature_list.h"
 #include "chrome/test/base/browser_with_test_window_test.h"
+#include "components/autofill/core/browser/autofill_client.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
 #include "components/autofill/core/common/autofill_features.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -40,8 +41,10 @@
        DialogAcceptedInvokesCallback) {
   AutofillProfile profile = test::GetFullProfile();
   base::MockCallback<AutofillClient::AddressProfileSavePromptCallback> callback;
-  controller()->OfferSave(profile, /*original_profile=*/nullptr,
-                          callback.Get());
+  controller()->OfferSave(
+      profile, /*original_profile=*/nullptr,
+      AutofillClient::SaveAddressProfilePromptOptions{.show_prompt = true},
+      callback.Get());
 
   EXPECT_CALL(
       callback,
@@ -55,8 +58,10 @@
        DialogCancelledInvokesCallback) {
   AutofillProfile profile = test::GetFullProfile();
   base::MockCallback<AutofillClient::AddressProfileSavePromptCallback> callback;
-  controller()->OfferSave(profile, /*original_profile=*/nullptr,
-                          callback.Get());
+  controller()->OfferSave(
+      profile, /*original_profile=*/nullptr,
+      AutofillClient::SaveAddressProfilePromptOptions{.show_prompt = true},
+      callback.Get());
 
   EXPECT_CALL(
       callback,
@@ -66,4 +71,34 @@
       AutofillClient::SaveAddressProfileOfferUserDecision::kDeclined);
 }
 
+// This is testing that when the SaveAddressProfilePromptOptions has the
+// show_prompt set to true, the bubble should be visible.
+TEST_F(SaveUpdateAddressProfileBubbleControllerImplTest,
+       BubbleShouldBeVisibleWithShowPrompt) {
+  AutofillProfile profile = test::GetFullProfile();
+  base::MockCallback<AutofillClient::AddressProfileSavePromptCallback> callback;
+  controller()->OfferSave(
+      profile, /*original_profile=*/nullptr,
+      AutofillClient::SaveAddressProfilePromptOptions{.show_prompt = true},
+      callback.Get());
+  // Bubble is visible and active
+  EXPECT_TRUE(controller()->GetSaveBubbleView());
+  EXPECT_TRUE(controller()->IsBubbleActive());
+}
+
+// This is testing that when the SaveAddressProfilePromptOptions has the
+// show_prompt set to false, the bubble should be invisible.
+TEST_F(SaveUpdateAddressProfileBubbleControllerImplTest,
+       BubbleShouldBeInvisibleWithoutShowPrompt) {
+  AutofillProfile profile = test::GetFullProfile();
+  base::MockCallback<AutofillClient::AddressProfileSavePromptCallback> callback;
+  controller()->OfferSave(
+      profile, /*original_profile=*/nullptr,
+      AutofillClient::SaveAddressProfilePromptOptions{.show_prompt = false},
+      callback.Get());
+  // Bubble is invisible but active
+  EXPECT_FALSE(controller()->GetSaveBubbleView());
+  EXPECT_TRUE(controller()->IsBubbleActive());
+}
+
 }  // namespace autofill
diff --git a/chrome/browser/ui/sharing_hub/sharing_hub_bubble_controller.cc b/chrome/browser/ui/sharing_hub/sharing_hub_bubble_controller.cc
index 1a8a1f1..f8b77c8 100644
--- a/chrome/browser/ui/sharing_hub/sharing_hub_bubble_controller.cc
+++ b/chrome/browser/ui/sharing_hub/sharing_hub_bubble_controller.cc
@@ -5,7 +5,11 @@
 #include "chrome/browser/ui/sharing_hub/sharing_hub_bubble_controller.h"
 
 #include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/sharing_hub/sharing_hub_model.h"
+#include "chrome/browser/sharing_hub/sharing_hub_service.h"
+#include "chrome/browser/sharing_hub/sharing_hub_service_factory.h"
 #include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/browser_commands.h"
 #include "chrome/browser/ui/browser_finder.h"
 #include "chrome/browser/ui/browser_window.h"
 #include "chrome/browser/ui/sharing_hub/sharing_hub_bubble_view.h"
@@ -66,6 +70,33 @@
   return true;
 }
 
+std::vector<SharingHubAction> SharingHubBubbleController::GetActions() const {
+  SharingHubService* const service =
+      SharingHubServiceFactory::GetForProfile(GetProfile());
+  SharingHubModel* const model =
+      service ? service->GetSharingHubModel() : nullptr;
+
+  std::vector<SharingHubAction> actions;
+  if (model)
+    model->GetActionList(web_contents_, &actions);
+
+  return actions;
+}
+
+void SharingHubBubbleController::OnActionSelected(int command_id,
+                                                  bool is_first_party) {
+  Browser* browser = chrome::FindBrowserWithWebContents(web_contents_);
+  // Can be null in tests.
+  if (!browser)
+    return;
+
+  if (is_first_party) {
+    chrome::ExecuteCommand(browser, command_id);
+  } else {
+    // TODO(1186833): execute 3p action
+  }
+}
+
 void SharingHubBubbleController::OnBubbleClosed() {
   sharing_hub_bubble_view_ = nullptr;
 }
diff --git a/chrome/browser/ui/sharing_hub/sharing_hub_bubble_controller.h b/chrome/browser/ui/sharing_hub/sharing_hub_bubble_controller.h
index 7f1d23a..a7588d0 100644
--- a/chrome/browser/ui/sharing_hub/sharing_hub_bubble_controller.h
+++ b/chrome/browser/ui/sharing_hub/sharing_hub_bubble_controller.h
@@ -16,6 +16,7 @@
 namespace sharing_hub {
 
 class SharingHubBubbleView;
+struct SharingHubAction;
 
 // Controller component of the Sharing Hub dialog bubble.
 // Responsible for showing and hiding an owned bubble.
@@ -41,6 +42,13 @@
   // Returns true if the omnibox icon should be shown.
   bool ShouldOfferOmniboxIcon();
 
+  // Returns the list of Sharing Hub actions.
+  virtual std::vector<SharingHubAction> GetActions() const;
+
+  // Handles when the user clicks on a Sharing Hub action. If this is a first
+  // party action, executes the appropriate browser command. If this is a third
+  // party action, navigates to an external webpage.
+  virtual void OnActionSelected(int command_id, bool is_first_party);
   // Handler for when the bubble is closed.
   void OnBubbleClosed();
 
diff --git a/chrome/browser/ui/toolbar/app_menu_model.h b/chrome/browser/ui/toolbar/app_menu_model.h
index 8d86658e..4f745a2 100644
--- a/chrome/browser/ui/toolbar/app_menu_model.h
+++ b/chrome/browser/ui/toolbar/app_menu_model.h
@@ -7,7 +7,6 @@
 
 #include <memory>
 
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/time/time.h"
 #include "base/timer/elapsed_timer.h"
diff --git a/chrome/browser/ui/views/autofill/edit_address_profile_view.cc b/chrome/browser/ui/views/autofill/edit_address_profile_view.cc
index ea6244a9..a1ad18a 100644
--- a/chrome/browser/ui/views/autofill/edit_address_profile_view.cc
+++ b/chrome/browser/ui/views/autofill/edit_address_profile_view.cc
@@ -34,6 +34,8 @@
       AutofillClient::SaveAddressProfileOfferUserDecision::kDeclined));
 
   SetLayoutManager(std::make_unique<views::FillLayout>());
+  set_margins(ChromeLayoutProvider::Get()->GetInsetsMetric(
+      views::InsetsMetric::INSETS_DIALOG));
 }
 
 EditAddressProfileView::~EditAddressProfileView() = default;
diff --git a/chrome/browser/ui/views/autofill/save_address_profile_view.cc b/chrome/browser/ui/views/autofill/save_address_profile_view.cc
index a1c2fad..c55912d3 100644
--- a/chrome/browser/ui/views/autofill/save_address_profile_view.cc
+++ b/chrome/browser/ui/views/autofill/save_address_profile_view.cc
@@ -18,10 +18,8 @@
 #include "components/vector_icons/vector_icons.h"
 #include "ui/base/models/simple_combobox_model.h"
 #include "ui/gfx/color_utils.h"
-#include "ui/gfx/favicon_size.h"
 #include "ui/views/controls/button/image_button.h"
 #include "ui/views/controls/button/image_button_factory.h"
-#include "ui/views/controls/color_tracking_icon_view.h"
 #include "ui/views/controls/editable_combobox/editable_combobox.h"
 #include "ui/views/controls/label.h"
 #include "ui/views/layout/flex_layout.h"
@@ -31,6 +29,15 @@
 
 namespace {
 
+constexpr int kIconSize = 16;
+
+int AddressDetailsIconSize() {
+  // Use the line height of the body small text. This allows the icons to adapt
+  // if the user changes the font size.
+  return views::style::GetLineHeight(views::style::CONTEXT_LABEL,
+                                     views::style::STYLE_PRIMARY);
+}
+
 int ComboboxIconSize() {
   // Use the line height of the body small text. This allows the icons to adapt
   // if the user changes the font size.
@@ -55,10 +62,12 @@
               /*horizontal=*/ChromeLayoutProvider::Get()->GetDistanceMetric(
                   views::DISTANCE_RELATED_CONTROL_HORIZONTAL)));
 
-  auto icon_view =
-      std::make_unique<views::ColorTrackingIconView>(icon, gfx::kFaviconSize);
-  row->AddChildView(std::move(icon_view));
+  auto icon_view = std::make_unique<views::ImageView>();
+  icon_view->SetImage(ui::ImageModel::FromVectorIcon(
+      icon, ui::NativeTheme::kColorId_SecondaryIconColor,
+      AddressDetailsIconSize()));
 
+  row->AddChildView(std::move(icon_view));
   row->AddChildView(std::move(view));
 }
 
@@ -224,7 +233,7 @@
           base::BindRepeating(
               &SaveUpdateAddressProfileBubbleController::OnEditButtonClicked,
               base::Unretained(controller_)),
-          vector_icons::kEditIcon, gfx::kFaviconSize);
+          vector_icons::kEditIcon, kIconSize);
   // TODO(crbug.com/1167060): Use internationalized string.
   edit_button->SetAccessibleName(u"Edit Address");
   AddChildView(std::move(edit_button));
diff --git a/chrome/browser/ui/views/autofill/update_address_profile_view.cc b/chrome/browser/ui/views/autofill/update_address_profile_view.cc
index 2a4c9d4..8b5761e 100644
--- a/chrome/browser/ui/views/autofill/update_address_profile_view.cc
+++ b/chrome/browser/ui/views/autofill/update_address_profile_view.cc
@@ -29,6 +29,13 @@
 constexpr int kColumnSetId = 0;
 constexpr int kIconSize = 16;
 
+int AddressDetailsIconSize() {
+  // Use the line height of the body small text. This allows the icons to adapt
+  // if the user changes the font size.
+  return views::style::GetLineHeight(views::style::CONTEXT_LABEL,
+                                     views::style::STYLE_PRIMARY);
+}
+
 const gfx::VectorIcon& GetVectorIconForType(ServerFieldType type) {
   // TODO(crbug.com/1167060): Update icons upon having final mocks.
   switch (type) {
@@ -89,7 +96,7 @@
 
     auto icon_view = std::make_unique<views::ImageView>();
     icon_view->SetImage(ui::ImageModel::FromVectorIcon(
-        GetVectorIconForType(type), icon_color, kIconSize));
+        GetVectorIconForType(type), icon_color, AddressDetailsIconSize()));
 
     value_row->AddChildView(std::move(icon_view));
     value_row->AddChildView(
@@ -252,7 +259,7 @@
   if (has_non_empty_original_values) {
     layout->AddPaddingRow(views::GridLayout::kFixedSize,
                           ChromeLayoutProvider::Get()->GetDistanceMetric(
-                              DISTANCE_CONTROL_LIST_VERTICAL));
+                              DISTANCE_UNRELATED_CONTROL_VERTICAL_LARGE));
     AddValuesRow(layout, profile_diff_map, /*show_row_label=*/true,
                  /*edit_button_callback=*/{});
   }
diff --git a/chrome/browser/ui/views/sharing_hub/sharing_hub_bubble_action_button.cc b/chrome/browser/ui/views/sharing_hub/sharing_hub_bubble_action_button.cc
new file mode 100644
index 0000000..e8587f5
--- /dev/null
+++ b/chrome/browser/ui/views/sharing_hub/sharing_hub_bubble_action_button.cc
@@ -0,0 +1,50 @@
+// 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/ui/views/sharing_hub/sharing_hub_bubble_action_button.h"
+
+#include "chrome/app/vector_icons/vector_icons.h"
+#include "chrome/browser/sharing_hub/sharing_hub_model.h"
+#include "chrome/browser/ui/views/hover_button.h"
+#include "chrome/browser/ui/views/sharing_hub/sharing_hub_bubble_view_impl.h"
+#include "ui/base/l10n/l10n_util.h"
+#include "ui/base/metadata/metadata_impl_macros.h"
+#include "ui/views/controls/color_tracking_icon_view.h"
+
+namespace sharing_hub {
+
+namespace {
+
+std::unique_ptr<views::ColorTrackingIconView> CreateIcon(
+    const gfx::VectorIcon& vector_icon) {
+  static constexpr int kPrimaryIconSize = 20;
+  auto icon = std::make_unique<views::ColorTrackingIconView>(vector_icon,
+                                                             kPrimaryIconSize);
+  constexpr auto kPrimaryIconBorder = gfx::Insets(6);
+  icon->SetBorder(views::CreateEmptyBorder(kPrimaryIconBorder));
+  return icon;
+}
+
+}  // namespace
+
+SharingHubBubbleActionButton::SharingHubBubbleActionButton(
+    SharingHubBubbleViewImpl* bubble,
+    const SharingHubAction& action_info)
+    : HoverButton(
+          base::BindRepeating(&SharingHubBubbleViewImpl::OnActionSelected,
+                              base::Unretained(bubble),
+                              base::Unretained(this)),
+          CreateIcon(action_info.icon),
+          l10n_util::GetStringUTF16(action_info.title)) {
+  action_command_id_ = action_info.command_id;
+  action_is_first_party_ = action_info.is_first_party;
+  SetEnabled(true);
+}
+
+SharingHubBubbleActionButton::~SharingHubBubbleActionButton() = default;
+
+BEGIN_METADATA(SharingHubBubbleActionButton, HoverButton)
+END_METADATA
+
+}  // namespace sharing_hub
diff --git a/chrome/browser/ui/views/sharing_hub/sharing_hub_bubble_action_button.h b/chrome/browser/ui/views/sharing_hub/sharing_hub_bubble_action_button.h
new file mode 100644
index 0000000..6c919507
--- /dev/null
+++ b/chrome/browser/ui/views/sharing_hub/sharing_hub_bubble_action_button.h
@@ -0,0 +1,39 @@
+// 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_UI_VIEWS_SHARING_HUB_SHARING_HUB_BUBBLE_ACTION_BUTTON_H_
+#define CHROME_BROWSER_UI_VIEWS_SHARING_HUB_SHARING_HUB_BUBBLE_ACTION_BUTTON_H_
+
+#include <string>
+
+#include "base/bind.h"
+#include "chrome/browser/ui/views/hover_button.h"
+
+namespace sharing_hub {
+
+class SharingHubBubbleViewImpl;
+struct SharingHubAction;
+
+// A button representing an action in the Sharing Hub bubble.
+class SharingHubBubbleActionButton : public HoverButton {
+ public:
+  METADATA_HEADER(SharingHubBubbleActionButton);
+  SharingHubBubbleActionButton(SharingHubBubbleViewImpl* bubble,
+                               const SharingHubAction& action_info);
+  SharingHubBubbleActionButton(const SharingHubBubbleActionButton&) = delete;
+  SharingHubBubbleActionButton& operator=(const SharingHubBubbleActionButton&) =
+      delete;
+  ~SharingHubBubbleActionButton() override;
+
+  int action_command_id() const { return action_command_id_; }
+  bool action_is_first_party() const { return action_is_first_party_; }
+
+ private:
+  int action_command_id_;
+  bool action_is_first_party_;
+};
+
+}  // namespace sharing_hub
+
+#endif  // CHROME_BROWSER_UI_VIEWS_SHARING_HUB_SHARING_HUB_BUBBLE_ACTION_BUTTON_H_
diff --git a/chrome/browser/ui/views/sharing_hub/sharing_hub_bubble_view_impl.cc b/chrome/browser/ui/views/sharing_hub/sharing_hub_bubble_view_impl.cc
index a010acea..f682597 100644
--- a/chrome/browser/ui/views/sharing_hub/sharing_hub_bubble_view_impl.cc
+++ b/chrome/browser/ui/views/sharing_hub/sharing_hub_bubble_view_impl.cc
@@ -4,15 +4,39 @@
 
 #include "chrome/browser/ui/views/sharing_hub/sharing_hub_bubble_view_impl.h"
 
+#include "chrome/browser/sharing_hub/sharing_hub_model.h"
 #include "chrome/browser/ui/sharing_hub/sharing_hub_bubble_controller.h"
 #include "chrome/browser/ui/views/chrome_layout_provider.h"
+#include "chrome/browser/ui/views/sharing_hub/sharing_hub_bubble_action_button.h"
 #include "chrome/grit/generated_resources.h"
+#include "ui/base/l10n/l10n_util.h"
 #include "ui/views/controls/scroll_view.h"
+#include "ui/views/controls/separator.h"
 #include "ui/views/layout/box_layout.h"
 #include "ui/views/layout/fill_layout.h"
 
 namespace sharing_hub {
 
+namespace {
+
+// The valid action button height.
+constexpr int kActionButtonHeight = 56;
+// Maximum number of buttons that are shown without scrolling. If the number of
+// actions is larger than kMaximumButtons, the bubble will be scrollable.
+constexpr int kMaximumButtons = 10;
+
+// Used to group the action buttons together, which makes moving between them
+// with arrow keys possible.
+constexpr int kActionButtonGroup = 0;
+
+views::Separator* GetSeparator() {
+  auto* separator = new views::Separator();
+  separator->SetColor(gfx::kGoogleGrey300);
+  return separator;
+}
+
+}  // namespace
+
 SharingHubBubbleViewImpl::SharingHubBubbleViewImpl(
     views::View* anchor_view,
     content::WebContents* web_contents,
@@ -58,6 +82,16 @@
   ShowForReason(reason);
 }
 
+void SharingHubBubbleViewImpl::OnActionSelected(
+    SharingHubBubbleActionButton* button) {
+  if (!controller_)
+    return;
+
+  controller_->OnActionSelected(button->action_command_id(),
+                                button->action_is_first_party());
+  Hide();
+}
+
 const views::View* SharingHubBubbleViewImpl::GetButtonContainerForTesting()
     const {
   return scroll_view_->contents();
@@ -75,16 +109,30 @@
   SetLayoutManager(std::make_unique<views::FillLayout>());
 
   scroll_view_ = AddChildView(std::make_unique<views::ScrollView>());
+  scroll_view_->ClipHeightTo(0, kActionButtonHeight * kMaximumButtons);
 
-  PopulateScrollView();
+  PopulateScrollView(controller_->GetActions());
 }
 
-void SharingHubBubbleViewImpl::PopulateScrollView() {
+void SharingHubBubbleViewImpl::PopulateScrollView(
+    const std::vector<SharingHubAction>& actions) {
   auto* action_list_view =
       scroll_view_->SetContents(std::make_unique<views::View>());
   action_list_view->SetLayoutManager(std::make_unique<views::BoxLayout>(
       views::BoxLayout::Orientation::kVertical));
 
+  bool separator_added = false;
+  for (const auto& action : actions) {
+    if (!separator_added && !action.is_first_party) {
+      action_list_view->AddChildView(GetSeparator());
+      separator_added = true;
+    }
+
+    auto* view = action_list_view->AddChildView(
+        std::make_unique<SharingHubBubbleActionButton>(this, action));
+    view->SetGroup(kActionButtonGroup);
+  }
+
   MaybeSizeToContents();
   Layout();
 }
diff --git a/chrome/browser/ui/views/sharing_hub/sharing_hub_bubble_view_impl.h b/chrome/browser/ui/views/sharing_hub/sharing_hub_bubble_view_impl.h
index 5979829..4302a440 100644
--- a/chrome/browser/ui/views/sharing_hub/sharing_hub_bubble_view_impl.h
+++ b/chrome/browser/ui/views/sharing_hub/sharing_hub_bubble_view_impl.h
@@ -20,6 +20,8 @@
 namespace sharing_hub {
 
 class SharingHubBubbleController;
+class SharingHubBubbleActionButton;
+struct SharingHubAction;
 
 // View component of the Sharing Hub bubble that allows users to share/save the
 // current page.
@@ -47,14 +49,19 @@
   // Shows the bubble view.
   void Show(DisplayReason reason);
 
+  void OnActionSelected(SharingHubBubbleActionButton* button);
+
   const views::View* GetButtonContainerForTesting() const;
 
  private:
   // views::BubbleDialogDelegateView:
   void Init() override;
 
+  // Creates the scroll view.
+  void CreateScrollView();
+
   // Populates the scroll view containing sharing actions.
-  void PopulateScrollView();
+  void PopulateScrollView(const std::vector<SharingHubAction>& actions);
 
   // Resizes and potentially moves the bubble to fit the content's preferred
   // size.
diff --git a/chrome/browser/ui/web_applications/test/web_app_navigation_browsertest.h b/chrome/browser/ui/web_applications/test/web_app_navigation_browsertest.h
index a752054..3e02443 100644
--- a/chrome/browser/ui/web_applications/test/web_app_navigation_browsertest.h
+++ b/chrome/browser/ui/web_applications/test/web_app_navigation_browsertest.h
@@ -9,7 +9,6 @@
 #include <string>
 
 #include "base/callback_forward.h"
-#include "base/files/file_path.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "chrome/browser/web_applications/components/web_app_id.h"
 #include "chrome/test/base/in_process_browser_test.h"
diff --git a/chrome/browser/ui/webui/print_preview/pdf_printer_handler.cc b/chrome/browser/ui/webui/print_preview/pdf_printer_handler.cc
index 26838e57..502b44b 100644
--- a/chrome/browser/ui/webui/print_preview/pdf_printer_handler.cc
+++ b/chrome/browser/ui/webui/print_preview/pdf_printer_handler.cc
@@ -31,6 +31,7 @@
 #include "chrome/browser/ui/chrome_select_file_policy.h"
 #include "chrome/common/chrome_switches.h"
 #include "chrome/grit/generated_resources.h"
+#include "components/account_id/account_id.h"
 #include "components/cloud_devices/common/printer_description.h"
 #include "components/url_formatter/url_formatter.h"
 #include "content/public/browser/browser_context.h"
@@ -52,6 +53,9 @@
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
 #include "chrome/browser/ash/drive/drive_integration_service.h"
+#include "chrome/browser/ash/profiles/profile_helper.h"
+#include "chrome/browser/ui/ash/holding_space/holding_space_keyed_service.h"
+#include "chrome/browser/ui/ash/holding_space/holding_space_keyed_service_factory.h"
 #endif
 
 namespace printing {
@@ -69,6 +73,15 @@
   }
 };
 
+const AccountId& GetAccountId(Profile* profile) {
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+  const auto* user = ash::ProfileHelper::Get()->GetUserByProfile(profile);
+  return user ? user->GetAccountId() : EmptyAccountId();
+#else
+  return EmptyAccountId();
+#endif
+}
+
 gfx::Size GetDefaultPdfMediaSizeMicrons() {
   PrintingContextDelegate delegate;
   auto printing_context(PrintingContext::Create(&delegate));
@@ -139,12 +152,29 @@
 
 // Callback that stores a PDF file on disk.
 void PrintToPdfCallback(scoped_refptr<base::RefCountedMemory> data,
-                        const base::FilePath& path,
-                        base::OnceClosure pdf_file_saved_closure) {
+                        const base::FilePath& path) {
   base::File file(path,
                   base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE);
   file.WriteAtCurrentPos(reinterpret_cast<const char*>(data->front()),
                          base::checked_cast<int>(data->size()));
+}
+
+// Callback that runs after `PrintToPdfCallback()` returns.
+// TODO(crbug.com/1184422): Add printed pdf to holding space in Lacros.
+void OnPdfPrintedCallback(const AccountId& account_id,
+                          const base::FilePath& path,
+                          base::OnceClosure pdf_file_saved_closure) {
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+  Profile* profile =
+      ash::ProfileHelper::Get()->GetProfileByAccountId(account_id);
+  if (profile) {
+    ash::HoldingSpaceKeyedService* holding_space_keyed_service =
+        ash::HoldingSpaceKeyedServiceFactory::GetInstance()->GetService(
+            profile);
+    if (holding_space_keyed_service)
+      holding_space_keyed_service->AddPrintedPdf(path);
+  }
+#endif
   if (!pdf_file_saved_closure.is_null())
     std::move(pdf_file_saved_closure).Run();
 }
@@ -283,6 +313,11 @@
   pdf_file_saved_closure_ = std::move(closure);
 }
 
+void PdfPrinterHandler::SetPrintToPdfPathForTesting(
+    const base::FilePath& path) {
+  print_to_pdf_path_ = path;
+}
+
 // static
 base::FilePath PdfPrinterHandler::GetFileNameForPrintJobTitle(
     const std::u16string& job_title) {
@@ -393,12 +428,16 @@
 }
 
 void PdfPrinterHandler::PostPrintToPdfTask() {
-  base::ThreadPool::PostTask(
+  base::ThreadPool::PostTaskAndReply(
       FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT},
-      base::BindOnce(&PrintToPdfCallback, print_data_, print_to_pdf_path_,
-                     std::move(pdf_file_saved_closure_)));
+      base::BindOnce(&PrintToPdfCallback, print_data_, print_to_pdf_path_),
+      base::BindOnce(&OnPdfPrintedCallback, GetAccountId(profile_),
+                     print_to_pdf_path_, std::move(pdf_file_saved_closure_)));
+
   print_to_pdf_path_.clear();
-  std::move(print_callback_).Run(base::Value());
+
+  if (print_callback_)
+    std::move(print_callback_).Run(base::Value());
 }
 
 void PdfPrinterHandler::OnGotUniqueFileName(const base::FilePath& path) {
diff --git a/chrome/browser/ui/webui/print_preview/pdf_printer_handler.h b/chrome/browser/ui/webui/print_preview/pdf_printer_handler.h
index 9730721..143c972 100644
--- a/chrome/browser/ui/webui/print_preview/pdf_printer_handler.h
+++ b/chrome/browser/ui/webui/print_preview/pdf_printer_handler.h
@@ -60,6 +60,9 @@
   // Sets |pdf_file_saved_closure_| to |closure|.
   void SetPdfSavedClosureForTesting(base::OnceClosure closure);
 
+  // Sets |print_to_pdf_path_| to |path|.
+  void SetPrintToPdfPathForTesting(const base::FilePath& path);
+
   // Exposed for testing.
   static base::FilePath GetFileNameForPrintJobTitle(
       const std::u16string& job_title);
diff --git a/chrome/browser/ui/webui/settings/chrome_cleanup_handler_win.h b/chrome/browser/ui/webui/settings/chrome_cleanup_handler_win.h
index c942bc27..8b790e28 100644
--- a/chrome/browser/ui/webui/settings/chrome_cleanup_handler_win.h
+++ b/chrome/browser/ui/webui/settings/chrome_cleanup_handler_win.h
@@ -5,7 +5,6 @@
 #ifndef CHROME_BROWSER_UI_WEBUI_SETTINGS_CHROME_CLEANUP_HANDLER_WIN_H_
 #define CHROME_BROWSER_UI_WEBUI_SETTINGS_CHROME_CLEANUP_HANDLER_WIN_H_
 
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_controller_win.h"
 #include "chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_scanner_results_win.h"
diff --git a/chrome/browser/ui/webui/settings/settings_secure_dns_handler_browsertest.cc b/chrome/browser/ui/webui/settings/settings_secure_dns_handler_browsertest.cc
index b57dd85..fc55f42 100644
--- a/chrome/browser/ui/webui/settings/settings_secure_dns_handler_browsertest.cc
+++ b/chrome/browser/ui/webui/settings/settings_secure_dns_handler_browsertest.cc
@@ -6,7 +6,6 @@
 
 #include "base/test/metrics/histogram_tester.h"
 #include "build/build_config.h"
-#include "build/chromeos_buildflags.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/net/dns_probe_test_util.h"
 #include "chrome/browser/net/secure_dns_config.h"
@@ -269,7 +268,7 @@
 
 // On platforms where enterprise policies do not have default values, test
 // that DoH is disabled when non-DoH policies are set.
-#if !BUILDFLAG(IS_CHROMEOS_ASH)
+#if !defined(OS_CHROMEOS)
 IN_PROC_BROWSER_TEST_F(SecureDnsHandlerTest, OtherPoliciesSet) {
   policy::PolicyMap policy_map;
   SetPolicyForPolicyKey(&policy_map, policy::key::kIncognitoModeAvailability,
diff --git a/chrome/browser/upgrade_detector/installed_version_poller.h b/chrome/browser/upgrade_detector/installed_version_poller.h
index 106f380..2bb8cea 100644
--- a/chrome/browser/upgrade_detector/installed_version_poller.h
+++ b/chrome/browser/upgrade_detector/installed_version_poller.h
@@ -8,7 +8,6 @@
 #include <memory>
 
 #include "base/callback.h"
-#include "base/files/file_path.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/optional.h"
diff --git a/chrome/browser/web_applications/components/url_handler_manager_impl.h b/chrome/browser/web_applications/components/url_handler_manager_impl.h
index 2e22e95..ea3b696 100644
--- a/chrome/browser/web_applications/components/url_handler_manager_impl.h
+++ b/chrome/browser/web_applications/components/url_handler_manager_impl.h
@@ -10,7 +10,6 @@
 
 #include "base/bind.h"
 #include "base/command_line.h"
-#include "base/files/file_path.h"
 #include "base/memory/weak_ptr.h"
 #include "chrome/browser/web_applications/components/url_handler_launch_params.h"
 #include "chrome/browser/web_applications/components/url_handler_manager.h"
diff --git a/chrome/browser/web_applications/components/web_app_uninstallation_via_os_settings_registration.h b/chrome/browser/web_applications/components/web_app_uninstallation_via_os_settings_registration.h
index ef9b184..36262aa 100644
--- a/chrome/browser/web_applications/components/web_app_uninstallation_via_os_settings_registration.h
+++ b/chrome/browser/web_applications/components/web_app_uninstallation_via_os_settings_registration.h
@@ -8,7 +8,6 @@
 #include <string>
 
 #include "base/callback.h"
-#include "base/files/file_path.h"
 #include "build/build_config.h"
 #include "chrome/browser/web_applications/components/web_app_id.h"
 #include "components/services/app_service/public/cpp/file_handler.h"
diff --git a/chrome/browser/web_applications/extensions/web_app_extension_shortcut.h b/chrome/browser/web_applications/extensions/web_app_extension_shortcut.h
index 07d1c4f..1b4728f 100644
--- a/chrome/browser/web_applications/extensions/web_app_extension_shortcut.h
+++ b/chrome/browser/web_applications/extensions/web_app_extension_shortcut.h
@@ -9,7 +9,6 @@
 #include <string>
 
 #include "base/callback_forward.h"
-#include "base/files/file_path.h"
 #include "build/build_config.h"
 #include "chrome/browser/web_applications/components/web_app_shortcut.h"
 
diff --git a/chrome/browser/web_applications/extensions/web_app_extension_shortcut_mac.h b/chrome/browser/web_applications/extensions/web_app_extension_shortcut_mac.h
index 395f5e6..dba5e33 100644
--- a/chrome/browser/web_applications/extensions/web_app_extension_shortcut_mac.h
+++ b/chrome/browser/web_applications/extensions/web_app_extension_shortcut_mac.h
@@ -5,8 +5,6 @@
 #ifndef CHROME_BROWSER_WEB_APPLICATIONS_EXTENSIONS_WEB_APP_EXTENSION_SHORTCUT_MAC_H_
 #define CHROME_BROWSER_WEB_APPLICATIONS_EXTENSIONS_WEB_APP_EXTENSION_SHORTCUT_MAC_H_
 
-#include "base/files/file_path.h"
-
 namespace base {
 class CommandLine;
 }
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt
index a8824dc..539e6de 100644
--- a/chrome/build/win32.pgo.txt
+++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@
-chrome-win32-master-1620366527-78dc9eab7d7f9f11d443eaece4da349610b60e5f.profdata
+chrome-win32-master-1620399564-e3ddef8c10b78b4d3ac2ca41ad6bb0fe0fe32793.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt
index 89f1ffa..28c0e0a 100644
--- a/chrome/build/win64.pgo.txt
+++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@
-chrome-win64-master-1620377603-618842026f3ac0ece6a2d2f779f200224c4f888f.profdata
+chrome-win64-master-1620399564-e2566c1bf11558c8537396818f34997ceb1f6220.profdata
diff --git a/chrome/chrome_cleaner/ipc/sandbox.h b/chrome/chrome_cleaner/ipc/sandbox.h
index 49e487d..8b08e59 100644
--- a/chrome/chrome_cleaner/ipc/sandbox.h
+++ b/chrome/chrome_cleaner/ipc/sandbox.h
@@ -11,7 +11,6 @@
 
 #include "base/callback.h"
 #include "base/command_line.h"
-#include "base/files/file_path.h"
 #include "base/process/process.h"
 #include "base/win/scoped_handle.h"
 #include "chrome/chrome_cleaner/os/process.h"
diff --git a/chrome/chrome_cleaner/test/test_scoped_service_handle.h b/chrome/chrome_cleaner/test/test_scoped_service_handle.h
index 0415a25b..de6d6f0 100644
--- a/chrome/chrome_cleaner/test/test_scoped_service_handle.h
+++ b/chrome/chrome_cleaner/test/test_scoped_service_handle.h
@@ -7,7 +7,6 @@
 
 #include <string>
 
-#include "base/files/file_path.h"
 #include "chrome/chrome_cleaner/os/scoped_service_handle.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc
index 757a71a..ffd739b 100644
--- a/chrome/common/chrome_features.cc
+++ b/chrome/common/chrome_features.cc
@@ -87,7 +87,7 @@
 // Enables the built-in DNS resolver.
 const base::Feature kAsyncDns {
   "AsyncDns",
-#if BUILDFLAG(IS_CHROMEOS_ASH) || defined(OS_MAC) || defined(OS_ANDROID)
+#if defined(OS_CHROMEOS) || defined(OS_MAC) || defined(OS_ANDROID)
       base::FEATURE_ENABLED_BY_DEFAULT
 #else
       base::FEATURE_DISABLED_BY_DEFAULT
@@ -330,7 +330,7 @@
 // Enable DNS over HTTPS (DoH).
 const base::Feature kDnsOverHttps {
   "DnsOverHttps",
-#if defined(OS_WIN) || BUILDFLAG(IS_CHROMEOS_ASH) || defined(OS_MAC) || \
+#if defined(OS_WIN) || defined(OS_CHROMEOS) || defined(OS_MAC) || \
     defined(OS_ANDROID)
       base::FEATURE_ENABLED_BY_DEFAULT
 #else
@@ -352,7 +352,7 @@
 // Sets whether the DoH setting is displayed in the settings UI.
 const base::FeatureParam<bool> kDnsOverHttpsShowUiParam {
   &kDnsOverHttps, "ShowUi",
-#if defined(OS_WIN) || BUILDFLAG(IS_CHROMEOS_ASH) || defined(OS_MAC) || \
+#if defined(OS_WIN) || defined(OS_CHROMEOS) || defined(OS_MAC) || \
     defined(OS_ANDROID)
       true
 #else
diff --git a/chrome/common/extensions/extension_constants.h b/chrome/common/extensions/extension_constants.h
index 324ff28..14feb0e 100644
--- a/chrome/common/extensions/extension_constants.h
+++ b/chrome/common/extensions/extension_constants.h
@@ -7,7 +7,6 @@
 
 #include <stdint.h>
 
-#include "base/files/file_path.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "url/gurl.h"
diff --git a/chrome/common/mac/app_mode_common.h b/chrome/common/mac/app_mode_common.h
index c5a5928..6653152d 100644
--- a/chrome/common/mac/app_mode_common.h
+++ b/chrome/common/mac/app_mode_common.h
@@ -9,7 +9,6 @@
 
 #include <string>
 
-#include "base/files/file_path.h"
 #include "base/strings/stringize_macros.h"
 
 #ifdef __OBJC__
diff --git a/chrome/test/base/chrome_unit_test_suite.h b/chrome/test/base/chrome_unit_test_suite.h
index d1555d5..660d415 100644
--- a/chrome/test/base/chrome_unit_test_suite.h
+++ b/chrome/test/base/chrome_unit_test_suite.h
@@ -6,7 +6,6 @@
 #define CHROME_TEST_BASE_CHROME_UNIT_TEST_SUITE_H_
 
 #include "base/compiler_specific.h"
-#include "base/files/file_path.h"
 #include "base/test/test_discardable_memory_allocator.h"
 #include "build/build_config.h"
 #include "chrome/test/base/chrome_test_suite.h"
diff --git a/chrome/updater/BUILD.gn b/chrome/updater/BUILD.gn
index 628757a..13793d6 100644
--- a/chrome/updater/BUILD.gn
+++ b/chrome/updater/BUILD.gn
@@ -250,11 +250,22 @@
     }
   }
 
-  process_version("version_header") {
+  source_set("version_header") {
+    sources = [ "updater_version.h" ]
+  }
+
+  process_version("updater_version_cc") {
     sources = [ "//chrome/VERSION" ]
 
-    template_file = "updater_version.h.in"
-    output = "$target_gen_dir/updater_version.h"
+    template_file = "updater_version.cc.in"
+    output = "$target_gen_dir/updater_version.cc"
+  }
+
+  process_version("updater_version_cc_offset") {
+    sources = [ "//chrome/VERSION" ]
+
+    template_file = "updater_version_offset.cc.in"
+    output = "$target_gen_dir/updater_version_offset.cc"
   }
 
   process_version("branding_header") {
@@ -367,6 +378,7 @@
       ":lib",
       ":updater",
       ":updater_tests_support",
+      ":updater_version_cc",
       ":version_header",
       "//base",
       "//base/test:test_support",
diff --git a/chrome/updater/app/app_install.cc b/chrome/updater/app/app_install.cc
index 3db7603..a397ca6 100644
--- a/chrome/updater/app/app_install.cc
+++ b/chrome/updater/app/app_install.cc
@@ -100,7 +100,7 @@
                                 const base::Version& version) {
   VLOG_IF(1, (version.IsValid()))
       << "Found active version: " << version.GetString();
-  if (version.IsValid() && version >= base::Version(UPDATER_VERSION_STRING)) {
+  if (version.IsValid() && version >= base::Version(kUpdaterVersion)) {
     splash_screen_->Dismiss(base::BindOnce(&AppInstall::MaybeInstallApp, this));
     return;
   }
diff --git a/chrome/updater/app/app_install_mac.mm b/chrome/updater/app/app_install_mac.mm
index 50e18d3..d7a83ff7 100644
--- a/chrome/updater/app/app_install_mac.mm
+++ b/chrome/updater/app/app_install_mac.mm
@@ -16,7 +16,8 @@
 
 void AppInstall::WakeCandidateDone() {
   PollLaunchctlList(
-      updater_scope(), kUpdateServiceLaunchdName, LaunchctlPresence::kPresent,
+      updater_scope(), GetUpdateServiceLaunchdName(),
+      LaunchctlPresence::kPresent,
       base::TimeDelta::FromSeconds(kWaitForLaunchctlUpdateSec),
       base::BindOnce([](scoped_refptr<AppInstall> installer,
                         bool unused) { installer->MaybeInstallApp(); },
diff --git a/chrome/updater/app/app_server.cc b/chrome/updater/app/app_server.cc
index a7f1534..3edd378 100644
--- a/chrome/updater/app/app_server.cc
+++ b/chrome/updater/app/app_server.cc
@@ -56,7 +56,7 @@
                           kErrorFailedToLockPrefsMutex);
   }
 
-  const base::Version this_version(UPDATER_VERSION_STRING);
+  const base::Version this_version(kUpdaterVersion);
   const base::Version active_version(global_prefs->GetActiveVersion());
 
   VLOG(2) << "This version: " << this_version.GetString()
@@ -99,7 +99,7 @@
   if (config_)
     PrefsCommitPendingWrites(config_->GetPrefService());
   if (uninstall_self_) {
-    VLOG(1) << "Uninstalling version " << UPDATER_VERSION_STRING;
+    VLOG(1) << "Uninstalling version " << kUpdaterVersion;
     UninstallSelf();
   } else {
     MaybeUninstall();
@@ -157,7 +157,7 @@
   bool result = SwapRPCInterfaces();
   if (!result)
     return false;
-  global_prefs->SetActiveVersion(UPDATER_VERSION_STRING);
+  global_prefs->SetActiveVersion(kUpdaterVersion);
   global_prefs->SetSwapping(false);
   PrefsCommitPendingWrites(global_prefs->GetPrefService());
   return true;
diff --git a/chrome/updater/app/app_server_unittest.cc b/chrome/updater/app/app_server_unittest.cc
index 89a21b9..a850d46 100644
--- a/chrome/updater/app/app_server_unittest.cc
+++ b/chrome/updater/app/app_server_unittest.cc
@@ -138,7 +138,7 @@
   }
   std::unique_ptr<GlobalPrefs> global_prefs = CreateGlobalPrefs();
   EXPECT_FALSE(global_prefs->GetSwapping());
-  EXPECT_EQ(global_prefs->GetActiveVersion(), UPDATER_VERSION_STRING);
+  EXPECT_EQ(global_prefs->GetActiveVersion(), kUpdaterVersion);
 }
 
 TEST_F(AppServerTestCase, InstallAutoPromotes) {
@@ -155,7 +155,7 @@
   }
   std::unique_ptr<GlobalPrefs> global_prefs = CreateGlobalPrefs();
   EXPECT_FALSE(global_prefs->GetSwapping());
-  EXPECT_EQ(global_prefs->GetActiveVersion(), UPDATER_VERSION_STRING);
+  EXPECT_EQ(global_prefs->GetActiveVersion(), kUpdaterVersion);
 }
 
 TEST_F(AppServerTestCase, SelfPromoteFails) {
@@ -181,7 +181,7 @@
 TEST_F(AppServerTestCase, ActiveDutyAlready) {
   {
     std::unique_ptr<GlobalPrefs> global_prefs = CreateGlobalPrefs();
-    global_prefs->SetActiveVersion(UPDATER_VERSION_STRING);
+    global_prefs->SetActiveVersion(kUpdaterVersion);
     PrefsCommitPendingWrites(global_prefs->GetPrefService());
     std::unique_ptr<LocalPrefs> local_prefs = CreateLocalPrefs();
     local_prefs->SetQualified(true);
@@ -198,13 +198,13 @@
   }
   std::unique_ptr<GlobalPrefs> global_prefs = CreateGlobalPrefs();
   EXPECT_FALSE(global_prefs->GetSwapping());
-  EXPECT_EQ(global_prefs->GetActiveVersion(), UPDATER_VERSION_STRING);
+  EXPECT_EQ(global_prefs->GetActiveVersion(), kUpdaterVersion);
 }
 
 TEST_F(AppServerTestCase, StateDirty) {
   {
     std::unique_ptr<GlobalPrefs> global_prefs = CreateGlobalPrefs();
-    global_prefs->SetActiveVersion(UPDATER_VERSION_STRING);
+    global_prefs->SetActiveVersion(kUpdaterVersion);
     global_prefs->SetSwapping(true);
     PrefsCommitPendingWrites(global_prefs->GetPrefService());
     std::unique_ptr<LocalPrefs> local_prefs = CreateLocalPrefs();
@@ -223,13 +223,13 @@
   }
   std::unique_ptr<GlobalPrefs> global_prefs = CreateGlobalPrefs();
   EXPECT_FALSE(global_prefs->GetSwapping());
-  EXPECT_EQ(global_prefs->GetActiveVersion(), UPDATER_VERSION_STRING);
+  EXPECT_EQ(global_prefs->GetActiveVersion(), kUpdaterVersion);
 }
 
 TEST_F(AppServerTestCase, StateDirtySwapFails) {
   {
     std::unique_ptr<GlobalPrefs> global_prefs = CreateGlobalPrefs();
-    global_prefs->SetActiveVersion(UPDATER_VERSION_STRING);
+    global_prefs->SetActiveVersion(kUpdaterVersion);
     global_prefs->SetSwapping(true);
     PrefsCommitPendingWrites(global_prefs->GetPrefService());
     std::unique_ptr<LocalPrefs> local_prefs = CreateLocalPrefs();
@@ -247,7 +247,7 @@
   }
   std::unique_ptr<GlobalPrefs> global_prefs = CreateGlobalPrefs();
   EXPECT_TRUE(global_prefs->GetSwapping());
-  EXPECT_EQ(global_prefs->GetActiveVersion(), UPDATER_VERSION_STRING);
+  EXPECT_EQ(global_prefs->GetActiveVersion(), kUpdaterVersion);
 }
 
 }  // namespace updater
diff --git a/chrome/updater/app/server/win/com_classes.cc b/chrome/updater/app/server/win/com_classes.cc
index 4efc4f85..4618f31a 100644
--- a/chrome/updater/app/server/win/com_classes.cc
+++ b/chrome/updater/app/server/win/com_classes.cc
@@ -104,10 +104,7 @@
   // non-blocking function of `UpdateServiceImpl`. This results in some
   // code duplication but it avoids the complexities of making this function
   // non-blocking.
-  *version =
-      base::win::ScopedBstr(
-          base::UTF8ToWide(base::Version(UPDATER_VERSION_STRING).GetString()))
-          .Release();
+  *version = base::win::ScopedBstr(kUpdaterVersionUtf16).Release();
   return S_OK;
 }
 
diff --git a/chrome/updater/device_management/dm_client.cc b/chrome/updater/device_management/dm_client.cc
index 82b679b..a0d73415 100644
--- a/chrome/updater/device_management/dm_client.cc
+++ b/chrome/updater/device_management/dm_client.cc
@@ -16,6 +16,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/sequence_checker.h"
+#include "base/strings/strcat.h"
 #include "base/strings/stringprintf.h"
 #include "base/system/sys_info.h"
 #include "base/threading/sequenced_task_runner_handle.h"
@@ -78,7 +79,7 @@
   }
 
   std::string GetAgentParameter() const override {
-    return "Updater-" UPDATER_VERSION_STRING;
+    return base::StrCat({"Updater-", kUpdaterVersion});
   }
 
   std::string GetPlatformParameter() const override;
diff --git a/chrome/updater/mac/BUILD.gn b/chrome/updater/mac/BUILD.gn
index 19868a6..b1d0aad 100644
--- a/chrome/updater/mac/BUILD.gn
+++ b/chrome/updater/mac/BUILD.gn
@@ -63,6 +63,22 @@
     ":network_fetcher_sources",
     ":updater_setup_sources",
     "//chrome/updater:lib",
+    "//chrome/updater:updater_version_cc",
+  ]
+}
+
+mac_app_bundle("updater_bundle_test_v2") {
+  info_plist_target = ":updater_plist"
+  output_name = updater_product_full_name + "_Test_V2"
+  extra_substitutions =
+      [ "MAC_BUNDLE_IDENTIFIER=$mac_updater_bundle_identifier" ]
+
+  sources = [ "main.cc" ]
+  deps = [
+    ":network_fetcher_sources",
+    ":updater_setup_sources",
+    "//chrome/updater:lib",
+    "//chrome/updater:updater_version_cc_offset",
   ]
 }
 
diff --git a/chrome/updater/mac/mac_util.h b/chrome/updater/mac/mac_util.h
index c548c46a..f17253d 100644
--- a/chrome/updater/mac/mac_util.h
+++ b/chrome/updater/mac/mac_util.h
@@ -42,7 +42,7 @@
     const base::Version& version);
 
 // The same as GetVersionedUpdaterFolderPathForVersion, where the version is
-// UPDATER_VERSION_STRING.
+// kUpdaterVersion.
 base::Optional<base::FilePath> GetVersionedUpdaterFolderPath(
     UpdaterScope scope);
 
diff --git a/chrome/updater/mac/mac_util.mm b/chrome/updater/mac/mac_util.mm
index 1e4b70e1..64bf886 100644
--- a/chrome/updater/mac/mac_util.mm
+++ b/chrome/updater/mac/mac_util.mm
@@ -96,7 +96,7 @@
   base::Optional<base::FilePath> path = GetUpdaterFolderPath(scope);
   if (!path)
     return base::nullopt;
-  return path->AppendASCII(UPDATER_VERSION_STRING);
+  return path->AppendASCII(kUpdaterVersion);
 }
 
 base::Optional<base::FilePath> GetExecutableFolderPathForVersion(
diff --git a/chrome/updater/mac/xpc_service_names.h b/chrome/updater/mac/xpc_service_names.h
index dc224b4..1fe356a 100644
--- a/chrome/updater/mac/xpc_service_names.h
+++ b/chrome/updater/mac/xpc_service_names.h
@@ -10,8 +10,8 @@
 
 namespace updater {
 
-extern const char kUpdateServiceInternalLaunchdName[];
-extern const char kUpdateServiceLaunchdName[];
+std::string GetUpdateServiceLaunchdName();
+std::string GetUpdateServiceInternalLaunchdName();
 
 base::ScopedCFTypeRef<CFStringRef> CopyUpdateServiceLaunchdName();
 base::ScopedCFTypeRef<CFStringRef> CopyWakeLaunchdName();
diff --git a/chrome/updater/mac/xpc_service_names.mm b/chrome/updater/mac/xpc_service_names.mm
index c3cda02..cf8510b 100644
--- a/chrome/updater/mac/xpc_service_names.mm
+++ b/chrome/updater/mac/xpc_service_names.mm
@@ -13,21 +13,33 @@
 
 namespace updater {
 
-const char kUpdateServiceInternalLaunchdName[] =
-    MAC_BUNDLE_IDENTIFIER_STRING ".update-internal." UPDATER_VERSION_STRING;
+namespace {
+
+const char kUpdateServiceInternalLaunchdPrefix[] =
+    MAC_BUNDLE_IDENTIFIER_STRING ".update-internal.";
 const char kUpdateServiceLaunchdName[] = MAC_BUNDLE_IDENTIFIER_STRING ".update";
 
+}  // namespace
+
+std::string GetUpdateServiceLaunchdName() {
+  return kUpdateServiceLaunchdName;
+}
+
+std::string GetUpdateServiceInternalLaunchdName() {
+  return base::StrCat({kUpdateServiceInternalLaunchdPrefix, kUpdaterVersion});
+}
+
 base::ScopedCFTypeRef<CFStringRef> CopyUpdateServiceLaunchdName() {
   return base::SysUTF8ToCFStringRef(kUpdateServiceLaunchdName);
 }
 
 base::ScopedCFTypeRef<CFStringRef> CopyWakeLaunchdName() {
-  return base::SysUTF8ToCFStringRef(MAC_BUNDLE_IDENTIFIER_STRING
-                                    ".wake." UPDATER_VERSION_STRING);
+  return base::SysUTF8ToCFStringRef(
+      base::StrCat({MAC_BUNDLE_IDENTIFIER_STRING ".wake.", kUpdaterVersion}));
 }
 
 base::ScopedCFTypeRef<CFStringRef> CopyUpdateServiceInternalLaunchdName() {
-  return base::SysUTF8ToCFStringRef(kUpdateServiceInternalLaunchdName);
+  return base::SysUTF8ToCFStringRef(GetUpdateServiceInternalLaunchdName());
 }
 
 base::scoped_nsobject<NSString> GetUpdateServiceLaunchdLabel() {
diff --git a/chrome/updater/setup_mac.mm b/chrome/updater/setup_mac.mm
index 4b6733d..66c1d59 100644
--- a/chrome/updater/setup_mac.mm
+++ b/chrome/updater/setup_mac.mm
@@ -27,7 +27,7 @@
     return;
   }
   PollLaunchctlList(
-      scope, kUpdateServiceInternalLaunchdName, LaunchctlPresence::kPresent,
+      scope, GetUpdateServiceInternalLaunchdName(), LaunchctlPresence::kPresent,
       base::TimeDelta::FromSeconds(kWaitForLaunchctlUpdateSec),
       base::BindOnce(
           [](base::OnceCallback<void(int)> callback, bool service_exists) {
diff --git a/chrome/updater/test/integration_tests.cc b/chrome/updater/test/integration_tests.cc
index e547738..b657eab 100644
--- a/chrome/updater/test/integration_tests.cc
+++ b/chrome/updater/test/integration_tests.cc
@@ -157,7 +157,7 @@
 TEST_F(IntegrationTest, InstallUninstall) {
   Install();
   ExpectInstalled();
-  ExpectVersionActive(UPDATER_VERSION_STRING);
+  ExpectVersionActive(kUpdaterVersion);
   ExpectActiveUpdater();
 #if defined(OS_WIN)
   // Tests the COM registration after the install. For now, tests that the
@@ -172,7 +172,7 @@
   Install();
   ExpectInstalled();
   SetupFakeUpdaterHigherVersion();
-  ExpectVersionNotActive(UPDATER_VERSION_STRING);
+  ExpectVersionNotActive(kUpdaterVersion);
   SleepFor(2);
 
   RunWake(0);
@@ -184,7 +184,7 @@
 
   ExpectCandidateUninstalled();
   // The candidate uninstall should not have altered global prefs.
-  ExpectVersionNotActive(UPDATER_VERSION_STRING);
+  ExpectVersionNotActive(kUpdaterVersion);
   ExpectVersionNotActive("0.0.0.0");
 
   Uninstall();
@@ -194,7 +194,7 @@
 TEST_F(IntegrationTest, RegisterTestApp) {
   RegisterTestApp();
   ExpectInstalled();
-  ExpectVersionActive(UPDATER_VERSION_STRING);
+  ExpectVersionActive(kUpdaterVersion);
   ExpectActiveUpdater();
   Uninstall();
 }
@@ -240,7 +240,7 @@
 TEST_F(IntegrationTest, UnregisterUninstalledApp) {
   RegisterTestApp();
   ExpectInstalled();
-  ExpectVersionActive(UPDATER_VERSION_STRING);
+  ExpectVersionActive(kUpdaterVersion);
   ExpectActiveUpdater();
 
   RegisterApp("test1");
@@ -262,7 +262,7 @@
 TEST_F(IntegrationTest, UninstallUpdaterWhenAllAppsUninstalled) {
   RegisterTestApp();
   ExpectInstalled();
-  ExpectVersionActive(UPDATER_VERSION_STRING);
+  ExpectVersionActive(kUpdaterVersion);
   ExpectActiveUpdater();
 
   SetExistenceCheckerPath(kTestAppId,
@@ -279,7 +279,7 @@
 TEST_F(IntegrationTest, UnregisterUnownedApp) {
   Install();
   ExpectInstalled();
-  ExpectVersionActive(UPDATER_VERSION_STRING);
+  ExpectVersionActive(kUpdaterVersion);
   ExpectActiveUpdater();
 
   RegisterApp("test1");
diff --git a/chrome/updater/test/integration_tests_impl.cc b/chrome/updater/test/integration_tests_impl.cc
index 5f887b0..9b3ebd1 100644
--- a/chrome/updater/test/integration_tests_impl.cc
+++ b/chrome/updater/test/integration_tests_impl.cc
@@ -145,7 +145,7 @@
 void SetupFakeUpdaterVersion(UpdaterScope scope, int offset) {
   ASSERT_NE(offset, 0);
   std::vector<uint32_t> components =
-      base::Version(UPDATER_VERSION_STRING).components();
+      base::Version(kUpdaterVersion).components();
   base::CheckedNumeric<uint32_t> new_version = components[0];
   new_version += offset;
   ASSERT_TRUE(new_version.AssignIfValid(&components[0]));
diff --git a/chrome/updater/test/integration_tests_mac.mm b/chrome/updater/test/integration_tests_mac.mm
index 529d5888..ff45540 100644
--- a/chrome/updater/test/integration_tests_mac.mm
+++ b/chrome/updater/test/integration_tests_mac.mm
@@ -193,8 +193,8 @@
   if (path)
     EXPECT_FALSE(base::PathExists(*path));
 
-  ExpectServiceAbsent(scope, kUpdateServiceLaunchdName);
-  ExpectServiceAbsent(scope, kUpdateServiceInternalLaunchdName);
+  ExpectServiceAbsent(scope, GetUpdateServiceLaunchdName());
+  ExpectServiceAbsent(scope, GetUpdateServiceInternalLaunchdName());
 }
 
 void ExpectInstalled(UpdaterScope scope) {
diff --git a/chrome/updater/test/integration_tests_win.cc b/chrome/updater/test/integration_tests_win.cc
index be67fce..62ff98b 100644
--- a/chrome/updater/test/integration_tests_win.cc
+++ b/chrome/updater/test/integration_tests_win.cc
@@ -63,7 +63,7 @@
     return base::nullopt;
   return app_data_dir.AppendASCII(COMPANY_SHORTNAME_STRING)
       .AppendASCII(PRODUCT_FULLNAME_STRING)
-      .AppendASCII(UPDATER_VERSION_STRING);
+      .AppendASCII(kUpdaterVersion);
 }
 
 std::wstring GetAppClientStateKey(const std::string& id) {
diff --git a/chrome/updater/test/test_app/BUILD.gn b/chrome/updater/test/test_app/BUILD.gn
index b192ed19..6f829ef 100644
--- a/chrome/updater/test/test_app/BUILD.gn
+++ b/chrome/updater/test/test_app/BUILD.gn
@@ -63,6 +63,7 @@
     "//base",
     "//chrome/updater:base",
     "//chrome/updater:lib",
+    "//chrome/updater:updater_version_cc",
     "//chrome/updater:version_header",
     "//components/update_client:update_client",
   ]
diff --git a/chrome/updater/update_service.h b/chrome/updater/update_service.h
index 8beba15..4481292 100644
--- a/chrome/updater/update_service.h
+++ b/chrome/updater/update_service.h
@@ -162,8 +162,8 @@
       base::OnceCallback<void(const RegistrationResponse&)>;
 
   // Returns the version of the active updater. In the current implementation,
-  // this value corresponds to UPDATER_VERSION. The version object is invalid
-  // ]if an error occurs.
+  // this value corresponds to kUpdaterVersion. The version object is invalid
+  // if an error occurs.
   virtual void GetVersion(
       base::OnceCallback<void(const base::Version&)>) const = 0;
 
diff --git a/chrome/updater/update_service_impl.cc b/chrome/updater/update_service_impl.cc
index 6af967d4..9543d9c 100644
--- a/chrome/updater/update_service_impl.cc
+++ b/chrome/updater/update_service_impl.cc
@@ -161,8 +161,8 @@
     base::OnceCallback<void(const base::Version&)> callback) const {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   main_task_runner_->PostTask(
-      FROM_HERE, base::BindOnce(std::move(callback),
-                                base::Version(UPDATER_VERSION_STRING)));
+      FROM_HERE,
+      base::BindOnce(std::move(callback), base::Version(kUpdaterVersion)));
 }
 
 void UpdateServiceImpl::RegisterApp(
@@ -174,7 +174,7 @@
   if (!base::Contains(persisted_data_->GetAppIds(), kUpdaterAppId)) {
     RegistrationRequest updater_request;
     updater_request.app_id = kUpdaterAppId;
-    updater_request.version = base::Version(UPDATER_VERSION_STRING);
+    updater_request.version = base::Version(kUpdaterVersion);
     persisted_data_->RegisterApp(updater_request);
     update_client_->SendRegistrationPing(
         updater_request.app_id, updater_request.version, base::DoNothing());
diff --git a/chrome/updater/updater.cc b/chrome/updater/updater.cc
index c3bfca8..2fbc7df 100644
--- a/chrome/updater/updater.cc
+++ b/chrome/updater/updater.cc
@@ -67,7 +67,7 @@
                        true,    // enable_thread_id
                        true,    // enable_timestamp
                        false);  // enable_tickcount
-  VLOG(1) << "Version " << UPDATER_VERSION_STRING << ", log file "
+  VLOG(1) << "Version " << kUpdaterVersion << ", log file "
           << settings.log_file_path;
 }
 
@@ -80,7 +80,7 @@
     VLOG(1) << "Crash reporting initialized.";
   else
     VLOG(1) << "Crash reporting is not available.";
-  StartCrashReporter(UPDATER_VERSION_STRING);
+  StartCrashReporter(kUpdaterVersion);
 }
 
 }  // namespace
diff --git a/chrome/updater/updater_version.cc.in b/chrome/updater/updater_version.cc.in
new file mode 100644
index 0000000..2948582
--- /dev/null
+++ b/chrome/updater/updater_version.cc.in
@@ -0,0 +1,8 @@
+// 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/updater/updater_version.h"
+
+const char kUpdaterVersion[] = "@MAJOR@.@MINOR@.@BUILD@.@PATCH@";
+const wchar_t kUpdaterVersionUtf16[] = L"@MAJOR@.@MINOR@.@BUILD@.@PATCH@";
diff --git a/chrome/updater/updater_version.h b/chrome/updater/updater_version.h
new file mode 100644
index 0000000..f1c7238
--- /dev/null
+++ b/chrome/updater/updater_version.h
@@ -0,0 +1,11 @@
+// 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_UPDATER_UPDATER_VERSION_H_
+#define CHROME_UPDATER_UPDATER_VERSION_H_
+
+extern const char kUpdaterVersion[];
+extern const wchar_t kUpdaterVersionUtf16[];
+
+#endif  // CHROME_UPDATER_UPDATER_VERSION_H_
diff --git a/chrome/updater/updater_version.h.in b/chrome/updater/updater_version.h.in
deleted file mode 100644
index 9f105709..0000000
--- a/chrome/updater/updater_version.h.in
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright 2019 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.
-
-// Version Information
-
-#define UPDATER_VERSION @MAJOR@,@MINOR@,@BUILD@,@PATCH@
-#define UPDATER_VERSION_STRING "@MAJOR@.@MINOR@.@BUILD@.@PATCH@"
diff --git a/chrome/updater/updater_version_offset.cc.in b/chrome/updater/updater_version_offset.cc.in
new file mode 100644
index 0000000..e5d0355
--- /dev/null
+++ b/chrome/updater/updater_version_offset.cc.in
@@ -0,0 +1,11 @@
+// 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/updater/updater_version.h"
+
+// The offset version is major.minor.build.(patch * 10 + 1). This is used
+// to build a copy of the updater at a different version for the purposes of
+// testing.
+const char kUpdaterVersion[] = "@MAJOR@.@MINOR@.@BUILD@.@PATCH@1";
+const wchar_t kUpdaterVersionUtf16[] = L"@MAJOR@.@MINOR@.@BUILD@.@PATCH@1";
diff --git a/chrome/updater/util.cc b/chrome/updater/util.cc
index fbacbaf..e5c892d 100644
--- a/chrome/updater/util.cc
+++ b/chrome/updater/util.cc
@@ -122,7 +122,7 @@
     return base::nullopt;
   }
 
-  const auto versioned_dir = product_dir->AppendASCII(UPDATER_VERSION_STRING);
+  const auto versioned_dir = product_dir->AppendASCII(kUpdaterVersion);
   if (!base::CreateDirectory(versioned_dir)) {
     LOG(ERROR) << "Can't create versioned directory.";
     return base::nullopt;
diff --git a/chrome/updater/win/BUILD.gn b/chrome/updater/win/BUILD.gn
index 23da1a7..94849fa 100644
--- a/chrome/updater/win/BUILD.gn
+++ b/chrome/updater/win/BUILD.gn
@@ -38,6 +38,28 @@
     ":version_resources",
     "//build/win:default_exe_manifest",
     "//chrome/updater:lib",
+    "//chrome/updater:updater_version_cc",
+    "//chrome/updater/win/ui:ui_resources",
+  ]
+
+  data_deps = [ ":uninstall.cmd" ]
+}
+
+executable("updater_exe_test_v2") {
+  sources = [
+    "main.cc",
+    "updater.rc",
+  ]
+
+  configs -= [ "//build/config/compiler:cet_shadow_stack" ]
+  configs += [ "//build/config/win:windowed" ]
+
+  deps = [
+    ":app_install_controller",
+    ":version_resources",
+    "//build/win:default_exe_manifest",
+    "//chrome/updater:lib",
+    "//chrome/updater:updater_version_cc_offset",
     "//chrome/updater/win/ui:ui_resources",
   ]
 
diff --git a/chrome/updater/win/setup/setup.cc b/chrome/updater/win/setup/setup.cc
index 4d29710..3db7701 100644
--- a/chrome/updater/win/setup/setup.cc
+++ b/chrome/updater/win/setup/setup.cc
@@ -160,9 +160,9 @@
        {GetRegistryKeyClientsUpdater(), GetRegistryKeyClientStateUpdater()}) {
     install_list->AddCreateRegKeyWorkItem(key, key_path,
                                           WorkItem::kWow64Default);
-    install_list->AddSetRegValueWorkItem(
-        key, key_path, WorkItem::kWow64Default, kRegValuePV,
-        base::ASCIIToWide(UPDATER_VERSION_STRING), true);
+    install_list->AddSetRegValueWorkItem(key, key_path, WorkItem::kWow64Default,
+                                         kRegValuePV, kUpdaterVersionUtf16,
+                                         true);
     install_list->AddSetRegValueWorkItem(
         key, key_path, WorkItem::kWow64Default, kRegValueName,
         base::ASCIIToWide(PRODUCT_FULLNAME_STRING), true);
diff --git a/chrome/updater/win/test/BUILD.gn b/chrome/updater/win/test/BUILD.gn
index fd7f1dc..928038e7 100644
--- a/chrome/updater/win/test/BUILD.gn
+++ b/chrome/updater/win/test/BUILD.gn
@@ -61,5 +61,6 @@
     "//base/test:test_support",
     "//build/win:default_exe_manifest",
     "//chrome/updater:lib",
+    "//chrome/updater:updater_version_cc",
   ]
 }
diff --git a/chromecast/browser/pref_service_helper.h b/chromecast/browser/pref_service_helper.h
index 2718899..6045d2e7 100644
--- a/chromecast/browser/pref_service_helper.h
+++ b/chromecast/browser/pref_service_helper.h
@@ -11,7 +11,6 @@
 #include <set>
 #include <string>
 
-#include "base/files/file_path.h"
 #include "base/memory/ref_counted.h"
 #include "base/threading/thread_checker.h"
 #include "components/prefs/pref_service.h"
diff --git a/chromecast/browser/webview/platform_views_grpc_service.h b/chromecast/browser/webview/platform_views_grpc_service.h
index da822d0..4551d8a 100644
--- a/chromecast/browser/webview/platform_views_grpc_service.h
+++ b/chromecast/browser/webview/platform_views_grpc_service.h
@@ -7,7 +7,6 @@
 
 #include <string>
 
-#include "base/files/file_path.h"
 #include "base/memory/weak_ptr.h"
 #include "base/threading/platform_thread.h"
 #include "base/threading/thread_task_runner_handle.h"
diff --git a/chromecast/common/cast_content_client.h b/chromecast/common/cast_content_client.h
index 7ac0338..ca62e0f 100644
--- a/chromecast/common/cast_content_client.h
+++ b/chromecast/common/cast_content_client.h
@@ -7,7 +7,6 @@
 
 #include <vector>
 
-#include "base/files/file_path.h"
 #include "content/public/common/content_client.h"
 #include "url/gurl.h"
 
diff --git a/chromeos/CHROMEOS_LKGM b/chromeos/CHROMEOS_LKGM
index 9d9f2a04..c4acb9a2 100644
--- a/chromeos/CHROMEOS_LKGM
+++ b/chromeos/CHROMEOS_LKGM
@@ -1 +1 @@
-13955.0.0
\ No newline at end of file
+13956.0.0
\ No newline at end of file
diff --git a/chromeos/components/eche_app_ui/eche_connector.cc b/chromeos/components/eche_app_ui/eche_connector.cc
index 55e6d003..295c848 100644
--- a/chromeos/components/eche_app_ui/eche_connector.cc
+++ b/chromeos/components/eche_app_ui/eche_connector.cc
@@ -31,6 +31,9 @@
   const FeatureStatus feature_status =
       eche_feature_status_provider_->GetStatus();
   switch (feature_status) {
+    case FeatureStatus::kDependentFeature:
+      PA_LOG(WARNING) << "Attempting to send message with ineligible dep";
+      break;
     case FeatureStatus::kIneligible:
       PA_LOG(WARNING) << "Attempting to send message for ineligible feature";
       break;
diff --git a/chromeos/components/eche_app_ui/eche_feature_status_provider.cc b/chromeos/components/eche_app_ui/eche_feature_status_provider.cc
index 3f28585..cfd9ebb 100644
--- a/chromeos/components/eche_app_ui/eche_feature_status_provider.cc
+++ b/chromeos/components/eche_app_ui/eche_feature_status_provider.cc
@@ -149,7 +149,7 @@
     case phonehub::FeatureStatus::kEnabledAndConnecting:
       FALLTHROUGH;
     case phonehub::FeatureStatus::kEnabledButDisconnected:
-      return FeatureStatus::kIneligible;
+      return FeatureStatus::kDependentFeature;
     case phonehub::FeatureStatus::kEnabledAndConnected:
       break;
   }
diff --git a/chromeos/components/eche_app_ui/feature_status.cc b/chromeos/components/eche_app_ui/feature_status.cc
index 0af1c9b..28b0247 100644
--- a/chromeos/components/eche_app_ui/feature_status.cc
+++ b/chromeos/components/eche_app_ui/feature_status.cc
@@ -24,6 +24,9 @@
     case FeatureStatus::kConnected:
       stream << "[Enabled; connected]";
       break;
+    case FeatureStatus::kDependentFeature:
+      stream << "[Dependent feature not in a compatible state]";
+      break;
   }
 
   return stream;
diff --git a/chromeos/components/eche_app_ui/feature_status.h b/chromeos/components/eche_app_ui/feature_status.h
index a14a5a1d4..ed8154e 100644
--- a/chromeos/components/eche_app_ui/feature_status.h
+++ b/chromeos/components/eche_app_ui/feature_status.h
@@ -30,6 +30,9 @@
 
   // The feature is enabled, and there is an active connection with the phone.
   kConnected = 4,
+
+  // A dependent feature is in an incompatible state.
+  kDependentFeature = 5,
 };
 
 std::ostream& operator<<(std::ostream& stream, FeatureStatus status);
diff --git a/chromeos/components/sync_wifi/local_network_collector_impl_unittest.cc b/chromeos/components/sync_wifi/local_network_collector_impl_unittest.cc
index c70f3b8..8fb8e73 100644
--- a/chromeos/components/sync_wifi/local_network_collector_impl_unittest.cc
+++ b/chromeos/components/sync_wifi/local_network_collector_impl_unittest.cc
@@ -73,11 +73,6 @@
     on_get_all_syncable_networks_count_ = 0;
   }
 
-  void TearDown() override {
-    chromeos::NetworkHandler::Shutdown();
-    testing::Test::TearDown();
-  }
-
   void OnGetAllSyncableNetworks(
       std::vector<std::string> expected,
       std::vector<sync_pb::WifiConfigurationSpecifics> result) {
diff --git a/chromeos/components/sync_wifi/network_test_helper.cc b/chromeos/components/sync_wifi/network_test_helper.cc
index d3fc052..04b3290 100644
--- a/chromeos/components/sync_wifi/network_test_helper.cc
+++ b/chromeos/components/sync_wifi/network_test_helper.cc
@@ -9,7 +9,10 @@
 #include "base/strings/stringprintf.h"
 #include "chromeos/components/sync_wifi/network_type_conversions.h"
 #include "chromeos/login/login_state/login_state.h"
+#include "chromeos/network/cellular_esim_profile_handler_impl.h"
+#include "chromeos/network/cellular_metrics_logger.h"
 #include "chromeos/network/network_handler.h"
+#include "chromeos/network/network_handler_test_helper.h"
 #include "chromeos/network/network_metadata_store.h"
 #include "chromeos/services/network_config/in_process_instance.h"
 #include "components/account_id/account_id.h"
@@ -30,6 +33,9 @@
   PrefProxyConfigTrackerImpl::RegisterPrefs(local_state_.registry());
   ::onc::RegisterProfilePrefs(user_prefs_.registry());
   ::onc::RegisterPrefs(local_state_.registry());
+  CellularMetricsLogger::RegisterLocalStatePrefs(local_state_.registry());
+  CellularESimProfileHandlerImpl::RegisterLocalStatePrefs(
+      local_state_.registry());
   NetworkMetadataStore::RegisterPrefs(user_prefs_.registry());
   NetworkMetadataStore::RegisterPrefs(local_state_.registry());
 
@@ -67,12 +73,13 @@
 }
 
 NetworkTestHelper::~NetworkTestHelper() {
+  network_handler_test_helper_.reset();
   LoginState::Shutdown();
   ui_proxy_config_service_.reset();
 }
 
 void NetworkTestHelper::SetUp() {
-  NetworkHandler::Initialize();
+  network_handler_test_helper_ = std::make_unique<NetworkHandlerTestHelper>();
   NetworkHandler::Get()->InitializePrefServices(&user_prefs_, &local_state_);
   network_state_helper_.ResetDevicesAndServices();
   network_state_helper_.profile_test()->AddProfile(
diff --git a/chromeos/components/sync_wifi/network_test_helper.h b/chromeos/components/sync_wifi/network_test_helper.h
index a6863ddf5..f7510e5b 100644
--- a/chromeos/components/sync_wifi/network_test_helper.h
+++ b/chromeos/components/sync_wifi/network_test_helper.h
@@ -24,6 +24,8 @@
 
 namespace chromeos {
 
+class NetworkHandlerTestHelper;
+
 namespace sync_wifi {
 
 // Helper for tests which need to have fake network classes configured.
@@ -60,6 +62,7 @@
       managed_network_configuration_handler_;
   std::unique_ptr<UIProxyConfigService> ui_proxy_config_service_;
   std::unique_ptr<user_manager::ScopedUserManager> scoped_user_manager_;
+  std::unique_ptr<NetworkHandlerTestHelper> network_handler_test_helper_;
   sync_preferences::TestingPrefServiceSyncable user_prefs_;
 
   const user_manager::User* primary_user_;
diff --git a/chromeos/components/sync_wifi/synced_network_metrics_logger_unittest.cc b/chromeos/components/sync_wifi/synced_network_metrics_logger_unittest.cc
index 245f1e1..66fa6b5 100644
--- a/chromeos/components/sync_wifi/synced_network_metrics_logger_unittest.cc
+++ b/chromeos/components/sync_wifi/synced_network_metrics_logger_unittest.cc
@@ -44,11 +44,6 @@
             /* network_connection_handler */ nullptr);
   }
 
-  void TearDown() override {
-    chromeos::NetworkHandler::Shutdown();
-    testing::Test::TearDown();
-  }
-
   void SimulateConnectionFailure(std::string error) {
     const NetworkState* network = CreateNetwork(/*from_sync=*/true);
     SetNetworkProperty(network->path(), shill::kStateProperty,
diff --git a/chromeos/components/sync_wifi/synced_network_updater_impl_unittest.cc b/chromeos/components/sync_wifi/synced_network_updater_impl_unittest.cc
index 84dce45..17469e4 100644
--- a/chromeos/components/sync_wifi/synced_network_updater_impl_unittest.cc
+++ b/chromeos/components/sync_wifi/synced_network_updater_impl_unittest.cc
@@ -94,11 +94,6 @@
         timer_factory_.get(), metrics_logger_.get());
   }
 
-  void TearDown() override {
-    chromeos::NetworkHandler::Shutdown();
-    testing::Test::TearDown();
-  }
-
   network_config::mojom::ManagedPropertiesPtr GetManagedProperties(
       const std::string& guid) {
     network_config::mojom::ManagedPropertiesPtr result;
diff --git a/chromeos/components/sync_wifi/wifi_configuration_bridge_unittest.cc b/chromeos/components/sync_wifi/wifi_configuration_bridge_unittest.cc
index b4d2e811..a59e2bc 100644
--- a/chromeos/components/sync_wifi/wifi_configuration_bridge_unittest.cc
+++ b/chromeos/components/sync_wifi/wifi_configuration_bridge_unittest.cc
@@ -191,11 +191,6 @@
     init_callback_ = std::move(callback);
   }
 
-  void TearDown() override {
-    // TODO(cvandermerwe) Put the shutdown logic into network_test_helper.
-    NetworkHandler::Shutdown();
-  }
-
   void DisableBridge() {
     ON_CALL(mock_processor_, IsTrackingMetadata()).WillByDefault(Return(false));
   }
diff --git a/chromeos/components/telemetry_extension_ui/telemetry_extension_untrusted_ui.h b/chromeos/components/telemetry_extension_ui/telemetry_extension_untrusted_ui.h
index 3ba0071..fc2d33e 100644
--- a/chromeos/components/telemetry_extension_ui/telemetry_extension_untrusted_ui.h
+++ b/chromeos/components/telemetry_extension_ui/telemetry_extension_untrusted_ui.h
@@ -10,7 +10,6 @@
 #include <string>
 
 #include "base/containers/flat_map.h"
-#include "base/files/file_path.h"
 #include "base/optional.h"
 #include "base/strings/string_piece.h"
 #include "content/public/browser/url_data_source.h"
diff --git a/chromeos/disks/disk_mount_manager.h b/chromeos/disks/disk_mount_manager.h
index 0804dce..09043dc 100644
--- a/chromeos/disks/disk_mount_manager.h
+++ b/chromeos/disks/disk_mount_manager.h
@@ -12,7 +12,6 @@
 
 #include "base/callback_forward.h"
 #include "base/component_export.h"
-#include "base/files/file_path.h"
 #include "base/observer_list_types.h"
 #include "chromeos/dbus/cros_disks_client.h"
 
diff --git a/chromeos/printing/ppd_provider.h b/chromeos/printing/ppd_provider.h
index 67ed253..e73033c 100644
--- a/chromeos/printing/ppd_provider.h
+++ b/chromeos/printing/ppd_provider.h
@@ -12,7 +12,6 @@
 #include <vector>
 
 #include "base/callback.h"
-#include "base/files/file_path.h"
 #include "base/strings/string_piece.h"
 #include "base/version.h"
 #include "chromeos/chromeos_export.h"
diff --git a/components/arc/session/arc_session_runner.h b/components/arc/session/arc_session_runner.h
index b51b087..828dfbc 100644
--- a/components/arc/session/arc_session_runner.h
+++ b/components/arc/session/arc_session_runner.h
@@ -10,7 +10,6 @@
 #include <vector>
 
 #include "base/callback.h"
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "base/optional.h"
diff --git a/components/assist_ranker/base_predictor.h b/components/assist_ranker/base_predictor.h
index c89a4ae6..b4ba028 100644
--- a/components/assist_ranker/base_predictor.h
+++ b/components/assist_ranker/base_predictor.h
@@ -8,7 +8,6 @@
 #include <memory>
 #include <string>
 
-#include "base/files/file_path.h"
 #include "base/memory/weak_ptr.h"
 #include "components/assist_ranker/predictor_config.h"
 #include "components/assist_ranker/ranker_model_loader.h"
diff --git a/components/browsing_data/content/local_storage_helper.h b/components/browsing_data/content/local_storage_helper.h
index 2d33dc2..916e7be 100644
--- a/components/browsing_data/content/local_storage_helper.h
+++ b/components/browsing_data/content/local_storage_helper.h
@@ -13,7 +13,6 @@
 #include <set>
 
 #include "base/callback.h"
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/time/time.h"
diff --git a/components/component_updater/component_updater_paths.cc b/components/component_updater/component_updater_paths.cc
index 31574f8..a25d7245 100644
--- a/components/component_updater/component_updater_paths.cc
+++ b/components/component_updater/component_updater_paths.cc
@@ -4,6 +4,7 @@
 
 #include "components/component_updater/component_updater_paths.h"
 
+#include "base/files/file_path.h"
 #include "base/lazy_instance.h"
 #include "base/path_service.h"
 
diff --git a/components/component_updater/component_updater_paths.h b/components/component_updater/component_updater_paths.h
index d9383d2..1c266d2 100644
--- a/components/component_updater/component_updater_paths.h
+++ b/components/component_updater/component_updater_paths.h
@@ -5,8 +5,6 @@
 #ifndef COMPONENTS_COMPONENT_UPDATER_COMPONENT_UPDATER_PATHS_H_
 #define COMPONENTS_COMPONENT_UPDATER_COMPONENT_UPDATER_PATHS_H_
 
-#include "base/files/file_path.h"
-
 namespace component_updater {
 
 enum {
diff --git a/components/content_creation/notes/core/templates/BUILD.gn b/components/content_creation/notes/core/templates/BUILD.gn
index 5f99091..d53d399 100644
--- a/components/content_creation/notes/core/templates/BUILD.gn
+++ b/components/content_creation/notes/core/templates/BUILD.gn
@@ -8,6 +8,8 @@
     "note_template.h",
     "template_store.cc",
     "template_store.h",
+    "template_types.cc",
+    "template_types.h",
   ]
 
   deps = [ "//base" ]
diff --git a/components/content_creation/notes/core/templates/note_template.cc b/components/content_creation/notes/core/templates/note_template.cc
index 515a0ce..142de2b 100644
--- a/components/content_creation/notes/core/templates/note_template.cc
+++ b/components/content_creation/notes/core/templates/note_template.cc
@@ -6,7 +6,15 @@
 
 namespace content_creation {
 
-NoteTemplate::NoteTemplate(const std::string& localized_name)
-    : localized_name_(localized_name) {}
+NoteTemplate::NoteTemplate(NoteTemplateIds id,
+                           const std::string& localized_name,
+                           const Background& main_background,
+                           const TextStyle& text_style,
+                           const FooterStyle& footer_style)
+    : id_(id),
+      localized_name_(localized_name),
+      main_background_(main_background),
+      text_style_(text_style),
+      footer_style_(footer_style) {}
 
 }  // namespace content_creation
diff --git a/components/content_creation/notes/core/templates/note_template.h b/components/content_creation/notes/core/templates/note_template.h
index 2dfc902..53fe497 100644
--- a/components/content_creation/notes/core/templates/note_template.h
+++ b/components/content_creation/notes/core/templates/note_template.h
@@ -5,19 +5,42 @@
 #define COMPONENTS_CONTENT_CREATION_NOTES_CORE_TEMPLATES_NOTE_TEMPLATE_H_
 
 #include <string>
+#include <vector>
+
+#include "components/content_creation/notes/core/templates/template_types.h"
 
 namespace content_creation {
 
 // Contains the information required to be able to render a note.
 class NoteTemplate {
  public:
-  explicit NoteTemplate(const std::string& localized_name);
+  explicit NoteTemplate(NoteTemplateIds id,
+                        const std::string& localized_name,
+                        const Background& background,
+                        const TextStyle& text_style,
+                        const FooterStyle& footer_style);
 
+  NoteTemplateIds id() const { return id_; }
   const std::string localized_name() const { return localized_name_; }
+  const Background main_background() const { return main_background_; }
+  const TextStyle text_style() const { return text_style_; }
+  const FooterStyle footer_style() const { return footer_style_; }
 
  private:
+  // The template's identifier.
+  NoteTemplateIds id_;
+
   // Name of the template to be shown to the users.
   std::string localized_name_;
+
+  // Styling of the main background.
+  Background main_background_;
+
+  // Styling of the main text.
+  TextStyle text_style_;
+
+  // Styling of the footer part.
+  FooterStyle footer_style_;
 };
 
 }  // namespace content_creation
diff --git a/components/content_creation/notes/core/templates/template_store.cc b/components/content_creation/notes/core/templates/template_store.cc
index e3f164c..f2d5bd1 100644
--- a/components/content_creation/notes/core/templates/template_store.cc
+++ b/components/content_creation/notes/core/templates/template_store.cc
@@ -12,6 +12,24 @@
 
 namespace content_creation {
 
+namespace {
+
+const char kSourceSerifProFontName[] = "Source Serif Pro";
+
+const ARGBColor kDarkGrayColor = 0xFF202124;
+const ARGBColor kWhiteColor = 0xFFFFFFFF;
+const ARGBColor kSlightlyTransparentWhiteColor = 0xB3FFFFFF;
+
+NoteTemplate GetClassicTemplate() {
+  return NoteTemplate(
+      /*id=*/NoteTemplateIds::kClassic, "Classic",
+      Background(/*color=*/kDarkGrayColor),
+      TextStyle(kSourceSerifProFontName, kWhiteColor, /*all_caps=*/false),
+      /*footer_style=*/{kSlightlyTransparentWhiteColor});
+}
+
+}  // namespace
+
 TemplateStore::TemplateStore()
     : task_runner_(base::ThreadPool::CreateSequencedTaskRunner(
           {base::MayBlock(), base::TaskPriority::USER_BLOCKING})) {}
@@ -27,7 +45,8 @@
 }
 
 std::vector<NoteTemplate> TemplateStore::BuildTemplates() {
-  return {NoteTemplate(/*localized_name=*/"Test Name")};
+  // TODO (crbug.com/1194168): Use localized names.
+  return {GetClassicTemplate()};
 }
 
 void TemplateStore::OnTemplatesReceived(
diff --git a/components/content_creation/notes/core/templates/template_store_unittest.cc b/components/content_creation/notes/core/templates/template_store_unittest.cc
index f09e181..c3aee03 100644
--- a/components/content_creation/notes/core/templates/template_store_unittest.cc
+++ b/components/content_creation/notes/core/templates/template_store_unittest.cc
@@ -4,12 +4,14 @@
 
 #include "components/content_creation/notes/core/templates/template_store.h"
 
+#include <unordered_set>
 #include <vector>
 
 #include "base/run_loop.h"
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
 #include "components/content_creation/notes/core/templates/note_template.h"
+#include "components/content_creation/notes/core/templates/template_types.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace content_creation {
@@ -18,6 +20,20 @@
   void SetUp() override { template_store_ = std::make_unique<TemplateStore>(); }
 
  protected:
+  void ValidateTemplates(const std::vector<NoteTemplate>& note_templates) {
+    std::unordered_set<NoteTemplateIds> ids_set;
+    for (const NoteTemplate& note_template : note_templates) {
+      EXPECT_LT(NoteTemplateIds::kUnknown, note_template.id());
+      EXPECT_GE(NoteTemplateIds::kMaxValue, note_template.id());
+      EXPECT_FALSE(note_template.localized_name().empty());
+      EXPECT_FALSE(note_template.text_style().font_name().empty());
+
+      // There should be no duplicated IDs.
+      EXPECT_TRUE(ids_set.find(note_template.id()) == ids_set.end());
+      ids_set.insert(note_template.id());
+    }
+  }
+
   // Have to use TaskEnvironment since the TemplateStore posts tasks to the
   // thread pool.
   base::test::TaskEnvironment task_environment_{
@@ -26,12 +42,17 @@
   std::unique_ptr<TemplateStore> template_store_;
 };
 
+// Tests that the store does return templates, and also validates the templates'
+// information.
 TEST_F(TemplateStoreTest, GetTemplatesSuccess) {
   base::RunLoop run_loop;
 
   template_store_->GetTemplates(base::BindLambdaForTesting(
-      [&run_loop](std::vector<NoteTemplate> templates) {
+      [&run_loop, this](std::vector<NoteTemplate> templates) {
         EXPECT_EQ(1U, templates.size());
+
+        ValidateTemplates(templates);
+
         run_loop.Quit();
       }));
 
diff --git a/components/content_creation/notes/core/templates/template_types.cc b/components/content_creation/notes/core/templates/template_types.cc
new file mode 100644
index 0000000..c655d98
--- /dev/null
+++ b/components/content_creation/notes/core/templates/template_types.cc
@@ -0,0 +1,16 @@
+// 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 "components/content_creation/notes/core/templates/template_types.h"
+
+namespace content_creation {
+
+Background::Background(ARGBColor color) : color_(color) {}
+
+TextStyle::TextStyle(const std::string& font_name,
+                     ARGBColor font_color,
+                     bool all_caps)
+    : font_name_(font_name), font_color_(font_color), all_caps_(all_caps) {}
+
+}  // namespace content_creation
diff --git a/components/content_creation/notes/core/templates/template_types.h b/components/content_creation/notes/core/templates/template_types.h
new file mode 100644
index 0000000..70c4d9d
--- /dev/null
+++ b/components/content_creation/notes/core/templates/template_types.h
@@ -0,0 +1,66 @@
+// 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 COMPONENTS_CONTENT_CREATION_NOTES_CORE_TEMPLATES_TEMPLATE_TYPES_H_
+#define COMPONENTS_CONTENT_CREATION_NOTES_CORE_TEMPLATES_TEMPLATE_TYPES_H_
+
+#include <string>
+#include <vector>
+
+namespace content_creation {
+
+using ARGBColor = uint32_t;
+
+// Represents all currently known templates.
+enum class NoteTemplateIds {
+  kUnknown = 0,
+  kClassic = 1,
+  kFriendly = 2,
+  kFresh = 3,
+  kPowerful = 4,
+  kImpactful = 5,
+  kLovely = 6,
+  kGroovy = 7,
+  kMonochrome = 8,
+  kBold = 9,
+  kDreamy = 10,
+
+  kMaxValue = kDreamy
+};
+
+// Represents a colored background.
+class Background {
+ public:
+  explicit Background(ARGBColor color);
+
+  ARGBColor color() const { return color_; }
+
+ private:
+  ARGBColor color_;
+};
+
+// Parameters dictating how to display text.
+class TextStyle {
+ public:
+  explicit TextStyle(const std::string& font_name,
+                     ARGBColor font_color,
+                     bool all_caps);
+
+  const std::string font_name() const { return font_name_; }
+  ARGBColor font_color() const { return font_color_; }
+  bool all_caps() const { return all_caps_; }
+
+ private:
+  std::string font_name_;
+  ARGBColor font_color_;
+  bool all_caps_;
+};
+
+// Parameters to control the appearance of the elements in a note's footer.
+struct FooterStyle {
+  ARGBColor color;
+};
+
+}  // namespace content_creation
+
+#endif  // COMPONENTS_CONTENT_CREATION_NOTES_CORE_TEMPLATES_TEMPLATE_TYPES_H_
diff --git a/components/download/internal/background_service/entry.h b/components/download/internal/background_service/entry.h
index 409b110..3b37f0b 100644
--- a/components/download/internal/background_service/entry.h
+++ b/components/download/internal/background_service/entry.h
@@ -7,6 +7,7 @@
 
 #include <vector>
 
+#include "base/files/file_path.h"
 #include "base/time/time.h"
 #include "components/download/public/background_service/client.h"
 #include "components/download/public/background_service/clients.h"
diff --git a/components/download/public/background_service/client.h b/components/download/public/background_service/client.h
index 1374d0d..f7cbf5cd 100644
--- a/components/download/public/background_service/client.h
+++ b/components/download/public/background_service/client.h
@@ -9,7 +9,6 @@
 #include <vector>
 
 #include "base/callback.h"
-#include "base/files/file_path.h"
 #include "net/http/http_response_headers.h"
 #include "url/gurl.h"
 
diff --git a/components/download/public/background_service/download_service.h b/components/download/public/background_service/download_service.h
index f8b1a729..2b8fbc7 100644
--- a/components/download/public/background_service/download_service.h
+++ b/components/download/public/background_service/download_service.h
@@ -8,7 +8,6 @@
 #include <memory>
 #include <string>
 
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/sequenced_task_runner.h"
diff --git a/components/download/public/common/download_create_info.h b/components/download/public/common/download_create_info.h
index 37a2590d..a14cd6ea 100644
--- a/components/download/public/common/download_create_info.h
+++ b/components/download/public/common/download_create_info.h
@@ -10,7 +10,6 @@
 #include <string>
 #include <vector>
 
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/optional.h"
diff --git a/components/feed/core/v2/public/feed_service.h b/components/feed/core/v2/public/feed_service.h
index 8d1090d..d72ea94 100644
--- a/components/feed/core/v2/public/feed_service.h
+++ b/components/feed/core/v2/public/feed_service.h
@@ -8,7 +8,6 @@
 #include <memory>
 #include <string>
 
-#include "base/files/file_path.h"
 #include "base/memory/scoped_refptr.h"
 #include "build/build_config.h"
 #include "components/feed/core/v2/public/feed_api.h"
diff --git a/components/leveldb_proto/public/proto_database.h b/components/leveldb_proto/public/proto_database.h
index 5f377e4..6b022980 100644
--- a/components/leveldb_proto/public/proto_database.h
+++ b/components/leveldb_proto/public/proto_database.h
@@ -9,7 +9,6 @@
 #include <vector>
 
 #include "base/component_export.h"
-#include "base/files/file_path.h"
 #include "base/sequenced_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "third_party/leveldatabase/env_chromium.h"
diff --git a/components/metrics/metrics_service.cc b/components/metrics/metrics_service.cc
index 6492fd2..3623ec6 100644
--- a/components/metrics/metrics_service.cc
+++ b/components/metrics/metrics_service.cc
@@ -5,7 +5,7 @@
 //------------------------------------------------------------------------------
 // Description of the life cycle of a instance of MetricsService.
 //
-//  OVERVIEW
+// OVERVIEW
 //
 // A MetricsService instance is typically created at application startup.  It is
 // the central controller for the acquisition of log data, and the automatic
@@ -488,9 +488,6 @@
   if (!state_manager_->clean_exit_beacon()->exited_cleanly()) {
     provider.LogCrash(
         state_manager_->clean_exit_beacon()->browser_last_live_timestamp());
-    // Reset flag, and wait until we call LogNeedForCleanShutdown() before
-    // monitoring.
-    state_manager_->clean_exit_beacon()->WriteBeaconValue(true);
   }
 
   // HasPreviousSessionData is called first to ensure it is never bypassed.
diff --git a/components/ntp_snippets/content_suggestion.h b/components/ntp_snippets/content_suggestion.h
index 04bcd0f..ca1ab9d 100644
--- a/components/ntp_snippets/content_suggestion.h
+++ b/components/ntp_snippets/content_suggestion.h
@@ -9,7 +9,6 @@
 #include <memory>
 #include <string>
 
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/optional.h"
 #include "base/time/time.h"
diff --git a/components/offline_pages/core/model/update_publish_id_task.h b/components/offline_pages/core/model/update_publish_id_task.h
index 75b1d09..5b4e1ca 100644
--- a/components/offline_pages/core/model/update_publish_id_task.h
+++ b/components/offline_pages/core/model/update_publish_id_task.h
@@ -6,7 +6,6 @@
 #define COMPONENTS_OFFLINE_PAGES_CORE_MODEL_UPDATE_PUBLISH_ID_TASK_H_
 
 #include "base/callback.h"
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "components/offline_pages/core/model/get_pages_task.h"
diff --git a/components/offline_pages/core/offline_page_test_archive_publisher.h b/components/offline_pages/core/offline_page_test_archive_publisher.h
index ab285f8..40e141a 100644
--- a/components/offline_pages/core/offline_page_test_archive_publisher.h
+++ b/components/offline_pages/core/offline_page_test_archive_publisher.h
@@ -9,7 +9,6 @@
 #include <string>
 
 #include "base/callback.h"
-#include "base/files/file_path.h"
 #include "components/offline_pages/core/offline_page_archive_publisher.h"
 #include "components/offline_pages/core/offline_page_item.h"
 #include "components/offline_pages/core/offline_page_types.h"
diff --git a/components/omnibox/browser/on_device_head_provider.h b/components/omnibox/browser/on_device_head_provider.h
index 8035214f..3bdeeac1 100644
--- a/components/omnibox/browser/on_device_head_provider.h
+++ b/components/omnibox/browser/on_device_head_provider.h
@@ -8,7 +8,6 @@
 #include <memory>
 
 #include "base/callback_list.h"
-#include "base/files/file_path.h"
 #include "base/sequence_checker.h"
 #include "base/task/post_task.h"
 #include "components/omnibox/browser/autocomplete_provider.h"
diff --git a/components/ownership/mock_owner_key_util.h b/components/ownership/mock_owner_key_util.h
index 86c3798..1a8a951 100644
--- a/components/ownership/mock_owner_key_util.h
+++ b/components/ownership/mock_owner_key_util.h
@@ -11,7 +11,6 @@
 #include <vector>
 
 #include "base/compiler_specific.h"
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "components/ownership/owner_key_util.h"
 #include "components/ownership/ownership_export.h"
diff --git a/components/page_load_metrics/browser/observers/core/uma_page_load_metrics_observer.cc b/components/page_load_metrics/browser/observers/core/uma_page_load_metrics_observer.cc
index 4c210f7..beb6aaa 100644
--- a/components/page_load_metrics/browser/observers/core/uma_page_load_metrics_observer.cc
+++ b/components/page_load_metrics/browser/observers/core/uma_page_load_metrics_observer.cc
@@ -268,6 +268,10 @@
 const char kHistogramTotalSubresourceLoadTimeAtFirstContentfulPaint[] =
     "PageLoad.Experimental.PageTiming."
     "TotalSubresourceLoadTimeAtFirstContentfulPaint";
+const char kHistogramFirstEligibleToPaint[] =
+    "PageLoad.Experimental.PaintTiming.NavigationToFirstEligibleToPaint";
+const char kHistogramFirstEligibleToPaintToFirstPaint[] =
+    "PageLoad.Experimental.PaintTiming.FirstEligibleToPaintToFirstPaint";
 
 const char kHistogramFirstNonScrollInputAfterFirstPaint[] =
     "PageLoad.InputTiming.NavigationToFirstNonScroll.AfterPaint";
@@ -473,6 +477,14 @@
           timing.paint_timing->first_paint, GetDelegate())) {
     PAGE_LOAD_HISTOGRAM(internal::kHistogramFirstPaint,
                         timing.paint_timing->first_paint.value());
+    if (timing.paint_timing->first_eligible_to_paint) {
+      PAGE_LOAD_HISTOGRAM(internal::kHistogramFirstEligibleToPaint,
+                          timing.paint_timing->first_eligible_to_paint.value());
+      PAGE_LOAD_HISTOGRAM(
+          internal::kHistogramFirstEligibleToPaintToFirstPaint,
+          timing.paint_timing->first_paint.value() -
+              timing.paint_timing->first_eligible_to_paint.value());
+    }
 
     if (timing.input_to_navigation_start) {
       PAGE_LOAD_HISTOGRAM(internal::kHistogramInputToFirstPaint,
diff --git a/components/page_load_metrics/browser/observers/core/uma_page_load_metrics_observer.h b/components/page_load_metrics/browser/observers/core/uma_page_load_metrics_observer.h
index f1325ec..786b688 100644
--- a/components/page_load_metrics/browser/observers/core/uma_page_load_metrics_observer.h
+++ b/components/page_load_metrics/browser/observers/core/uma_page_load_metrics_observer.h
@@ -68,6 +68,8 @@
 extern const char kHistogramNavigationToFirstSubresourceLoadStart[];
 extern const char kHistogramResourceLoadTimePrefix[];
 extern const char kHistogramTotalSubresourceLoadTimeAtFirstContentfulPaint[];
+extern const char kHistogramFirstEligibleToPaint[];
+extern const char kHistogramFirstEligibleToPaintToFirstPaint[];
 
 extern const char kHistogramFirstNonScrollInputAfterFirstPaint[];
 extern const char kHistogramFirstScrollInputAfterFirstPaint[];
diff --git a/components/page_load_metrics/browser/page_load_metrics_update_dispatcher.cc b/components/page_load_metrics/browser/page_load_metrics_update_dispatcher.cc
index e77452a..2d5ed70 100644
--- a/components/page_load_metrics/browser/page_load_metrics_update_dispatcher.cc
+++ b/components/page_load_metrics/browser/page_load_metrics_update_dispatcher.cc
@@ -334,6 +334,9 @@
     mojom::PaintTiming* target_paint_timing = target_->paint_timing.get();
     MaybeUpdateTimeDelta(&target_paint_timing->first_paint,
                          navigation_start_offset, new_paint_timing.first_paint);
+    MaybeUpdateTimeDelta(&target_paint_timing->first_eligible_to_paint,
+                         navigation_start_offset,
+                         new_paint_timing.first_eligible_to_paint);
     MaybeUpdateTimeDelta(&target_paint_timing->first_image_paint,
                          navigation_start_offset,
                          new_paint_timing.first_image_paint);
diff --git a/components/password_manager/content/browser/content_password_manager_driver.cc b/components/password_manager/content/browser/content_password_manager_driver.cc
index ed82930..e3f83a1 100644
--- a/components/password_manager/content/browser/content_password_manager_driver.cc
+++ b/components/password_manager/content/browser/content_password_manager_driver.cc
@@ -261,7 +261,9 @@
     // not used, such as on Android.
     content::SiteInstance::StartIsolatingSite(
         render_frame_host_->GetSiteInstance()->GetBrowserContext(),
-        form_data.url);
+        form_data.url,
+        content::ChildProcessSecurityPolicy::IsolatedOriginSource::
+            USER_TRIGGERED);
   }
 }
 
diff --git a/components/policy/core/common/cloud/encrypted_reporting_job_configuration.cc b/components/policy/core/common/cloud/encrypted_reporting_job_configuration.cc
index 2a4e9e8..fd5b636 100644
--- a/components/policy/core/common/cloud/encrypted_reporting_job_configuration.cc
+++ b/components/policy/core/common/cloud/encrypted_reporting_job_configuration.cc
@@ -17,6 +17,7 @@
 
 // EncryptedReportingJobConfiguration strings
 constexpr char kEncryptedRecordListKey[] = "encryptedRecord";
+constexpr char kAttachEncryptionSettingsKey[] = "attachEncryptionSettings";
 constexpr char kDeviceKey[] = "device";
 constexpr char kBrowserKey[] = "browser";
 
@@ -73,8 +74,9 @@
 
 std::set<std::string>
 EncryptedReportingJobConfiguration::GetTopLevelKeyAllowList() {
-  static std::set<std::string> kTopLevelKeyAllowList{kEncryptedRecordListKey,
-                                                     kDeviceKey, kBrowserKey};
+  static std::set<std::string> kTopLevelKeyAllowList{
+      kEncryptedRecordListKey, kAttachEncryptionSettingsKey, kDeviceKey,
+      kBrowserKey};
   return kTopLevelKeyAllowList;
 }
 
diff --git a/components/policy/core/common/cloud/encrypted_reporting_job_configuration_unittest.cc b/components/policy/core/common/cloud/encrypted_reporting_job_configuration_unittest.cc
index a1a049d..8146b0d 100644
--- a/components/policy/core/common/cloud/encrypted_reporting_job_configuration_unittest.cc
+++ b/components/policy/core/common/cloud/encrypted_reporting_job_configuration_unittest.cc
@@ -52,7 +52,10 @@
 // UploadEncryptedReportingRequest list key
 constexpr char kEncryptedRecordListKey[] = "encryptedRecord";
 
-// Kays for EncrypedRecord
+// Encryption settings request key
+constexpr char kAttachEncryptionSettingsKey[] = "attachEncryptionSettings";
+
+// Keys for EncrypedRecord
 constexpr char kEncryptedWrappedRecordKey[] = "encryptedWrappedRecord";
 constexpr char kSequencingInformationKey[] = "sequencingInformation";
 constexpr char kEncryptionInfoKey[] = "encryptionInfo";
@@ -104,7 +107,10 @@
 
 class RequestPayloadBuilder {
  public:
-  RequestPayloadBuilder() {
+  explicit RequestPayloadBuilder(bool attach_encryption_settings = false) {
+    if (attach_encryption_settings) {
+      payload_.SetBoolKey(kAttachEncryptionSettingsKey, true);
+    }
     payload_.SetKey(kEncryptedRecordListKey,
                     base::Value{base::Value::Type::LIST});
   }
@@ -247,11 +253,20 @@
 
   void GetRecordList(EncryptedReportingJobConfiguration* configuration,
                      base::Value** record_list) {
-    base::Value* payload = GetPayload(configuration);
+    base::Value* const payload = GetPayload(configuration);
     *record_list = payload->FindListKey(kEncryptedRecordListKey);
     ASSERT_TRUE(*record_list);
   }
 
+  bool GetAttachEncryptionSettings(
+      EncryptedReportingJobConfiguration* configuration) {
+    base::Value* const payload = GetPayload(configuration);
+    const auto attach_encryption_settings =
+        payload->FindBoolKey(kAttachEncryptionSettingsKey);
+    return attach_encryption_settings.has_value() &&
+           attach_encryption_settings.value();
+  }
+
   base::Value* GetPayload(EncryptedReportingJobConfiguration* configuration) {
     base::Optional<base::Value> payload_result =
         base::JSONReader::Read(configuration->GetPayload());
@@ -377,6 +392,57 @@
   for (const auto& record : records) {
     EXPECT_EQ(record_list->GetList()[counter++], record);
   }
+
+  EXPECT_FALSE(GetAttachEncryptionSettings(&configuration));
+}
+
+// Ensures that attach encryption settings request is included when no records
+// are present.
+TEST_F(EncryptedReportingJobConfigurationTest,
+       AllowsAttachEncryptionSettingsAlone) {
+  RequestPayloadBuilder builder{/*attach_encryption_settings=*/true};
+  EXPECT_CALL(complete_cb_, Call(_, _, _, _)).Times(1);
+  EncryptedReportingJobConfiguration configuration(
+      &client_, service_.configuration()->GetEncryptedReportingServerUrl(),
+      builder.Build(),
+      base::BindOnce(&MockCompleteCb::Call, base::Unretained(&complete_cb_)));
+
+  base::Value* record_list = nullptr;
+  GetRecordList(&configuration, &record_list);
+
+  EXPECT_TRUE(record_list->GetList().empty());
+
+  EXPECT_TRUE(GetAttachEncryptionSettings(&configuration));
+}
+
+TEST_F(EncryptedReportingJobConfigurationTest,
+       CorrectlyAddsMultipleRecordsWithAttachEncryptionSettings) {
+  const std::vector<std::string> kEncryptedWrappedRecords{
+      "T", "E", "S", "T", "_", "I", "N", "F", "O"};
+  std::vector<base::Value> records;
+  RequestPayloadBuilder builder{/*attach_encryption_settings=*/true};
+  for (auto value : kEncryptedWrappedRecords) {
+    records.push_back(GenerateSingleRecord(value));
+    builder.AddRecord(records.back());
+  }
+
+  EXPECT_CALL(complete_cb_, Call(_, _, _, _)).Times(1);
+  EncryptedReportingJobConfiguration configuration(
+      &client_, service_.configuration()->GetEncryptedReportingServerUrl(),
+      builder.Build(),
+      base::BindOnce(&MockCompleteCb::Call, base::Unretained(&complete_cb_)));
+
+  base::Value* record_list = nullptr;
+  GetRecordList(&configuration, &record_list);
+
+  EXPECT_EQ(record_list->GetList().size(), records.size());
+
+  size_t counter = 0;
+  for (const auto& record : records) {
+    EXPECT_EQ(record_list->GetList()[counter++], record);
+  }
+
+  EXPECT_TRUE(GetAttachEncryptionSettings(&configuration));
 }
 
 // Ensures that the context can be updated.
diff --git a/components/policy/core/common/policy_loader_win.h b/components/policy/core/common/policy_loader_win.h
index cae9899..e07e2a94 100644
--- a/components/policy/core/common/policy_loader_win.h
+++ b/components/policy/core/common/policy_loader_win.h
@@ -12,7 +12,6 @@
 #include <memory>
 #include <string>
 
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/synchronization/waitable_event.h"
diff --git a/components/printing/renderer/print_render_frame_helper.cc b/components/printing/renderer/print_render_frame_helper.cc
index fca930aa..e688c3134 100644
--- a/components/printing/renderer/print_render_frame_helper.cc
+++ b/components/printing/renderer/print_render_frame_helper.cc
@@ -2728,17 +2728,12 @@
       (base::TimeTicks::Now() - begin_time) + document_render_time_;
   base::TimeDelta avg_time_per_page = total_time / pages_to_render_.size();
 
-  base::UmaHistogramMediumTimes(is_for_arc_ ? "Arc.PrintPreview.RenderToPDFTime"
-                                            : "PrintPreview.RenderToPDFTime",
+  base::UmaHistogramMediumTimes("PrintPreview.RenderToPDFTime",
                                 document_render_time_);
+  base::UmaHistogramMediumTimes("PrintPreview.RenderAndGeneratePDFTime",
+                                total_time);
   base::UmaHistogramMediumTimes(
-      is_for_arc_ ? "Arc.PrintPreview.RenderAndGeneratePDFTime"
-                  : "PrintPreview.RenderAndGeneratePDFTime",
-      total_time);
-  base::UmaHistogramMediumTimes(
-      is_for_arc_ ? "Arc.PrintPreview.RenderAndGeneratePDFTimeAvgPerPage"
-                  : "PrintPreview.RenderAndGeneratePDFTimeAvgPerPage",
-      avg_time_per_page);
+      "PrintPreview.RenderAndGeneratePDFTimeAvgPerPage", avg_time_per_page);
 }
 
 void PrintRenderFrameHelper::PrintPreviewContext::Finished() {
diff --git a/components/reporting/storage/storage.h b/components/reporting/storage/storage.h
index cf0bffcd..0e916f07 100644
--- a/components/reporting/storage/storage.h
+++ b/components/reporting/storage/storage.h
@@ -12,7 +12,6 @@
 
 #include "base/callback.h"
 #include "base/containers/flat_map.h"
-#include "base/files/file_path.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/strings/string_piece.h"
diff --git a/components/services/storage/indexed_db/transactional_leveldb/transactional_leveldb_database.h b/components/services/storage/indexed_db/transactional_leveldb/transactional_leveldb_database.h
index 82aa7a2c..dbdcf1e5 100644
--- a/components/services/storage/indexed_db/transactional_leveldb/transactional_leveldb_database.h
+++ b/components/services/storage/indexed_db/transactional_leveldb/transactional_leveldb_database.h
@@ -11,7 +11,6 @@
 
 #include "base/containers/flat_set.h"
 #include "base/containers/mru_cache.h"
-#include "base/files/file_path.h"
 #include "base/gtest_prod_util.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
diff --git a/components/signin/public/android/BUILD.gn b/components/signin/public/android/BUILD.gn
index ed854c6..dff2c9e 100644
--- a/components/signin/public/android/BUILD.gn
+++ b/components/signin/public/android/BUILD.gn
@@ -9,6 +9,7 @@
     "//net/android:net_java",
     "//third_party/android_deps:android_support_v4_java",
     "//third_party/android_deps:chromium_play_services_availability_java",
+    "//third_party/android_deps:guava_android_java",
     "//third_party/androidx:androidx_annotation_annotation_java",
   ]
 
@@ -80,6 +81,7 @@
     ":test_support_jni_headers",
     "//base:base_java",
     "//base:jni_java",
+    "//third_party/android_deps:guava_android_java",
     "//third_party/androidx:androidx_annotation_annotation_java",
     "//third_party/mockito:mockito_java",
   ]
diff --git a/components/signin/public/android/java/src/org/chromium/components/signin/AccountManagerFacade.java b/components/signin/public/android/java/src/org/chromium/components/signin/AccountManagerFacade.java
index 1d3f1ede5..fedee31 100644
--- a/components/signin/public/android/java/src/org/chromium/components/signin/AccountManagerFacade.java
+++ b/components/signin/public/android/java/src/org/chromium/components/signin/AccountManagerFacade.java
@@ -14,6 +14,8 @@
 import androidx.annotation.Nullable;
 import androidx.annotation.WorkerThread;
 
+import com.google.common.base.Optional;
+
 import org.chromium.base.Callback;
 
 import java.util.List;
@@ -101,6 +103,12 @@
     void checkChildAccountStatus(Account account, ChildAccountStatusListener listener);
 
     /**
+     * Gets the boolean for whether the account is subject to minor mode restrictions.
+     * If the result is not yet fetched, the optional will be empty.
+     */
+    Optional<Boolean> isAccountSubjectToMinorModeRestrictions(Account account);
+
+    /**
      * Creates an intent that will ask the user to add a new account to the device. See
      * {@link AccountManager#addAccount} for details.
      * @param callback The callback to get the created intent. Will be invoked on the main
diff --git a/components/signin/public/android/java/src/org/chromium/components/signin/AccountManagerFacadeImpl.java b/components/signin/public/android/java/src/org/chromium/components/signin/AccountManagerFacadeImpl.java
index e67d3c54..901b9f98 100644
--- a/components/signin/public/android/java/src/org/chromium/components/signin/AccountManagerFacadeImpl.java
+++ b/components/signin/public/android/java/src/org/chromium/components/signin/AccountManagerFacadeImpl.java
@@ -15,6 +15,8 @@
 import androidx.annotation.Nullable;
 import androidx.annotation.VisibleForTesting;
 
+import com.google.common.base.Optional;
+
 import org.chromium.base.Callback;
 import org.chromium.base.ObserverList;
 import org.chromium.base.ThreadUtils;
@@ -25,7 +27,9 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.Queue;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.atomic.AtomicReference;
@@ -62,6 +66,8 @@
     private int mUpdateTasksCounter;
     private final Queue<Callback<List<Account>>> mCallbacksWaitingForAccountsFetch =
             new ArrayDeque<>();
+    // The map stores the boolean for whether an account is subject to minor mode restrictions
+    private final Map<String, Boolean> mSubjectToMinorModeRestrictions = new HashMap<>();
 
     /**
      * @param delegate the AccountManagerDelegate to use as a backend
@@ -209,6 +215,12 @@
         }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
     }
 
+    @Override
+    public Optional<Boolean> isAccountSubjectToMinorModeRestrictions(Account account) {
+        return Optional.fromNullable(
+                mSubjectToMinorModeRestrictions.get(AccountUtils.canonicalizeName(account.name)));
+    }
+
     /**
      * Creates an intent that will ask the user to add a new account to the device. See
      * {@link AccountManager#addAccount} for details.
diff --git a/components/signin/public/android/java/src/org/chromium/components/signin/AccountUtils.java b/components/signin/public/android/java/src/org/chromium/components/signin/AccountUtils.java
index 7e931dc1..b075acf 100644
--- a/components/signin/public/android/java/src/org/chromium/components/signin/AccountUtils.java
+++ b/components/signin/public/android/java/src/org/chromium/components/signin/AccountUtils.java
@@ -76,7 +76,7 @@
     /**
      * Canonicalizes the account name.
      */
-    private static String canonicalizeName(String name) {
+    static String canonicalizeName(String name) {
         String[] parts = AT_SYMBOL.split(name);
         if (parts.length != 2) return name;
 
diff --git a/components/signin/public/android/java/src/org/chromium/components/signin/AccountsChangeObserver.java b/components/signin/public/android/java/src/org/chromium/components/signin/AccountsChangeObserver.java
index 601ddb1..07de708 100644
--- a/components/signin/public/android/java/src/org/chromium/components/signin/AccountsChangeObserver.java
+++ b/components/signin/public/android/java/src/org/chromium/components/signin/AccountsChangeObserver.java
@@ -17,4 +17,9 @@
      */
     @MainThread
     void onAccountsChanged();
+
+    /**
+     * Called every time the MinorModeRestrictions gets updated.
+     */
+    default void onMinorModeRestrictionsUpdated() {}
 }
diff --git a/components/signin/public/android/java/src/org/chromium/components/signin/identitymanager/AccountTrackerService.java b/components/signin/public/android/java/src/org/chromium/components/signin/identitymanager/AccountTrackerService.java
index 231485f0..0802999 100644
--- a/components/signin/public/android/java/src/org/chromium/components/signin/identitymanager/AccountTrackerService.java
+++ b/components/signin/public/android/java/src/org/chromium/components/signin/identitymanager/AccountTrackerService.java
@@ -4,6 +4,8 @@
 
 package org.chromium.components.signin.identitymanager;
 
+import android.os.Build.VERSION;
+import android.os.Build.VERSION_CODES;
 import android.os.SystemClock;
 
 import androidx.annotation.IntDef;
@@ -28,6 +30,7 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Queue;
+import java.util.concurrent.ConcurrentLinkedDeque;
 
 /**
  * Android wrapper of AccountTrackerService which provides access from the java layer.
@@ -63,7 +66,7 @@
     }
 
     private final long mNativeAccountTrackerService;
-    private final Queue<Runnable> mRunnablesWaitingForAccountsSeeding = new ArrayDeque<>();
+    private final Queue<Runnable> mRunnablesWaitingForAccountsSeeding;
     private @AccountsSeedingStatus int mAccountsSeedingStatus;
     private final ObserverList<Observer> mObservers = new ObserverList<>();
     private AccountsChangeObserver mAccountsChangeObserver;
@@ -73,6 +76,9 @@
     AccountTrackerService(long nativeAccountTrackerService) {
         mNativeAccountTrackerService = nativeAccountTrackerService;
         mAccountsSeedingStatus = AccountsSeedingStatus.NOT_STARTED;
+        mRunnablesWaitingForAccountsSeeding = VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP
+                ? new ConcurrentLinkedDeque<>()
+                : new ArrayDeque<>();
     }
 
     /**
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 aa4cdd9..d2fb12c 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
@@ -12,6 +12,8 @@
 import androidx.annotation.MainThread;
 import androidx.annotation.Nullable;
 
+import com.google.common.base.Optional;
+
 import org.chromium.base.Callback;
 import org.chromium.base.ThreadUtils;
 import org.chromium.components.signin.AccessTokenData;
@@ -119,6 +121,11 @@
     public void checkChildAccountStatus(Account account, ChildAccountStatusListener listener) {}
 
     @Override
+    public Optional<Boolean> isAccountSubjectToMinorModeRestrictions(Account account) {
+        return Optional.absent();
+    }
+
+    @Override
     public void createAddAccountIntent(Callback<Intent> callback) {}
 
     @Override
diff --git a/components/signin/public/webdata/token_web_data.h b/components/signin/public/webdata/token_web_data.h
index c2ca5ed..fdefff11 100644
--- a/components/signin/public/webdata/token_web_data.h
+++ b/components/signin/public/webdata/token_web_data.h
@@ -13,7 +13,6 @@
 #include <string>
 #include <vector>
 
-#include "base/files/file_path.h"
 #include "base/location.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
diff --git a/components/site_isolation/site_isolation_policy.cc b/components/site_isolation/site_isolation_policy.cc
index 41b36342..1096c89 100644
--- a/components/site_isolation/site_isolation_policy.cc
+++ b/components/site_isolation/site_isolation_policy.cc
@@ -182,8 +182,14 @@
   if (!IsIsolationForOAuthSitesEnabled())
     return;
 
-  content::SiteInstance::StartIsolatingSite(browser_context, signed_in_url,
-                                            false /* should_persist */);
+  // OAuth information is currently persisted and restored by other layers. See
+  // login_detection::prefs::SaveSiteToOAuthSignedInList().
+  constexpr bool kShouldPersist = false;
+
+  content::SiteInstance::StartIsolatingSite(
+      browser_context, signed_in_url,
+      content::ChildProcessSecurityPolicy::IsolatedOriginSource::USER_TRIGGERED,
+      kShouldPersist);
 }
 
 // static
diff --git a/components/sync/engine/engine_components_factory.h b/components/sync/engine/engine_components_factory.h
index 3592fcd..cc0a3d2 100644
--- a/components/sync/engine/engine_components_factory.h
+++ b/components/sync/engine/engine_components_factory.h
@@ -9,7 +9,6 @@
 #include <string>
 #include <vector>
 
-#include "base/files/file_path.h"
 #include "base/time/time.h"
 
 namespace syncer {
diff --git a/components/ui_devtools/agent_util.h b/components/ui_devtools/agent_util.h
index caaf2bd..22744b9bf 100644
--- a/components/ui_devtools/agent_util.h
+++ b/components/ui_devtools/agent_util.h
@@ -5,7 +5,8 @@
 #ifndef COMPONENTS_UI_DEVTOOLS_AGENT_UTIL_H_
 #define COMPONENTS_UI_DEVTOOLS_AGENT_UTIL_H_
 
-#include "base/files/file_path.h"
+#include <string>
+
 #include "components/ui_devtools/devtools_export.h"
 
 namespace ui_devtools {
diff --git a/components/update_client/component_patcher_unittest.h b/components/update_client/component_patcher_unittest.h
index a66d2d4..119efba 100644
--- a/components/update_client/component_patcher_unittest.h
+++ b/components/update_client/component_patcher_unittest.h
@@ -5,7 +5,6 @@
 #ifndef COMPONENTS_UPDATE_CLIENT_COMPONENT_PATCHER_UNITTEST_H_
 #define COMPONENTS_UPDATE_CLIENT_COMPONENT_PATCHER_UNITTEST_H_
 
-#include "base/files/file_path.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/memory/ref_counted.h"
 #include "base/sequenced_task_runner.h"
diff --git a/components/webdata/common/web_data_service_base.h b/components/webdata/common/web_data_service_base.h
index 6c340d3..7850557 100644
--- a/components/webdata/common/web_data_service_base.h
+++ b/components/webdata/common/web_data_service_base.h
@@ -6,7 +6,6 @@
 #define COMPONENTS_WEBDATA_COMMON_WEB_DATA_SERVICE_BASE_H_
 
 #include "base/callback.h"
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/ref_counted_delete_on_sequence.h"
diff --git a/components/zucchini/main_utils.h b/components/zucchini/main_utils.h
index addb8302..6c97aad7 100644
--- a/components/zucchini/main_utils.h
+++ b/components/zucchini/main_utils.h
@@ -7,7 +7,6 @@
 
 #include <iosfwd>
 
-#include "base/files/file_path.h"
 #include "components/zucchini/zucchini.h"
 
 // Utilities to run Zucchini command based on command-line input, and to print
diff --git a/content/app/content_main_runner_impl.cc b/content/app/content_main_runner_impl.cc
index 8dba745..ae8a8ae 100644
--- a/content/app/content_main_runner_impl.cc
+++ b/content/app/content_main_runner_impl.cc
@@ -52,7 +52,7 @@
 #include "content/app/mojo/mojo_init.h"
 #include "content/app/mojo_ipc_support.h"
 #include "content/browser/browser_main.h"
-#include "content/browser/browser_process_sub_thread.h"
+#include "content/browser/browser_process_io_thread.h"
 #include "content/browser/browser_thread_impl.h"
 #include "content/browser/gpu/gpu_main_thread_factory.h"
 #include "content/browser/renderer_host/render_process_host_impl.h"
diff --git a/content/app/mojo_ipc_support.cc b/content/app/mojo_ipc_support.cc
index 20ba75d..b90bc407 100644
--- a/content/app/mojo_ipc_support.cc
+++ b/content/app/mojo_ipc_support.cc
@@ -8,7 +8,7 @@
 
 #include "base/command_line.h"
 #include "build/build_config.h"
-#include "content/browser/browser_process_sub_thread.h"
+#include "content/browser/browser_process_io_thread.h"
 #include "content/browser/startup_data_impl.h"
 #include "content/common/mojo_core_library_support.h"
 #include "content/public/common/content_features.h"
@@ -18,7 +18,7 @@
 namespace content {
 
 MojoIpcSupport::MojoIpcSupport(
-    std::unique_ptr<BrowserProcessSubThread> io_thread)
+    std::unique_ptr<BrowserProcessIOThread> io_thread)
     : io_thread_(std::move(io_thread)) {
   scoped_refptr<base::SingleThreadTaskRunner> mojo_ipc_task_runner =
       io_thread_->task_runner();
diff --git a/content/app/mojo_ipc_support.h b/content/app/mojo_ipc_support.h
index 02221b8a..6d6c48b 100644
--- a/content/app/mojo_ipc_support.h
+++ b/content/app/mojo_ipc_support.h
@@ -19,17 +19,17 @@
 
 namespace content {
 
-class BrowserProcessSubThread;
+class BrowserProcessIOThread;
 struct StartupDataImpl;
 
 // Encapsulates the basic state necessary to bring up a working Mojo IPC
 // environment in the browser process.
 class CONTENT_EXPORT MojoIpcSupport {
  public:
-  explicit MojoIpcSupport(std::unique_ptr<BrowserProcessSubThread> io_thread);
+  explicit MojoIpcSupport(std::unique_ptr<BrowserProcessIOThread> io_thread);
   ~MojoIpcSupport();
 
-  BrowserProcessSubThread* io_thread() { return io_thread_.get(); }
+  BrowserProcessIOThread* io_thread() { return io_thread_.get(); }
 
   // Returns a new StartupDataImpl which captures and/or reflects the partial
   // state of this object. This must be called and the result passed to
@@ -40,7 +40,7 @@
   std::unique_ptr<StartupDataImpl> CreateBrowserStartupData();
 
  private:
-  std::unique_ptr<BrowserProcessSubThread> io_thread_;
+  std::unique_ptr<BrowserProcessIOThread> io_thread_;
   base::Thread mojo_ipc_thread_{"Mojo IPC"};
   std::unique_ptr<mojo::core::ScopedIPCSupport> mojo_ipc_support_;
 
diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn
index f5bca57..c29835b 100644
--- a/content/browser/BUILD.gn
+++ b/content/browser/BUILD.gn
@@ -539,8 +539,8 @@
     "browser_plugin/browser_plugin_embedder.h",
     "browser_plugin/browser_plugin_guest.cc",
     "browser_plugin/browser_plugin_guest.h",
-    "browser_process_sub_thread.cc",
-    "browser_process_sub_thread.h",
+    "browser_process_io_thread.cc",
+    "browser_process_io_thread.h",
     "browser_thread_impl.cc",
     "browser_thread_impl.h",
     "browser_url_handler_impl.cc",
diff --git a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
index 849f9eff..e71c219d 100644
--- a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
+++ b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
@@ -2939,6 +2939,10 @@
   RunRegressionTest(FILE_PATH_LITERAL("add-click-ignored-changed.html"));
 }
 
+IN_PROC_BROWSER_TEST_P(DumpAccessibilityTreeTest, AriaHiddenTabindexChange) {
+  RunRegressionTest(FILE_PATH_LITERAL("aria-hidden-tabindex-change.html"));
+}
+
 IN_PROC_BROWSER_TEST_P(DumpAccessibilityTreeTest, HiddenTable) {
   RunRegressionTest(FILE_PATH_LITERAL("hidden-table.html"));
 }
diff --git a/content/browser/background_fetch/background_fetch_request_info.h b/content/browser/background_fetch/background_fetch_request_info.h
index 09d3fe3..8306cd3 100644
--- a/content/browser/background_fetch/background_fetch_request_info.h
+++ b/content/browser/background_fetch/background_fetch_request_info.h
@@ -10,7 +10,6 @@
 #include <string>
 #include <vector>
 
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted_delete_on_sequence.h"
 #include "base/optional.h"
diff --git a/content/browser/browser_main_loop.cc b/content/browser/browser_main_loop.cc
index b8e1b64..177e7cb 100644
--- a/content/browser/browser_main_loop.cc
+++ b/content/browser/browser_main_loop.cc
@@ -299,7 +299,7 @@
 // NOINLINE so it's possible to tell what thread was unresponsive by inspecting
 // the callstack.
 NOINLINE void ResetThread_IO(
-    std::unique_ptr<BrowserProcessSubThread> io_thread) {
+    std::unique_ptr<BrowserProcessIOThread> io_thread) {
   io_thread.reset();
 }
 
@@ -1045,7 +1045,7 @@
     RenderProcessHostImpl::ShutDownInProcessRenderer();
 
   if (base::FeatureList::IsEnabled(features::kProcessHostOnUI))
-    BrowserProcessSubThread::ProcessHostCleanUp();
+    BrowserProcessIOThread::ProcessHostCleanUp();
 
   if (parts_) {
     TRACE_EVENT0("shutdown",
diff --git a/content/browser/browser_main_loop.h b/content/browser/browser_main_loop.h
index e116a3d..240fc57 100644
--- a/content/browser/browser_main_loop.h
+++ b/content/browser/browser_main_loop.h
@@ -8,14 +8,13 @@
 #include <memory>
 
 #include "base/callback_helpers.h"
-#include "base/files/file_path.h"
 #include "base/gtest_prod_util.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/task/thread_pool/thread_pool_instance.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
-#include "content/browser/browser_process_sub_thread.h"
+#include "content/browser/browser_process_io_thread.h"
 #include "content/public/browser/browser_main_runner.h"
 #include "media/media_buildflags.h"
 #include "services/viz/public/mojom/compositing/compositing_mode_watcher.mojom.h"
@@ -308,7 +307,7 @@
   base::ScopedClosureRunner unregister_thread_closure_;
 
   // Members initialized in |PostMainMessageLoopStart()| -----------------------
-  std::unique_ptr<BrowserProcessSubThread> io_thread_;
+  std::unique_ptr<BrowserProcessIOThread> io_thread_;
   std::unique_ptr<base::SystemMonitor> system_monitor_;
   std::unique_ptr<base::HighResolutionTimerManager> hi_res_timer_manager_;
   std::unique_ptr<net::NetworkChangeNotifier> network_change_notifier_;
diff --git a/content/browser/browser_process_sub_thread.cc b/content/browser/browser_process_io_thread.cc
similarity index 76%
rename from content/browser/browser_process_sub_thread.cc
rename to content/browser/browser_process_io_thread.cc
index 3937915..bd264fb 100644
--- a/content/browser/browser_process_sub_thread.cc
+++ b/content/browser/browser_process_io_thread.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "content/browser/browser_process_sub_thread.h"
+#include "content/browser/browser_process_io_thread.h"
 
 #include "base/bind.h"
 #include "base/callback_helpers.h"
@@ -35,37 +35,37 @@
 
 namespace content {
 
-BrowserProcessSubThread::BrowserProcessSubThread(BrowserThread::ID identifier)
-    : base::Thread(BrowserThreadImpl::GetThreadName(identifier)),
-      identifier_(identifier) {
+BrowserProcessIOThread::BrowserProcessIOThread()
+    : base::Thread(BrowserThreadImpl::GetThreadName(BrowserThread::IO)) {
   // Not bound to creation thread.
   DETACH_FROM_THREAD(browser_thread_checker_);
 }
 
-BrowserProcessSubThread::~BrowserProcessSubThread() {
+BrowserProcessIOThread::~BrowserProcessIOThread() {
   Stop();
 }
 
-void BrowserProcessSubThread::RegisterAsBrowserThread() {
+void BrowserProcessIOThread::RegisterAsBrowserThread() {
   DCHECK(IsRunning());
 
   DCHECK(!browser_thread_);
-  browser_thread_.reset(new BrowserThreadImpl(identifier_, task_runner()));
+  browser_thread_.reset(
+      new BrowserThreadImpl(BrowserThread::IO, task_runner()));
 
   // Unretained(this) is safe as |this| outlives its underlying thread.
   task_runner()->PostTask(
       FROM_HERE,
       base::BindOnce(
-          &BrowserProcessSubThread::CompleteInitializationOnBrowserThread,
+          &BrowserProcessIOThread::CompleteInitializationOnBrowserThread,
           Unretained(this)));
 }
 
-void BrowserProcessSubThread::AllowBlockingForTesting() {
+void BrowserProcessIOThread::AllowBlockingForTesting() {
   DCHECK(!IsRunning());
   is_blocking_allowed_for_testing_ = true;
 }
 
-void BrowserProcessSubThread::Init() {
+void BrowserProcessIOThread::Init() {
   DCHECK_CALLED_ON_VALID_THREAD(browser_thread_checker_);
 
 #if defined(OS_WIN)
@@ -77,7 +77,7 @@
   }
 }
 
-void BrowserProcessSubThread::Run(base::RunLoop* run_loop) {
+void BrowserProcessIOThread::Run(base::RunLoop* run_loop) {
   DCHECK_CALLED_ON_VALID_THREAD(browser_thread_checker_);
 
 #if defined(OS_ANDROID)
@@ -89,22 +89,10 @@
   }
 #endif
 
-  switch (identifier_) {
-    case BrowserThread::UI:
-      // The main thread is usually promoted as the UI thread and doesn't go
-      // through Run() but some tests do run a separate UI thread.
-      UIThreadRun(run_loop);
-      break;
-    case BrowserThread::IO:
-      IOThreadRun(run_loop);
-      return;
-    case BrowserThread::ID_COUNT:
-      NOTREACHED();
-      break;
-  }
+  IOThreadRun(run_loop);
 }
 
-void BrowserProcessSubThread::CleanUp() {
+void BrowserProcessIOThread::CleanUp() {
   DCHECK_CALLED_ON_VALID_THREAD(browser_thread_checker_);
 
   // Run extra cleanup if this thread represents BrowserThread::IO.
@@ -122,24 +110,13 @@
 #endif
 }
 
-void BrowserProcessSubThread::CompleteInitializationOnBrowserThread() {
+void BrowserProcessIOThread::CompleteInitializationOnBrowserThread() {
   DCHECK_CALLED_ON_VALID_THREAD(browser_thread_checker_);
 
   notification_service_ = std::make_unique<NotificationServiceImpl>();
 }
 
-// Mark following two functions as NOINLINE so the compiler doesn't merge
-// them together.
-
-NOINLINE void BrowserProcessSubThread::UIThreadRun(base::RunLoop* run_loop) {
-  Thread::Run(run_loop);
-
-  // Inhibit tail calls of Run and inhibit code folding.
-  const int line_number = __LINE__;
-  base::debug::Alias(&line_number);
-}
-
-NOINLINE void BrowserProcessSubThread::IOThreadRun(base::RunLoop* run_loop) {
+void BrowserProcessIOThread::IOThreadRun(base::RunLoop* run_loop) {
   // Register the IO thread for hang watching before it starts running and set
   // up a closure to automatically unregister it when Run() returns.
   base::ScopedClosureRunner unregister_thread_closure;
@@ -155,7 +132,7 @@
   base::debug::Alias(&line_number);
 }
 
-void BrowserProcessSubThread::IOThreadCleanUp() {
+void BrowserProcessIOThread::IOThreadCleanUp() {
   DCHECK_CALLED_ON_VALID_THREAD(browser_thread_checker_);
 
   // Kill all things that might be holding onto
@@ -165,7 +142,7 @@
   net::URLFetcher::CancelAll();
 }
 
-void BrowserProcessSubThread::ProcessHostCleanUp() {
+void BrowserProcessIOThread::ProcessHostCleanUp() {
   for (BrowserChildProcessHostIterator it(PROCESS_TYPE_UTILITY); !it.Done();
        ++it) {
     if (it.GetDelegate()->GetServiceName() ==
diff --git a/content/browser/browser_process_sub_thread.h b/content/browser/browser_process_io_thread.h
similarity index 68%
rename from content/browser/browser_process_sub_thread.h
rename to content/browser/browser_process_io_thread.h
index 92bacfb..1982096 100644
--- a/content/browser/browser_process_sub_thread.h
+++ b/content/browser/browser_process_io_thread.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CONTENT_BROWSER_BROWSER_PROCESS_SUB_THREAD_H_
-#define CONTENT_BROWSER_BROWSER_PROCESS_SUB_THREAD_H_
+#ifndef CONTENT_BROWSER_BROWSER_PROCESS_IO_THREAD_H_
+#define CONTENT_BROWSER_BROWSER_PROCESS_IO_THREAD_H_
 
 #include <memory>
 
@@ -19,7 +19,7 @@
 namespace win {
 class ScopedCOMInitializer;
 }
-}
+}  // namespace base
 #endif
 
 namespace content {
@@ -29,28 +29,28 @@
 namespace content {
 
 // ----------------------------------------------------------------------------
-// A BrowserProcessSubThread is a physical thread backing a BrowserThread.
+// A BrowserProcessIOThread is a physical thread backing the IO thread.
 //
 // Applications must initialize the COM library before they can call
 // COM library functions other than CoGetMalloc and memory allocation
 // functions, so this class initializes COM for those users.
-class CONTENT_EXPORT BrowserProcessSubThread : public base::Thread {
+class CONTENT_EXPORT BrowserProcessIOThread : public base::Thread {
  public:
-  // Constructs a BrowserProcessSubThread for |identifier|.
-  explicit BrowserProcessSubThread(BrowserThread::ID identifier);
-  ~BrowserProcessSubThread() override;
+  // Constructs a BrowserProcessIOThread.
+  BrowserProcessIOThread();
+  ~BrowserProcessIOThread() override;
 
-  // Registers this thread to represent |identifier_| in the browser_thread.h
+  // Registers this thread to represent the IO thread in the browser_thread.h
   // API. This thread must already be running when this is called. This can only
-  // be called once per BrowserProcessSubThread instance.
+  // be called once per BrowserProcessIOThread instance.
   void RegisterAsBrowserThread();
 
   // Ideally there wouldn't be a special blanket allowance to block the
   // BrowserThreads in tests but TestBrowserThreadImpl previously bypassed
-  // BrowserProcessSubThread and hence wasn't subject to ThreadRestrictions...
+  // BrowserProcessIOThread and hence wasn't subject to ThreadRestrictions...
   // Flipping that around in favor of explicit scoped allowances would be
   // preferable but a non-trivial amount of work. Can only be called before
-  // starting this BrowserProcessSubThread.
+  // starting this BrowserProcessIOThread.
   void AllowBlockingForTesting();
 
   static void ProcessHostCleanUp();
@@ -65,25 +65,20 @@
   // after it's promoted to a BrowserThread in |RegisterAsBrowserThread()|.
   void CompleteInitializationOnBrowserThread();
 
-  // These methods merely forwards to Thread::Run() but are useful to identify
-  // which BrowserThread this represents in stack traces.
-  void UIThreadRun(base::RunLoop* run_loop);
   void IOThreadRun(base::RunLoop* run_loop);
 
   // This method encapsulates cleanup that needs to happen on the IO thread.
   void IOThreadCleanUp();
 
-  const BrowserThread::ID identifier_;
-
   // BrowserThreads are not allowed to do file I/O nor wait on synchronization
   // primivives except when explicitly allowed in tests.
   bool is_blocking_allowed_for_testing_ = false;
 
-  // The BrowserThread registration for this |identifier_|, initialized in
+  // The BrowserThread registration for this IO thread, initialized in
   // RegisterAsBrowserThread().
   std::unique_ptr<BrowserThreadImpl> browser_thread_;
 
-#if defined (OS_WIN)
+#if defined(OS_WIN)
   std::unique_ptr<base::win::ScopedCOMInitializer> com_initializer_;
 #endif
 
@@ -92,9 +87,9 @@
 
   THREAD_CHECKER(browser_thread_checker_);
 
-  DISALLOW_COPY_AND_ASSIGN(BrowserProcessSubThread);
+  DISALLOW_COPY_AND_ASSIGN(BrowserProcessIOThread);
 };
 
 }  // namespace content
 
-#endif  // CONTENT_BROWSER_BROWSER_PROCESS_SUB_THREAD_H_
+#endif  // CONTENT_BROWSER_BROWSER_PROCESS_IO_THREAD_H_
diff --git a/content/browser/browser_thread_impl.h b/content/browser/browser_thread_impl.h
index 5912ddc..c7b5b5ad 100644
--- a/content/browser/browser_thread_impl.h
+++ b/content/browser/browser_thread_impl.h
@@ -19,7 +19,7 @@
 namespace content {
 
 class BrowserMainLoop;
-class BrowserProcessSubThread;
+class BrowserProcessIOThread;
 class TestBrowserThread;
 
 // BrowserThreadImpl is a scoped object which maps a SingleThreadTaskRunner to a
@@ -50,10 +50,10 @@
   using BrowserThread::GetTaskRunnerForThread;
 
  private:
-  // Restrict instantiation to BrowserProcessSubThread as it performs important
+  // Restrict instantiation to BrowserProcessIOThread as it performs important
   // initialization that shouldn't be bypassed (except by BrowserMainLoop for
   // the main thread).
-  friend class BrowserProcessSubThread;
+  friend class BrowserProcessIOThread;
   friend class BrowserMainLoop;
   // TestBrowserThread is also allowed to construct this when instantiating fake
   // threads.
diff --git a/content/browser/browser_thread_unittest.cc b/content/browser/browser_thread_unittest.cc
index 7c618f4..413de99 100644
--- a/content/browser/browser_thread_unittest.cc
+++ b/content/browser/browser_thread_unittest.cc
@@ -21,7 +21,7 @@
 #include "base/test/task_environment.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
-#include "content/browser/browser_process_sub_thread.h"
+#include "content/browser/browser_process_io_thread.h"
 #include "content/browser/browser_thread_impl.h"
 #include "content/browser/scheduler/browser_io_thread_delegate.h"
 #include "content/browser/scheduler/browser_task_executor.h"
@@ -86,25 +86,22 @@
 class BrowserThreadTest : public testing::Test {
  public:
   void Release() const {
-    EXPECT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::UI));
+    EXPECT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO));
     EXPECT_TRUE(on_release_);
     std::move(on_release_).Run();
   }
 
   void AddRef() {}
 
-  void StopUIThread() { ui_thread_->Stop(); }
-
  protected:
   void SetUp() override {
-    ui_thread_ = std::make_unique<BrowserProcessSubThread>(BrowserThread::UI);
+    ui_thread_ = std::make_unique<base::Thread>(
+        BrowserThreadImpl::GetThreadName(BrowserThread::UI));
     base::Thread::Options ui_options;
     ui_options.delegate = new SequenceManagerThreadDelegate();
     ui_thread_->StartWithOptions(ui_options);
 
     io_thread_ = BrowserTaskExecutor::CreateIOThread();
-
-    ui_thread_->RegisterAsBrowserThread();
     io_thread_->RegisterAsBrowserThread();
   }
 
@@ -112,7 +109,6 @@
     io_thread_.reset();
     ui_thread_.reset();
 
-    BrowserThreadImpl::ResetGlobalsForTesting(BrowserThread::UI);
     BrowserThreadImpl::ResetGlobalsForTesting(BrowserThread::IO);
     BrowserTaskExecutor::ResetForTesting();
   }
@@ -149,8 +145,8 @@
   };
 
  private:
-  std::unique_ptr<BrowserProcessSubThread> ui_thread_;
-  std::unique_ptr<BrowserProcessSubThread> io_thread_;
+  std::unique_ptr<base::Thread> ui_thread_;
+  std::unique_ptr<BrowserProcessIOThread> io_thread_;
 
   base::test::TaskEnvironment task_environment_;
   // Must be set before Release() to verify the deletion is intentional. Will be
@@ -208,7 +204,7 @@
 TEST_F(BrowserThreadTest, Release) {
   base::RunLoop run_loop;
   ExpectRelease(run_loop.QuitWhenIdleClosure());
-  BrowserThread::ReleaseSoon(BrowserThread::UI, FROM_HERE,
+  BrowserThread::ReleaseSoon(BrowserThread::IO, FROM_HERE,
                              base::WrapRefCounted(this));
   run_loop.Run();
 }
@@ -251,21 +247,10 @@
   run_loop.Run();
 }
 
-#if defined(OS_WIN)
-TEST_F(BrowserThreadTest, PostTaskViaCOMSTATaskRunner) {
-  scoped_refptr<base::SingleThreadTaskRunner> task_runner =
-      GetUIThreadTaskRunner({});
-  base::RunLoop run_loop;
-  EXPECT_TRUE(task_runner->PostTask(
-      FROM_HERE, base::BindOnce(&BasicFunction, run_loop.QuitWhenIdleClosure(),
-                                BrowserThread::UI)));
-  run_loop.Run();
-}
-#endif  // defined(OS_WIN)
 
 TEST_F(BrowserThreadTest, ReleaseViaTaskRunner) {
   scoped_refptr<base::SingleThreadTaskRunner> task_runner =
-      GetUIThreadTaskRunner({});
+      GetIOThreadTaskRunner({});
   base::RunLoop run_loop;
   ExpectRelease(run_loop.QuitWhenIdleClosure());
   task_runner->ReleaseSoon(FROM_HERE, base::WrapRefCounted(this));
@@ -281,18 +266,6 @@
   run_loop.Run();
 }
 
-TEST_F(BrowserThreadTest, RunsTasksInCurrentSequenceDuringShutdown) {
-  bool did_shutdown = false;
-  base::RunLoop loop;
-  UIThreadDestructionObserver observer(&did_shutdown, loop.QuitClosure());
-  base::ThreadTaskRunnerHandle::Get()->PostTask(
-      FROM_HERE,
-      base::BindOnce(&BrowserThreadTest::StopUIThread, base::Unretained(this)));
-  loop.Run();
-
-  EXPECT_TRUE(did_shutdown);
-}
-
 class BrowserThreadWithCustomSchedulerTest : public testing::Test {
  private:
   class TaskEnvironmentWithCustomScheduler
@@ -310,19 +283,19 @@
           std::move(browser_ui_thread_scheduler),
           std::make_unique<BrowserIOThreadDelegate>());
 
-      ui_thread_ = BrowserTaskExecutor::CreateIOThread();
+      io_thread_ = BrowserTaskExecutor::CreateIOThread();
       BrowserTaskExecutor::InitializeIOThread();
-      ui_thread_->RegisterAsBrowserThread();
+      io_thread_->RegisterAsBrowserThread();
     }
 
     ~TaskEnvironmentWithCustomScheduler() override {
-      ui_thread_.reset();
+      io_thread_.reset();
       BrowserThreadImpl::ResetGlobalsForTesting(BrowserThread::IO);
       BrowserTaskExecutor::ResetForTesting();
     }
 
    private:
-    std::unique_ptr<BrowserProcessSubThread> ui_thread_;
+    std::unique_ptr<BrowserProcessIOThread> io_thread_;
   };
 
  public:
diff --git a/content/browser/devtools/render_frame_devtools_agent_host.h b/content/browser/devtools/render_frame_devtools_agent_host.h
index 595b09b..bd51ddc 100644
--- a/content/browser/devtools/render_frame_devtools_agent_host.h
+++ b/content/browser/devtools/render_frame_devtools_agent_host.h
@@ -17,11 +17,9 @@
 #include "build/build_config.h"
 #include "content/browser/devtools/devtools_agent_host_impl.h"
 #include "content/common/content_export.h"
-#include "content/common/navigation_params.mojom.h"
 #include "content/public/browser/render_process_host_observer.h"
 #include "content/public/browser/web_contents_observer.h"
 #include "net/base/net_errors.h"
-#include "services/network/public/mojom/url_loader_factory.mojom.h"
 
 #if defined(OS_ANDROID)
 #include "mojo/public/cpp/bindings/remote.h"
diff --git a/content/browser/dom_storage/dom_storage_context_wrapper.h b/content/browser/dom_storage/dom_storage_context_wrapper.h
index 17fb303..d6d11e8 100644
--- a/content/browser/dom_storage/dom_storage_context_wrapper.h
+++ b/content/browser/dom_storage/dom_storage_context_wrapper.h
@@ -8,7 +8,6 @@
 #include <map>
 #include <string>
 
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/memory_pressure_listener.h"
 #include "base/memory/ref_counted.h"
diff --git a/content/browser/font_unique_name_lookup/font_unique_name_lookup_service.h b/content/browser/font_unique_name_lookup/font_unique_name_lookup_service.h
index 515865e..091c54c0 100644
--- a/content/browser/font_unique_name_lookup/font_unique_name_lookup_service.h
+++ b/content/browser/font_unique_name_lookup/font_unique_name_lookup_service.h
@@ -5,7 +5,6 @@
 #ifndef CONTENT_BROWSER_FONT_UNIQUE_NAME_LOOKUP_FONT_UNIQUE_NAME_LOOKUP_SERVICE_H_
 #define CONTENT_BROWSER_FONT_UNIQUE_NAME_LOOKUP_FONT_UNIQUE_NAME_LOOKUP_SERVICE_H_
 
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "third_party/blink/public/mojom/font_unique_name_lookup/font_unique_name_lookup.mojom.h"
diff --git a/content/browser/indexed_db/indexed_db_active_blob_registry.h b/content/browser/indexed_db/indexed_db_active_blob_registry.h
index 1dee4cd..38104679 100644
--- a/content/browser/indexed_db/indexed_db_active_blob_registry.h
+++ b/content/browser/indexed_db/indexed_db_active_blob_registry.h
@@ -12,7 +12,6 @@
 #include <utility>
 
 #include "base/callback.h"
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "base/sequence_checker.h"
diff --git a/content/browser/loader/navigation_loader_interceptor.h b/content/browser/loader/navigation_loader_interceptor.h
index 4c748a5..c776845 100644
--- a/content/browser/loader/navigation_loader_interceptor.h
+++ b/content/browser/loader/navigation_loader_interceptor.h
@@ -15,7 +15,6 @@
 #include "net/url_request/redirect_info.h"
 #include "services/network/public/cpp/shared_url_loader_factory.h"
 #include "services/network/public/mojom/url_loader.mojom.h"
-#include "services/network/public/mojom/url_loader_factory.mojom.h"
 #include "services/network/public/mojom/url_response_head.mojom.h"
 
 namespace blink {
diff --git a/content/browser/loader/prefetch_url_loader.h b/content/browser/loader/prefetch_url_loader.h
index ffa21b4..c9a23b53 100644
--- a/content/browser/loader/prefetch_url_loader.h
+++ b/content/browser/loader/prefetch_url_loader.h
@@ -22,7 +22,6 @@
 #include "net/base/network_isolation_key.h"
 #include "net/traffic_annotation/network_traffic_annotation.h"
 #include "services/network/public/mojom/url_loader.mojom.h"
-#include "services/network/public/mojom/url_loader_factory.mojom.h"
 #include "url/gurl.h"
 
 namespace network {
diff --git a/content/browser/native_io/native_io_file_host.h b/content/browser/native_io/native_io_file_host.h
index fe6c94a..65ee4760 100644
--- a/content/browser/native_io/native_io_file_host.h
+++ b/content/browser/native_io/native_io_file_host.h
@@ -7,7 +7,6 @@
 
 #include <string>
 
-#include "base/files/file_path.h"
 #include "base/sequence_checker.h"
 #include "build/build_config.h"
 #include "mojo/public/cpp/bindings/receiver.h"
diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/browser/renderer_host/render_frame_host_impl.cc
index 61a3754..ef9aac1 100644
--- a/content/browser/renderer_host/render_frame_host_impl.cc
+++ b/content/browser/renderer_host/render_frame_host_impl.cc
@@ -5294,9 +5294,11 @@
                           GetLastCommittedOrigin())
                     : true;
     if (is_same_origin_activation) {
-      SiteInstance::StartIsolatingSite(GetSiteInstance()->GetBrowserContext(),
-                                       GetMainFrame()->GetLastCommittedURL(),
-                                       false /* should_persist */);
+      SiteInstance::StartIsolatingSite(
+          GetSiteInstance()->GetBrowserContext(),
+          GetMainFrame()->GetLastCommittedURL(),
+          ChildProcessSecurityPolicy::IsolatedOriginSource::WEB_TRIGGERED,
+          false /* should_persist */);
     }
   }
 }
diff --git a/content/browser/renderer_host/render_frame_host_manager.cc b/content/browser/renderer_host/render_frame_host_manager.cc
index 1fda71b..548784bb 100644
--- a/content/browser/renderer_host/render_frame_host_manager.cc
+++ b/content/browser/renderer_host/render_frame_host_manager.cc
@@ -2836,8 +2836,18 @@
           navigation_request->coop_status().current_coop().value ==
           network::mojom::CrossOriginOpenerPolicyValue::kSameOriginPlusCoep;
       if (is_cross_origin_isolated) {
-        return WebExposedIsolationInfo::CreateIsolated(
-            url::Origin::Create(navigation_request->common_params().url));
+        url::Origin origin =
+            url::Origin::Create(navigation_request->common_params().url);
+
+        // For short-term testing, we'll treat COI as "good enough" to treat as
+        // an isolated application iff the kDirectSockets feature is also
+        // enabled.
+        //
+        // TODO(mkwst): Build a better distinction: https://crbug.com/1206150.
+        if (base::FeatureList::IsEnabled(features::kDirectSockets))
+          return WebExposedIsolationInfo::CreateIsolatedApplication(origin);
+
+        return WebExposedIsolationInfo::CreateIsolated(origin);
       }
     } else {
       // If we are in an iframe, we inherit the isolation state of
diff --git a/content/browser/renderer_host/render_message_filter.h b/content/browser/renderer_host/render_message_filter.h
index 40b193b..3bc1a2a 100644
--- a/content/browser/renderer_host/render_message_filter.h
+++ b/content/browser/renderer_host/render_message_filter.h
@@ -12,7 +12,6 @@
 #include <string>
 #include <vector>
 
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "base/sequenced_task_runner_helpers.h"
diff --git a/content/browser/scheduler/browser_task_executor.cc b/content/browser/scheduler/browser_task_executor.cc
index 82801d3..cf85dd5 100644
--- a/content/browser/scheduler/browser_task_executor.cc
+++ b/content/browser/scheduler/browser_task_executor.cc
@@ -16,7 +16,7 @@
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/trace_event.h"
 #include "build/build_config.h"
-#include "content/browser/browser_process_sub_thread.h"
+#include "content/browser/browser_process_io_thread.h"
 #include "content/browser/browser_thread_impl.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/common/content_features.h"
@@ -303,7 +303,7 @@
   Get()->browser_io_thread_handle_->EnableAllExceptBestEffortQueues();
 }
 
-std::unique_ptr<BrowserProcessSubThread> BrowserTaskExecutor::CreateIOThread() {
+std::unique_ptr<BrowserProcessIOThread> BrowserTaskExecutor::CreateIOThread() {
   DCHECK(Get()->io_thread_executor_);
 
   std::unique_ptr<BrowserIOThreadDelegate> browser_io_thread_delegate =
@@ -312,7 +312,7 @@
   DCHECK(browser_io_thread_delegate);
   TRACE_EVENT0("startup", "BrowserTaskExecutor::CreateIOThread");
 
-  auto io_thread = std::make_unique<BrowserProcessSubThread>(BrowserThread::IO);
+  auto io_thread = std::make_unique<BrowserProcessIOThread>();
 
   if (browser_io_thread_delegate->allow_blocking_for_testing()) {
     io_thread->AllowBlockingForTesting();
diff --git a/content/browser/scheduler/browser_task_executor.h b/content/browser/scheduler/browser_task_executor.h
index cefddbdc..a9bd928 100644
--- a/content/browser/scheduler/browser_task_executor.h
+++ b/content/browser/scheduler/browser_task_executor.h
@@ -29,7 +29,7 @@
 namespace content {
 
 class BrowserTaskExecutorTest;
-class BrowserProcessSubThread;
+class BrowserProcessIOThread;
 
 class CONTENT_EXPORT BaseBrowserTaskExecutor : public base::TaskExecutor {
  public:
@@ -101,7 +101,7 @@
   // Browser task queues will initially be disabled, that is tasks posted to
   // them will not run. But the default task runner of the thread (the one you
   // get via ThreadTaskRunnerHandle::Get()) will be active. This is the same
-  // task runner you get by calling BrowserProcessSubThread::task_runner(). The
+  // task runner you get by calling BrowserProcessIOThread::task_runner(). The
   // queues can be initialized by calling InitializeIOThread which is done
   // during Chromium starup in BrowserMainLoop::CreateThreads.
   //
@@ -119,7 +119,7 @@
   // IO thread).
   // Attention: Must be called after Create()
   // Attention: Can not be called after Shutdown() or ResetForTesting()
-  static std::unique_ptr<BrowserProcessSubThread> CreateIOThread();
+  static std::unique_ptr<BrowserProcessIOThread> CreateIOThread();
 
   // Enables non best effort queues on the IO thread. Usually called from
   // BrowserMainLoop::CreateThreads.
diff --git a/content/browser/service_worker/service_worker_context_core.h b/content/browser/service_worker/service_worker_context_core.h
index 75bd1130..1947e87 100644
--- a/content/browser/service_worker/service_worker_context_core.h
+++ b/content/browser/service_worker/service_worker_context_core.h
@@ -14,7 +14,6 @@
 
 #include "base/callback.h"
 #include "base/containers/id_map.h"
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "base/observer_list_threadsafe.h"
diff --git a/content/browser/service_worker/service_worker_fetch_dispatcher.h b/content/browser/service_worker/service_worker_fetch_dispatcher.h
index f17fd56..7a62b98 100644
--- a/content/browser/service_worker/service_worker_fetch_dispatcher.h
+++ b/content/browser/service_worker/service_worker_fetch_dispatcher.h
@@ -19,8 +19,6 @@
 #include "content/public/browser/web_contents.h"
 #include "mojo/public/cpp/system/data_pipe.h"
 #include "services/network/public/mojom/fetch_api.mojom.h"
-#include "services/network/public/mojom/url_loader.mojom.h"
-#include "services/network/public/mojom/url_loader_factory.mojom.h"
 #include "third_party/blink/public/common/service_worker/service_worker_status_code.h"
 #include "third_party/blink/public/mojom/fetch/fetch_api_request.mojom.h"
 #include "third_party/blink/public/mojom/fetch/fetch_api_response.mojom.h"
diff --git a/content/browser/service_worker/service_worker_installed_script_loader.h b/content/browser/service_worker/service_worker_installed_script_loader.h
index c6ccf27..d25545f 100644
--- a/content/browser/service_worker/service_worker_installed_script_loader.h
+++ b/content/browser/service_worker/service_worker_installed_script_loader.h
@@ -12,7 +12,6 @@
 #include "mojo/public/cpp/system/data_pipe.h"
 #include "mojo/public/cpp/system/data_pipe_drainer.h"
 #include "services/network/public/mojom/url_loader.mojom.h"
-#include "services/network/public/mojom/url_loader_factory.mojom.h"
 
 namespace content {
 
diff --git a/content/browser/service_worker/service_worker_registry.h b/content/browser/service_worker/service_worker_registry.h
index e63286c..1696c3c 100644
--- a/content/browser/service_worker/service_worker_registry.h
+++ b/content/browser/service_worker/service_worker_registry.h
@@ -9,7 +9,6 @@
 
 #include "base/containers/flat_set.h"
 #include "base/containers/unique_ptr_adapters.h"
-#include "base/files/file_path.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/threading/sequence_bound.h"
 #include "components/services/storage/public/mojom/service_worker_storage_control.mojom.h"
diff --git a/content/browser/site_instance_impl.cc b/content/browser/site_instance_impl.cc
index ddf7978..4ca99ce 100644
--- a/content/browser/site_instance_impl.cc
+++ b/content/browser/site_instance_impl.cc
@@ -1773,9 +1773,11 @@
 }
 
 // static
-void SiteInstance::StartIsolatingSite(BrowserContext* context,
-                                      const GURL& url,
-                                      bool should_persist) {
+void SiteInstance::StartIsolatingSite(
+    BrowserContext* context,
+    const GURL& url,
+    ChildProcessSecurityPolicy::IsolatedOriginSource source,
+    bool should_persist) {
   if (!SiteIsolationPolicy::AreDynamicIsolatedOriginsEnabled())
     return;
 
@@ -1794,10 +1796,7 @@
   ChildProcessSecurityPolicyImpl* policy =
       ChildProcessSecurityPolicyImpl::GetInstance();
   url::Origin site_origin(url::Origin::Create(site));
-  policy->AddFutureIsolatedOrigins(
-      {site_origin},
-      ChildProcessSecurityPolicy::IsolatedOriginSource::USER_TRIGGERED,
-      context);
+  policy->AddFutureIsolatedOrigins({site_origin}, source, context);
 
   // This function currently assumes the new isolated site should persist
   // across restarts, so ask the embedder to save it, excluding off-the-record
diff --git a/content/browser/site_instance_impl_unittest.cc b/content/browser/site_instance_impl_unittest.cc
index f267a2c..98c3b2a 100644
--- a/content/browser/site_instance_impl_unittest.cc
+++ b/content/browser/site_instance_impl_unittest.cc
@@ -1584,20 +1584,28 @@
   auto* policy = ChildProcessSecurityPolicyImpl::GetInstance();
 
   // StartIsolatingSite() should convert the URL to a site before isolating it.
-  SiteInstance::StartIsolatingSite(context(),
-                                   GURL("http://bar.foo.com/foo/bar.html"));
+  SiteInstance::StartIsolatingSite(
+      context(), GURL("http://bar.foo.com/foo/html.bar"),
+      ChildProcessSecurityPolicy::IsolatedOriginSource::TEST);
   EXPECT_TRUE(IsIsolatedOrigin(GURL("http://foo.com")));
-  SiteInstance::StartIsolatingSite(context(), GURL("https://a.b.c.com:8000/"));
+  SiteInstance::StartIsolatingSite(
+      context(), GURL("https://a.b.c.com:8000/"),
+      ChildProcessSecurityPolicy::IsolatedOriginSource::TEST);
   EXPECT_TRUE(IsIsolatedOrigin(GURL("https://c.com")));
-  SiteInstance::StartIsolatingSite(context(),
-                                   GURL("http://bar.com/foo/bar.html"));
+  SiteInstance::StartIsolatingSite(
+      context(), GURL("http://bar.com/foo/bar.html"),
+      ChildProcessSecurityPolicy::IsolatedOriginSource::TEST);
   EXPECT_TRUE(IsIsolatedOrigin(GURL("http://bar.com")));
 
   // Attempts to isolate an unsupported isolated origin should be ignored.
   GURL data_url("data:,");
   GURL blank_url(url::kAboutBlankURL);
-  SiteInstance::StartIsolatingSite(context(), data_url);
-  SiteInstance::StartIsolatingSite(context(), blank_url);
+  SiteInstance::StartIsolatingSite(
+      context(), data_url,
+      ChildProcessSecurityPolicy::IsolatedOriginSource::TEST);
+  SiteInstance::StartIsolatingSite(
+      context(), blank_url,
+      ChildProcessSecurityPolicy::IsolatedOriginSource::TEST);
   EXPECT_FALSE(IsIsolatedOrigin(data_url));
   EXPECT_FALSE(IsIsolatedOrigin(blank_url));
 
diff --git a/content/browser/speech/speech_recognition_engine.h b/content/browser/speech/speech_recognition_engine.h
index 3bb2a30..e9f2f8b 100644
--- a/content/browser/speech/speech_recognition_engine.h
+++ b/content/browser/speech/speech_recognition_engine.h
@@ -23,7 +23,6 @@
 #include "content/common/content_export.h"
 #include "content/public/browser/speech_recognition_session_preamble.h"
 #include "services/network/public/cpp/simple_url_loader_stream_consumer.h"
-#include "services/network/public/mojom/url_loader_factory.mojom.h"
 #include "third_party/blink/public/mojom/speech/speech_recognition_error.mojom.h"
 #include "third_party/blink/public/mojom/speech/speech_recognition_grammar.mojom.h"
 #include "third_party/blink/public/mojom/speech/speech_recognition_result.mojom.h"
diff --git a/content/browser/startup_data_impl.h b/content/browser/startup_data_impl.h
index 40cfc78..124a937 100644
--- a/content/browser/startup_data_impl.h
+++ b/content/browser/startup_data_impl.h
@@ -7,7 +7,7 @@
 
 #include <memory>
 
-#include "content/browser/browser_process_sub_thread.h"
+#include "content/browser/browser_process_io_thread.h"
 #include "content/common/content_export.h"
 #include "content/public/browser/startup_data.h"
 #include "mojo/core/embedder/scoped_ipc_support.h"
@@ -19,7 +19,7 @@
   StartupDataImpl();
   ~StartupDataImpl() override;
 
-  std::unique_ptr<BrowserProcessSubThread> io_thread;
+  std::unique_ptr<BrowserProcessIOThread> io_thread;
   std::unique_ptr<mojo::core::ScopedIPCSupport> mojo_ipc_support;
 };
 
diff --git a/content/browser/webrtc/webrtc_getusermedia_browsertest.cc b/content/browser/webrtc/webrtc_getusermedia_browsertest.cc
index d2e9851..7f633e0 100644
--- a/content/browser/webrtc/webrtc_getusermedia_browsertest.cc
+++ b/content/browser/webrtc/webrtc_getusermedia_browsertest.cc
@@ -143,11 +143,11 @@
     base::ListValue* values;
     ASSERT_TRUE(parsed_json.value->GetAsList(&values));
 
-    for (auto it = values->begin(); it != values->end(); ++it) {
+    for (const auto& entry : values->GetList()) {
       const base::DictionaryValue* dict;
       std::string kind;
       std::string device_id;
-      ASSERT_TRUE(it->GetAsDictionary(&dict));
+      ASSERT_TRUE(entry.GetAsDictionary(&dict));
       ASSERT_TRUE(dict->GetString("kind", &kind));
       ASSERT_TRUE(dict->GetString("id", &device_id));
       ASSERT_FALSE(device_id.empty());
diff --git a/content/browser/webrtc/webrtc_internals.cc b/content/browser/webrtc/webrtc_internals.cc
index fed7574..bae334e 100644
--- a/content/browser/webrtc/webrtc_internals.cc
+++ b/content/browser/webrtc/webrtc_internals.cc
@@ -338,7 +338,7 @@
   DisableLocalEventLogRecordings();
 
   // TODO(tommi): Consider removing all the peer_connection_data_.
-  for (auto& dictionary : peer_connection_data_)
+  for (auto& dictionary : peer_connection_data_.GetList())
     FreeLogList(&dictionary);
 }
 
@@ -359,7 +359,7 @@
   if (peer_connection_data_.GetSize() > 0)
     observer->OnUpdate("update-all-peer-connections", &peer_connection_data_);
 
-  for (const auto& request : get_user_media_requests_) {
+  for (const auto& request : get_user_media_requests_.GetList()) {
     observer->OnUpdate("add-get-user-media", &request);
   }
 }
diff --git a/content/browser/webrtc/webrtc_internals_unittest.cc b/content/browser/webrtc/webrtc_internals_unittest.cc
index 4c4e94f3..2e3682b 100644
--- a/content/browser/webrtc/webrtc_internals_unittest.cc
+++ b/content/browser/webrtc/webrtc_internals_unittest.cc
@@ -210,7 +210,7 @@
   ASSERT_TRUE(observer.event_data()->GetAsList(&list));
   EXPECT_EQ(1U, list->GetSize());
   base::DictionaryValue* dict = nullptr;
-  ASSERT_TRUE((*list->begin()).GetAsDictionary(&dict));
+  ASSERT_TRUE((*list->GetList().begin()).GetAsDictionary(&dict));
   base::ListValue* log = nullptr;
   ASSERT_FALSE(dict->GetList("log", &log));
 
@@ -239,7 +239,7 @@
   ASSERT_TRUE(observer.event_data()->GetAsList(&list));
   EXPECT_EQ(1U, list->GetSize());
   base::DictionaryValue* dict = nullptr;
-  ASSERT_TRUE((*list->begin()).GetAsDictionary(&dict));
+  ASSERT_TRUE((*list->GetList().begin()).GetAsDictionary(&dict));
   base::ListValue* log = nullptr;
   ASSERT_TRUE(dict->GetList("log", &log));
 
@@ -250,7 +250,7 @@
 
   ASSERT_TRUE(observer.event_data()->GetAsList(&list));
   EXPECT_EQ(1U, list->GetSize());
-  ASSERT_TRUE((*list->begin()).GetAsDictionary(&dict));
+  ASSERT_TRUE((*list->GetList().begin()).GetAsDictionary(&dict));
   ASSERT_FALSE(dict->GetList("log", &log));
 
   webrtc_internals.OnPeerConnectionRemoved(kFrameId, kLid);
@@ -410,7 +410,7 @@
   EXPECT_EQ(1U, list->GetSize());
 
   base::DictionaryValue* dict = nullptr;
-  EXPECT_TRUE((*list->begin()).GetAsDictionary(&dict));
+  EXPECT_TRUE((*list->GetList().begin()).GetAsDictionary(&dict));
 
   VerifyInt(dict, "rid", kFrameId.child_id);
   VerifyInt(dict, "lid", kLid);
@@ -423,7 +423,7 @@
   ASSERT_TRUE(dict->GetList("log", &log));
   EXPECT_EQ(1U, log->GetSize());
 
-  EXPECT_TRUE((*log->begin()).GetAsDictionary(&dict));
+  EXPECT_TRUE((*log->GetList().begin()).GetAsDictionary(&dict));
   VerifyString(dict, "type", update_type);
   VerifyString(dict, "value", update_value);
   std::string time;
diff --git a/content/browser/worker_host/shared_worker_service_impl.h b/content/browser/worker_host/shared_worker_service_impl.h
index 777cff19..5a29a65 100644
--- a/content/browser/worker_host/shared_worker_service_impl.h
+++ b/content/browser/worker_host/shared_worker_service_impl.h
@@ -21,8 +21,6 @@
 #include "content/public/browser/shared_worker_service.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "services/metrics/public/cpp/ukm_source_id.h"
-#include "services/network/public/mojom/url_loader_factory.mojom.h"
-#include "services/network/public/mojom/url_response_head.mojom.h"
 #include "third_party/blink/public/common/tokens/tokens.h"
 #include "third_party/blink/public/mojom/loader/fetch_client_settings_object.mojom.h"
 #include "third_party/blink/public/mojom/worker/shared_worker_connector.mojom.h"
diff --git a/content/browser/worker_host/worker_script_fetch_initiator.h b/content/browser/worker_host/worker_script_fetch_initiator.h
index c367759..fc8be2ff 100644
--- a/content/browser/worker_host/worker_script_fetch_initiator.h
+++ b/content/browser/worker_host/worker_script_fetch_initiator.h
@@ -17,8 +17,6 @@
 #include "content/public/browser/service_worker_client_info.h"
 #include "services/metrics/public/cpp/ukm_source_id.h"
 #include "services/network/public/mojom/fetch_api.mojom.h"
-#include "services/network/public/mojom/url_loader_factory.mojom.h"
-#include "services/network/public/mojom/url_response_head.mojom.h"
 #include "third_party/blink/public/common/loader/url_loader_throttle.h"
 #include "third_party/blink/public/common/tokens/tokens.h"
 #include "third_party/blink/public/mojom/loader/fetch_client_settings_object.mojom.h"
diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc
index 19c767e..28fe6cab 100644
--- a/content/child/runtime_features.cc
+++ b/content/child/runtime_features.cc
@@ -361,6 +361,7 @@
           {"FeaturePolicyForClientHints",
            features::kFeaturePolicyForClientHints},
           {"EditingNG", blink::features::kEditingNG},
+          {"FileHandling", blink::features::kFileHandlingAPI},
           {"FontAccess", blink::features::kFontAccess},
           {"FontAccessPersistent", blink::features::kFontAccessPersistent},
           {"FontSrcLocalMatching", features::kFontSrcLocalMatching},
@@ -551,10 +552,6 @@
   // They're moved here to distinguish them from actual base checks
   WebRuntimeFeatures::EnableOverlayScrollbars(ui::IsOverlayScrollbarEnabled());
 
-  if (base::FeatureList::IsEnabled(blink::features::kFileHandlingAPI)) {
-    WebRuntimeFeatures::EnableFeatureFromString("FileHandling", true);
-  }
-
   // TODO(rodneyding): This is a rare case for a stable feature
   // Need to investigate more to determine whether to refactor it.
   if (command_line.HasSwitch(switches::kDisableV8IdleTasks))
diff --git a/content/public/browser/background_fetch_delegate.h b/content/public/browser/background_fetch_delegate.h
index 49dd3b5..f19b0fb 100644
--- a/content/public/browser/background_fetch_delegate.h
+++ b/content/public/browser/background_fetch_delegate.h
@@ -10,7 +10,6 @@
 #include <vector>
 
 #include "base/callback_forward.h"
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "base/optional.h"
diff --git a/content/public/browser/site_instance.h b/content/public/browser/site_instance.h
index eeb5f839..99e1dad8 100644
--- a/content/public/browser/site_instance.h
+++ b/content/public/browser/site_instance.h
@@ -10,6 +10,7 @@
 
 #include "base/memory/ref_counted.h"
 #include "content/common/content_export.h"
+#include "content/public/browser/child_process_security_policy.h"
 #include "content/public/browser/site_instance_process_assignment.h"
 #include "url/gurl.h"
 
@@ -216,7 +217,8 @@
   // in via OAuth on that site).  The site will be determined from |url|'s
   // scheme and eTLD+1. If |context| is non-null, the site will be isolated
   // only within that BrowserContext; if |context| is null, the site will be
-  // isolated globally for all BrowserContexts.
+  // isolated globally for all BrowserContexts. |source| specifies why the new
+  // site is being isolated.
   //
   // Note that this has no effect if site isolation is turned off, such as via
   // the kDisableSiteIsolation cmdline flag or enterprise policy -- see also
@@ -230,9 +232,11 @@
   // until the end of the current browsing session.  This is appropriate if the
   // site's persistence is not desired or is managed separately (e.g., sites
   // isolated due to OAuth logins are saved and in another component).
-  static void StartIsolatingSite(BrowserContext* context,
-                                 const GURL& url,
-                                 bool should_persist = true);
+  static void StartIsolatingSite(
+      BrowserContext* context,
+      const GURL& url,
+      ChildProcessSecurityPolicy::IsolatedOriginSource source,
+      bool should_persist = true);
 
  protected:
   friend class base::RefCounted<SiteInstance>;
diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc
index c3219254..3f3a2c6 100644
--- a/content/public/common/content_features.cc
+++ b/content/public/common/content_features.cc
@@ -818,6 +818,18 @@
 const base::Feature kWebAssemblyBaseline{"WebAssemblyBaseline",
                                          base::FEATURE_ENABLED_BY_DEFAULT};
 
+// Enable memory protection for code JITed for WebAssembly.
+const base::Feature kWebAssemblyCodeProtection{
+    "WebAssemblyCodeProtection", base::FEATURE_DISABLED_BY_DEFAULT};
+
+#if defined(OS_LINUX) && defined(ARCH_CPU_X86_64)
+// Use memory protection keys in userspace (PKU) (if available) to protect code
+// JITed for WebAssembly. Fall back to traditional memory protection if
+// WebAssemblyCodeProtection is also enabled.
+const base::Feature kWebAssemblyCodeProtectionPku{
+    "WebAssemblyCodeProtectionPku", base::FEATURE_DISABLED_BY_DEFAULT};
+#endif  // defined(OS_LINUX) && defined(ARCH_CPU_X86_64)
+
 // Enable WebAssembly lazy compilation (JIT on first call).
 const base::Feature kWebAssemblyLazyCompilation{
     "WebAssemblyLazyCompilation", base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/content/public/common/content_features.h b/content/public/common/content_features.h
index 6efd166..935f6cec 100644
--- a/content/public/common/content_features.h
+++ b/content/public/common/content_features.h
@@ -209,6 +209,10 @@
 CONTENT_EXPORT extern const base::Feature kV8VmFuture;
 CONTENT_EXPORT extern const base::Feature kWebAppWindowControlsOverlay;
 CONTENT_EXPORT extern const base::Feature kWebAssemblyBaseline;
+CONTENT_EXPORT extern const base::Feature kWebAssemblyCodeProtection;
+#if defined(OS_LINUX) && defined(ARCH_CPU_X86_64)
+CONTENT_EXPORT extern const base::Feature kWebAssemblyCodeProtectionPku;
+#endif  // defined(OS_LINUX) && defined(ARCH_CPU_X86_64)
 CONTENT_EXPORT extern const base::Feature kWebAssemblyLazyCompilation;
 CONTENT_EXPORT extern const base::Feature kWebAssemblySimd;
 CONTENT_EXPORT extern const base::Feature kWebAssemblyThreads;
diff --git a/content/public/renderer/render_frame.h b/content/public/renderer/render_frame.h
index 7572da9..b0f946d1 100644
--- a/content/public/renderer/render_frame.h
+++ b/content/public/renderer/render_frame.h
@@ -16,7 +16,6 @@
 #include "ipc/ipc_listener.h"
 #include "ipc/ipc_sender.h"
 #include "ppapi/buildflags/buildflags.h"
-#include "services/network/public/mojom/url_loader_factory.mojom.h"
 #include "services/service_manager/public/cpp/binder_registry.h"
 #include "third_party/blink/public/common/loader/previews_state.h"
 #include "third_party/blink/public/mojom/devtools/console_message.mojom.h"
@@ -26,6 +25,8 @@
 #include "ui/accessibility/ax_mode.h"
 #include "ui/accessibility/ax_tree_update.h"
 
+class GURL;
+
 namespace blink {
 namespace scheduler {
 class WebAgentGroupScheduler;
diff --git a/content/public/test/browser_task_environment.cc b/content/public/test/browser_task_environment.cc
index d9def393..67e6fd8 100644
--- a/content/public/test/browser_task_environment.cc
+++ b/content/public/test/browser_task_environment.cc
@@ -18,7 +18,7 @@
 #include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "content/browser/after_startup_task_utils.h"
-#include "content/browser/browser_process_sub_thread.h"
+#include "content/browser/browser_process_io_thread.h"
 #include "content/browser/browser_thread_impl.h"
 #include "content/browser/scheduler/browser_io_thread_delegate.h"
 #include "content/browser/scheduler/browser_task_executor.h"
@@ -55,13 +55,13 @@
  private:
   explicit TestBrowserThread(
       BrowserThread::ID identifier,
-      std::unique_ptr<BrowserProcessSubThread> real_thread);
+      std::unique_ptr<BrowserProcessIOThread> real_thread);
 
   const BrowserThread::ID identifier_;
 
   // A real thread which represents |identifier_| when StartIOThread() is used
   // (null otherwise).
-  std::unique_ptr<BrowserProcessSubThread> real_thread_;
+  std::unique_ptr<BrowserProcessIOThread> real_thread_;
 
   // Binds |identifier_| to |thread_runner| when the public constructor is used
   // (null otherwise).
@@ -80,7 +80,7 @@
 
 TestBrowserThread::TestBrowserThread(
     BrowserThread::ID identifier,
-    std::unique_ptr<BrowserProcessSubThread> real_thread)
+    std::unique_ptr<BrowserProcessIOThread> real_thread)
     : identifier_(identifier), real_thread_(std::move(real_thread)) {}
 
 TestBrowserThread::TestBrowserThread(
diff --git a/content/renderer/pepper/pepper_browser_connection.h b/content/renderer/pepper/pepper_browser_connection.h
index 03c9bccc..cb80e06 100644
--- a/content/renderer/pepper/pepper_browser_connection.h
+++ b/content/renderer/pepper/pepper_browser_connection.h
@@ -12,7 +12,6 @@
 #include <vector>
 
 #include "base/callback.h"
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "content/common/pepper_plugin.mojom.h"
 #include "content/public/renderer/render_frame_observer.h"
diff --git a/content/renderer/pepper/pepper_hung_plugin_filter.h b/content/renderer/pepper/pepper_hung_plugin_filter.h
index 338882f..d5f3e92 100644
--- a/content/renderer/pepper/pepper_hung_plugin_filter.h
+++ b/content/renderer/pepper/pepper_hung_plugin_filter.h
@@ -5,7 +5,6 @@
 #ifndef CONTENT_RENDERER_PEPPER_PEPPER_HUNG_PLUGIN_FILTER_H_
 #define CONTENT_RENDERER_PEPPER_PEPPER_HUNG_PLUGIN_FILTER_H_
 
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/synchronization/lock.h"
diff --git a/content/renderer/render_process_impl.cc b/content/renderer/render_process_impl.cc
index 3f5a8dd..5532a4a 100644
--- a/content/renderer/render_process_impl.cc
+++ b/content/renderer/render_process_impl.cc
@@ -137,6 +137,18 @@
   SetV8FlagIfFeature(features::kWebAssemblyBaseline, "--liftoff");
   SetV8FlagIfNotFeature(features::kWebAssemblyBaseline, "--no-liftoff");
 
+  SetV8FlagIfFeature(features::kWebAssemblyCodeProtection,
+                     "--wasm-write-protect-code-memory");
+  SetV8FlagIfNotFeature(features::kWebAssemblyCodeProtection,
+                        "--no-wasm-write-protect-code-memory");
+
+#if defined(OS_LINUX) && defined(ARCH_CPU_X86_64)
+  SetV8FlagIfFeature(features::kWebAssemblyCodeProtectionPku,
+                     "--wasm-memory-protection-keys");
+  SetV8FlagIfNotFeature(features::kWebAssemblyCodeProtectionPku,
+                        "--no-wasm-memory-protection-keys");
+#endif  // defined(OS_LINUX) && defined(ARCH_CPU_X86_64)
+
   SetV8FlagIfFeature(features::kWebAssemblyLazyCompilation,
                      "--wasm-lazy-compilation");
   SetV8FlagIfNotFeature(features::kWebAssemblyLazyCompilation,
diff --git a/content/renderer/render_thread_impl.h b/content/renderer/render_thread_impl.h
index c07c45f..ff3ed59 100644
--- a/content/renderer/render_thread_impl.h
+++ b/content/renderer/render_thread_impl.h
@@ -28,7 +28,6 @@
 #include "base/time/time.h"
 #include "base/types/pass_key.h"
 #include "build/build_config.h"
-#include "cc/mojom/render_frame_metadata.mojom.h"
 #include "content/child/child_thread_impl.h"
 #include "content/common/agent_scheduling_group.mojom.h"
 #include "content/common/content_export.h"
@@ -51,7 +50,6 @@
 #include "mojo/public/cpp/bindings/remote.h"
 #include "net/base/network_change_notifier.h"
 #include "net/nqe/effective_connection_type.h"
-#include "services/network/public/mojom/url_loader_factory.mojom.h"
 #include "services/viz/public/mojom/compositing/compositing_mode_watcher.mojom.h"
 #include "third_party/blink/public/common/associated_interfaces/associated_interface_registry.h"
 #include "third_party/blink/public/common/user_agent/user_agent_metadata.h"
diff --git a/content/test/data/accessibility/regression/aria-hidden-tabindex-change-expected-blink.txt b/content/test/data/accessibility/regression/aria-hidden-tabindex-change-expected-blink.txt
new file mode 100644
index 0000000..40f69f0
--- /dev/null
+++ b/content/test/data/accessibility/regression/aria-hidden-tabindex-change-expected-blink.txt
@@ -0,0 +1,6 @@
+rootWebArea focusable name='done'
+++genericContainer ignored
+++++genericContainer ignored
+++++++genericContainer ignored invisible
+++++++++button focusable invisible name='Button'
+++++++++++staticText ignored invisible name='Button'
diff --git a/content/test/data/accessibility/regression/aria-hidden-tabindex-change.html b/content/test/data/accessibility/regression/aria-hidden-tabindex-change.html
new file mode 100644
index 0000000..31c2b39
--- /dev/null
+++ b/content/test/data/accessibility/regression/aria-hidden-tabindex-change.html
@@ -0,0 +1,19 @@
+<!--
+@BLINK-ALLOW:focus*
+@WAIT-FOR:done
+-->
+<html>
+<body>
+<div aria-hidden="true">
+  <div role="button">Button</div>
+</div>
+<script>
+document.addEventListener('DOMContentLoaded', () => {
+  setTimeout(() => {
+    document.querySelector('[role=button]').tabIndex = -1;
+    document.title = 'done';
+  }, 50);
+});
+</script>
+</body>
+</html>
diff --git a/content/test/data/direct_sockets/open.html.mock-http-headers b/content/test/data/direct_sockets/open.html.mock-http-headers
new file mode 100644
index 0000000..858d4a51
--- /dev/null
+++ b/content/test/data/direct_sockets/open.html.mock-http-headers
@@ -0,0 +1,4 @@
+HTTP/1.1 200 OK
+Content-Type: text/html
+Cross-Origin-Opener-Policy: same-origin
+Cross-Origin-Embedder-Policy: require-corp
diff --git a/content/test/data/direct_sockets/tcp.html.mock-http-headers b/content/test/data/direct_sockets/tcp.html.mock-http-headers
new file mode 100644
index 0000000..858d4a51
--- /dev/null
+++ b/content/test/data/direct_sockets/tcp.html.mock-http-headers
@@ -0,0 +1,4 @@
+HTTP/1.1 200 OK
+Content-Type: text/html
+Cross-Origin-Opener-Policy: same-origin
+Cross-Origin-Embedder-Policy: require-corp
diff --git a/courgette/memory_allocator.h b/courgette/memory_allocator.h
index bed0c31a..2a65b12 100644
--- a/courgette/memory_allocator.h
+++ b/courgette/memory_allocator.h
@@ -12,7 +12,6 @@
 
 #include "base/compiler_specific.h"
 #include "base/files/file.h"
-#include "base/files/file_path.h"
 #include "base/logging.h"
 #include "base/process/memory.h"
 
diff --git a/device/fido/cable/v2_authenticator.cc b/device/fido/cable/v2_authenticator.cc
index 295323b4..dca0ffc 100644
--- a/device/fido/cable/v2_authenticator.cc
+++ b/device/fido/cable/v2_authenticator.cc
@@ -364,12 +364,22 @@
 
         base::Optional<std::vector<uint8_t>> post_handshake_msg_bytes(
             EncodePaddedCBORMap(std::move(post_handshake_msg)));
-
-        if (!post_handshake_msg_bytes ||
-            !crypter_->Encrypt(&post_handshake_msg_bytes.value())) {
+        if (!post_handshake_msg_bytes) {
           FIDO_LOG(ERROR) << "failed to encode post-handshake message";
           return;
         }
+
+        // It should be the case that all post-handshake messages fall into
+        // a single padding bucket. It doesn't have to be the smallest one, but
+        // that's currently true. If altering this, consider whether
+        // kPostHandshakeMsgPaddingGranularity needs to be increased instead.
+        DCHECK_EQ(post_handshake_msg_bytes->size(),
+                  kPostHandshakeMsgPaddingGranularity);
+
+        if (!crypter_->Encrypt(&post_handshake_msg_bytes.value())) {
+          FIDO_LOG(ERROR) << "failed to encrypt post-handshake message";
+          return;
+        }
         websocket_client_->Write(*post_handshake_msg_bytes);
 
         state_ = State::kReady;
diff --git a/device/fido/cable/v2_constants.h b/device/fido/cable/v2_constants.h
index 8dda934..91717bc 100644
--- a/device/fido/cable/v2_constants.h
+++ b/device/fido/cable/v2_constants.h
@@ -45,6 +45,10 @@
 // communication. This specifies a Google service and the short domain seed is
 // necessary to fit within a BLE advert.
 constexpr uint16_t kTunnelServer = 0;
+// kPostHandshakeMsgPaddingGranularity is the granularity of the padding added
+// to the post-handshake message. This should be sufficiently large to pad away
+// all information about the contents of this message.
+constexpr size_t kPostHandshakeMsgPaddingGranularity = 512;
 
 }  // namespace cablev2
 }  // namespace device
diff --git a/device/fido/cable/v2_handshake.cc b/device/fido/cable/v2_handshake.cc
index 0cd7cba..93ba500 100644
--- a/device/fido/cable/v2_handshake.cc
+++ b/device/fido/cable/v2_handshake.cc
@@ -9,6 +9,7 @@
 
 #include "base/base64url.h"
 #include "base/bits.h"
+#include "base/numerics/safe_conversions.h"
 #include "base/numerics/safe_math.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_piece.h"
@@ -17,6 +18,7 @@
 #include "components/cbor/writer.h"
 #include "components/device_event_log/device_event_log.h"
 #include "crypto/aead.h"
+#include "device/fido/cable/v2_constants.h"
 #include "device/fido/fido_constants.h"
 #include "device/fido/fido_parsing_utils.h"
 #include "third_party/boringssl/src/include/openssl/aes.h"
@@ -435,7 +437,13 @@
 
 base::Optional<std::vector<uint8_t>> EncodePaddedCBORMap(
     cbor::Value::MapValue map) {
-  // TODO: this should pad to 1K, not 256 bytes.
+  // The number of padding bytes is a uint16_t, so the granularity cannot be
+  // larger than that.
+  static_assert(kPostHandshakeMsgPaddingGranularity > 0, "");
+  static_assert(kPostHandshakeMsgPaddingGranularity - 1 <=
+                    std::numeric_limits<uint16_t>::max(),
+                "");
+
   base::Optional<std::vector<uint8_t>> cbor_bytes =
       cbor::Writer::Write(cbor::Value(std::move(map)));
   if (!cbor_bytes) {
@@ -443,35 +451,44 @@
   }
 
   base::CheckedNumeric<size_t> padded_size_checked = cbor_bytes->size();
-  padded_size_checked += 1;  // padding-length byte
-  padded_size_checked = (padded_size_checked + 255) & ~255;
+  padded_size_checked += sizeof(uint16_t);  // padding-length bytes
+  padded_size_checked =
+      (padded_size_checked + kPostHandshakeMsgPaddingGranularity - 1) &
+      ~(kPostHandshakeMsgPaddingGranularity - 1);
   if (!padded_size_checked.IsValid()) {
     return base::nullopt;
   }
 
   const size_t padded_size = padded_size_checked.ValueOrDie();
-  DCHECK_GT(padded_size, cbor_bytes->size());
-  const size_t extra_padding = padded_size - cbor_bytes->size();
+  DCHECK_GE(padded_size, cbor_bytes->size() + sizeof(uint16_t));
+  const size_t extra_bytes = padded_size - cbor_bytes->size();
+  const size_t num_padding_bytes =
+      extra_bytes - sizeof(uint16_t) /* length of padding length */;
 
   cbor_bytes->resize(padded_size);
-  DCHECK_LE(extra_padding, 256u);
-  cbor_bytes->at(padded_size - 1) = static_cast<uint8_t>(extra_padding - 1);
+  const uint16_t num_padding_bytes16 =
+      base::checked_cast<uint16_t>(num_padding_bytes);
+  memcpy(&cbor_bytes.value()[padded_size - sizeof(num_padding_bytes16)],
+         &num_padding_bytes16, sizeof(num_padding_bytes16));
 
   return *cbor_bytes;
 }
 
 base::Optional<cbor::Value> DecodePaddedCBORMap(
     base::span<const uint8_t> input) {
-  if (input.empty()) {
+  if (input.size() < sizeof(uint16_t)) {
     return base::nullopt;
   }
 
-  const size_t padding_length = input.back();
-  if (padding_length + 1 > input.size()) {
+  uint16_t padding_length16;
+  memcpy(&padding_length16, &input[input.size() - sizeof(padding_length16)],
+         sizeof(padding_length16));
+  const size_t padding_length = padding_length16;
+  if (padding_length + sizeof(uint16_t) > input.size()) {
     FIDO_LOG(DEBUG) << "Invalid padding in caBLE handshake message";
     return base::nullopt;
   }
-  input = input.subspan(0, input.size() - padding_length - 1);
+  input = input.subspan(0, input.size() - padding_length - sizeof(uint16_t));
 
   base::Optional<cbor::Value> payload = cbor::Reader::Read(input);
   if (!payload || !payload->is_map()) {
diff --git a/device/fido/cable/v2_handshake.h b/device/fido/cable/v2_handshake.h
index c4992d816..809435a 100644
--- a/device/fido/cable/v2_handshake.h
+++ b/device/fido/cable/v2_handshake.h
@@ -160,11 +160,12 @@
 COMPONENT_EXPORT(DEVICE_FIDO)
 bssl::UniquePtr<EC_KEY> IdentityKey(base::span<const uint8_t, 32> root_secret);
 
-// EncodePaddedCBORMap encodes the given map and pads it to 256 bytes in such a
-// way that |DecodePaddedCBORMap| can decode it. The padding is done on the
-// assumption that the returned bytes will be encrypted and the encoded size of
-// the map should be hidden. The function can fail if the CBOR encoding fails
-// or, somehow, the size overflows.
+// EncodePaddedCBORMap encodes the given map and pads it to
+// |kPostHandshakeMsgPaddingGranularity| bytes in such a way that
+// |DecodePaddedCBORMap| can decode it. The padding is done on the assumption
+// that the returned bytes will be encrypted and the encoded size of the map
+// should be hidden. The function can fail if the CBOR encoding fails or,
+// somehow, the size overflows.
 COMPONENT_EXPORT(DEVICE_FIDO)
 base::Optional<std::vector<uint8_t>> EncodePaddedCBORMap(
     cbor::Value::MapValue map);
diff --git a/device/fido/cable/v2_handshake_unittest.cc b/device/fido/cable/v2_handshake_unittest.cc
index ebfb152b..abe2b72 100644
--- a/device/fido/cable/v2_handshake_unittest.cc
+++ b/device/fido/cable/v2_handshake_unittest.cc
@@ -75,21 +75,22 @@
 }
 
 TEST(CableV2Encoding, PaddedCBOR) {
-  cbor::Value::MapValue map;
+  cbor::Value::MapValue map1;
   base::Optional<std::vector<uint8_t>> encoded =
-      EncodePaddedCBORMap(std::move(map));
+      EncodePaddedCBORMap(std::move(map1));
   ASSERT_TRUE(encoded);
-  EXPECT_EQ(256u, encoded->size());
+  EXPECT_EQ(kPostHandshakeMsgPaddingGranularity, encoded->size());
 
   base::Optional<cbor::Value> decoded = DecodePaddedCBORMap(*encoded);
   ASSERT_TRUE(decoded);
   EXPECT_EQ(0u, decoded->GetMap().size());
 
-  uint8_t blob[256] = {0};
-  map.emplace(1, base::span<const uint8_t>(blob, sizeof(blob)));
-  encoded = EncodePaddedCBORMap(std::move(map));
+  cbor::Value::MapValue map2;
+  uint8_t blob[kPostHandshakeMsgPaddingGranularity] = {0};
+  map2.emplace(1, base::span<const uint8_t>(blob, sizeof(blob)));
+  encoded = EncodePaddedCBORMap(std::move(map2));
   ASSERT_TRUE(encoded);
-  EXPECT_EQ(512u, encoded->size());
+  EXPECT_EQ(kPostHandshakeMsgPaddingGranularity * 2, encoded->size());
 
   decoded = DecodePaddedCBORMap(*encoded);
   ASSERT_TRUE(decoded);
diff --git a/docs/mojo_ipc_conversion.md b/docs/mojo_ipc_conversion.md
index 173a4a15..f98a392 100644
--- a/docs/mojo_ipc_conversion.md
+++ b/docs/mojo_ipc_conversion.md
@@ -273,7 +273,7 @@
 convert a message to a Mojo interface method but you don't want to necessarily
 convert every structure passed by the message. In this case, you can leverage
 Mojo's
-[type-mapping](https://chromium.googlesource.com/chromium/src/+/master/mojo/public/cpp/bindings/README.md#Type-Mapping)
+[type-mapping](https://chromium.googlesource.com/chromium/src/+/main/mojo/public/cpp/bindings/README.md#Type-Mapping)
 system to repurpose existing `IPC::ParamTraits`.
 
 *** aside
diff --git a/docs/security/ipc-reviews.md b/docs/security/ipc-reviews.md
index 33240fb6..9683714 100644
--- a/docs/security/ipc-reviews.md
+++ b/docs/security/ipc-reviews.md
@@ -115,4 +115,4 @@
 of the overall system, making it much easier to evaluate individual changes.
 
 [chrome-security-review]: https://www.chromium.org/Home/chromium-security/security-reviews
-[mojo-best-practices]: https://chromium.googlesource.com/chromium/src/+/master/docs/security/mojo.md
+[mojo-best-practices]: https://chromium.googlesource.com/chromium/src/+/main/docs/security/mojo.md
diff --git a/docs/security/mojo.md b/docs/security/mojo.md
index 2aededfd..c32be77 100644
--- a/docs/security/mojo.md
+++ b/docs/security/mojo.md
@@ -881,5 +881,5 @@
 
 [security-tips-for-ipc]: https://www.chromium.org/Home/chromium-security/education/security-tips-for-ipc
 [NfcTypeConverter.java]: https://chromium.googlesource.com/chromium/src/+/e97442ee6e8c4cf6bcf7f5623c6fb2cc8cce92ac/services/device/nfc/android/java/src/org/chromium/device/nfc/NfcTypeConverter.java
-[mojo-doc-process-crashes]: https://chromium.googlesource.com/chromium/src/+/master/mojo/public/cpp/bindings#Best-practices-for-dealing-with-process-crashes-and-callbacks
+[mojo-doc-process-crashes]: https://chromium.googlesource.com/chromium/src/+/main/mojo/public/cpp/bindings#Best-practices-for-dealing-with-process-crashes-and-callbacks
 [serialize-struct-tm-safely]: https://chromium-review.googlesource.com/c/chromium/src/+/679441
diff --git a/docs/security/rule-of-2.md b/docs/security/rule-of-2.md
index df449d2..a048af0 100644
--- a/docs/security/rule-of-2.md
+++ b/docs/security/rule-of-2.md
@@ -262,7 +262,7 @@
 fundamental for passing data between processes using IPC, tend to have simpler
 grammar or structure, and/or have been audited or fuzzed heavily.
 
-* `GURL`
+* `GURL` and `url::Origin`
 * `SkBitmap`
 * `SkPixmap`
 * Protocol buffers (see above; this is not a preferred option and should be
diff --git a/extensions/browser/api/declarative_webrequest/webrequest_condition_attribute.cc b/extensions/browser/api/declarative_webrequest/webrequest_condition_attribute.cc
index deded07c..a781096 100644
--- a/extensions/browser/api/declarative_webrequest/webrequest_condition_attribute.cc
+++ b/extensions/browser/api/declarative_webrequest/webrequest_condition_attribute.cc
@@ -219,15 +219,14 @@
       bool* bad_message) {
   DCHECK(name == keys::kContentTypeKey || name == keys::kExcludeContentTypeKey);
 
-  const base::ListValue* value_as_list = nullptr;
-  if (!value->GetAsList(&value_as_list)) {
+  if (!value->is_list()) {
     *error = ErrorUtils::FormatErrorMessage(kInvalidValue, name);
     return nullptr;
   }
   std::vector<std::string> content_types;
-  for (auto it = value_as_list->begin(); it != value_as_list->end(); ++it) {
+  for (const auto& entry : value->GetList()) {
     std::string content_type;
-    if (!it->GetAsString(&content_type)) {
+    if (!entry.GetAsString(&content_type)) {
       *error = ErrorUtils::FormatErrorMessage(kInvalidValue, name);
       return nullptr;
     }
@@ -371,9 +370,9 @@
 std::unique_ptr<const HeaderMatcher> HeaderMatcher::Create(
     const base::ListValue* tests) {
   std::vector<std::unique_ptr<const HeaderMatchTest>> header_tests;
-  for (auto it = tests->begin(); it != tests->end(); ++it) {
+  for (const auto& entry : tests->GetList()) {
     const base::DictionaryValue* tests = nullptr;
-    if (!it->GetAsDictionary(&tests))
+    if (!entry.GetAsDictionary(&tests))
       return nullptr;
 
     std::unique_ptr<const HeaderMatchTest> header_test(
@@ -497,7 +496,7 @@
       case base::Value::Type::LIST: {
         const base::ListValue* list = nullptr;
         CHECK(content->GetAsList(&list));
-        for (const auto& it : *list) {
+        for (const auto& it : list->GetList()) {
           tests->push_back(StringMatchTest::Create(it, match_type, !is_name));
         }
         break;
@@ -723,14 +722,13 @@
 // sets corresponding bits (see RequestStage) in |out_stages|. Returns true on
 // success, false otherwise.
 bool ParseListOfStages(const base::Value& value, int* out_stages) {
-  const base::ListValue* list = nullptr;
-  if (!value.GetAsList(&list))
+  if (!value.is_list())
     return false;
 
   int stages = 0;
   std::string stage_name;
-  for (auto it = list->begin(); it != list->end(); ++it) {
-    if (!(it->GetAsString(&stage_name)))
+  for (const auto& entry : value.GetList()) {
+    if (!entry.GetAsString(&stage_name))
       return false;
     if (stage_name == keys::kOnBeforeRequestEnum) {
       stages |= ON_BEFORE_REQUEST;
diff --git a/extensions/browser/api/device_permissions_manager.cc b/extensions/browser/api/device_permissions_manager.cc
index c1ace5a..29e3e2e 100644
--- a/extensions/browser/api/device_permissions_manager.cc
+++ b/extensions/browser/api/device_permissions_manager.cc
@@ -98,8 +98,8 @@
 
   std::unique_ptr<base::Value> device_entry(entry->ToValue());
   // TODO(crbug.com/1187106): Use base::Contains once |devices| not a ListValue.
-  DCHECK(std::find(devices->begin(), devices->end(), *device_entry) ==
-         devices->end());
+  DCHECK(std::find(devices->GetList().begin(), devices->GetList().end(),
+                   *device_entry) == devices->GetList().end());
   devices->Append(std::move(device_entry));
 }
 
@@ -250,7 +250,7 @@
     return result;
   }
 
-  for (const auto& entry : *devices) {
+  for (const auto& entry : devices->GetList()) {
     const base::DictionaryValue* entry_dict;
     if (entry.GetAsDictionary(&entry_dict)) {
       scoped_refptr<DevicePermissionEntry> device_entry =
diff --git a/extensions/browser/content_hash_fetcher.h b/extensions/browser/content_hash_fetcher.h
index e17f429..082f69c1 100644
--- a/extensions/browser/content_hash_fetcher.h
+++ b/extensions/browser/content_hash_fetcher.h
@@ -11,7 +11,6 @@
 #include <utility>
 
 #include "base/callback.h"
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "extensions/browser/content_verifier/content_hash.h"
diff --git a/extensions/browser/content_verifier_io_data.h b/extensions/browser/content_verifier_io_data.h
index c24b4fb..3d51b36 100644
--- a/extensions/browser/content_verifier_io_data.h
+++ b/extensions/browser/content_verifier_io_data.h
@@ -10,7 +10,6 @@
 #include <set>
 #include <string>
 
-#include "base/files/file_path.h"
 #include "base/memory/ref_counted.h"
 #include "base/version.h"
 #include "extensions/browser/content_verifier/content_verifier_utils.h"
diff --git a/extensions/browser/extension_prefs.cc b/extensions/browser/extension_prefs.cc
index 4ed728f..b905871 100644
--- a/extensions/browser/extension_prefs.cc
+++ b/extensions/browser/extension_prefs.cc
@@ -2366,9 +2366,8 @@
   std::insert_iterator<ExtensionIdContainer> insert_iterator(
       *id_container_out, id_container_out->end());
   std::string extension_id;
-  for (auto value_it = user_pref_as_list->begin();
-       value_it != user_pref_as_list->end(); ++value_it) {
-    if (!value_it->GetAsString(&extension_id)) {
+  for (const auto& entry : user_pref_as_list->GetList()) {
+    if (!entry.GetAsString(&extension_id)) {
       NOTREACHED();
       continue;
     }
diff --git a/extensions/browser/state_store.h b/extensions/browser/state_store.h
index a1ab35a..102156f 100644
--- a/extensions/browser/state_store.h
+++ b/extensions/browser/state_store.h
@@ -9,7 +9,6 @@
 #include <string>
 
 #include "base/callback.h"
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "base/observer_list.h"
diff --git a/extensions/common/constants.cc b/extensions/common/constants.cc
index 2fcf381..72c8744 100644
--- a/extensions/common/constants.cc
+++ b/extensions/common/constants.cc
@@ -140,6 +140,7 @@
 const char kBeFunkyAppId[] = "fjoomcalbeohjbnlcneddljemclcekeg";
 const char kClipchampAppId[] = "pfepfhbcedkbjdkanpimmmdjfgoddhkg";
 const char kGeForceNowAppId[] = "egmafekfmcnknbdlbfbhafbllplmjlhn";
+const char kZoomAppId[] = "jldpdkiafafcejhceeincjmlkmibemgj";
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
 // TODO(michaelpg): Deprecate old app IDs before adding new ones to avoid bloat.
diff --git a/extensions/common/constants.h b/extensions/common/constants.h
index 1db23d9..c9a029e4 100644
--- a/extensions/common/constants.h
+++ b/extensions/common/constants.h
@@ -255,6 +255,9 @@
 // The extension id of the GeForce NOW PWA.
 extern const char kGeForceNowAppId[];
 
+// The extension id of the Zoom PWA.
+extern const char kZoomAppId[];
+
 #if BUILDFLAG(IS_CHROMEOS_ASH)
 // The extension id of the default Demo Mode Highlights app.
 extern const char kHighlightsAppId[];
diff --git a/extensions/common/extension_set.h b/extensions/common/extension_set.h
index 4c9b2f9a..afe1d802 100644
--- a/extensions/common/extension_set.h
+++ b/extensions/common/extension_set.h
@@ -10,7 +10,6 @@
 #include <string>
 #include <utility>
 
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "extensions/common/extension.h"
diff --git a/fuchsia/base/config_reader.h b/fuchsia/base/config_reader.h
index d76449a..dc32d81 100644
--- a/fuchsia/base/config_reader.h
+++ b/fuchsia/base/config_reader.h
@@ -5,7 +5,6 @@
 #ifndef FUCHSIA_BASE_CONFIG_READER_H_
 #define FUCHSIA_BASE_CONFIG_READER_H_
 
-#include "base/files/file_path.h"
 #include "base/values.h"
 
 namespace cr_fuchsia {
diff --git a/fuchsia/engine/browser/content_directory_loader_factory.h b/fuchsia/engine/browser/content_directory_loader_factory.h
index 8fe135f..a110df9e 100644
--- a/fuchsia/engine/browser/content_directory_loader_factory.h
+++ b/fuchsia/engine/browser/content_directory_loader_factory.h
@@ -12,7 +12,6 @@
 #include <string>
 #include <vector>
 
-#include "base/files/file_path.h"
 #include "fuchsia/engine/web_engine_export.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
diff --git a/fuchsia/engine/browser/frame_host_impl_browsertest.cc b/fuchsia/engine/browser/frame_host_impl_browsertest.cc
index b65ba04..a1f6e03 100644
--- a/fuchsia/engine/browser/frame_host_impl_browsertest.cc
+++ b/fuchsia/engine/browser/frame_host_impl_browsertest.cc
@@ -9,7 +9,6 @@
 #include "fuchsia/engine/browser/context_impl.h"
 #include "fuchsia/engine/test/web_engine_browser_test.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "url/url_constants.h"
 
 namespace {
 
@@ -23,21 +22,25 @@
 IN_PROC_BROWSER_TEST_F(FrameHostImplBrowserTest, IsolatedFromWebContext) {
   ASSERT_TRUE(embedded_test_server()->Start());
 
-  // Create a new Frame via the fuchsia.web.Context.
-  cr_fuchsia::TestNavigationListener navigation_listener1;
-  fuchsia::web::FramePtr frame1 = CreateFrame(&navigation_listener1);
+  // Create a new Frame via the fuchsia.web.Context, and spin the loop to
+  // allow the request to be processed.
+  fuchsia::web::FramePtr context_frame;
+  context()->CreateFrameWithParams({}, context_frame.NewRequest());
+  base::RunLoop().RunUntilIdle();
 
   // Verify that the FrameImpl can be found via the |context_impl()| to which
   // the fuchsia.web.Context is connected.
-  EXPECT_TRUE(context_impl()->GetFrameImplForTest(&frame1) != nullptr);
+  EXPECT_TRUE(context_impl()->GetFrameImplForTest(&context_frame) != nullptr);
 
   // Create a new Frame via a FrameHost instance.
   fuchsia::web::FrameHostPtr frame_host;
   published_services().Connect(frame_host.NewRequest());
-  fuchsia::web::FramePtr frame2;
-  frame_host->CreateFrameWithParams({}, frame2.NewRequest());
+  fuchsia::web::FramePtr frame_host_frame;
+  frame_host->CreateFrameWithParams({}, frame_host_frame.NewRequest());
+  base::RunLoop().RunUntilIdle();
 
   // Verify that the new Frame cannot be resolved to a FrameImpl under the
   // |context_impl()| to which the fuchsia.web.Context is connected.
-  EXPECT_TRUE(context_impl()->GetFrameImplForTest(&frame2) == nullptr);
+  EXPECT_TRUE(context_impl()->GetFrameImplForTest(&frame_host_frame) ==
+              nullptr);
 }
diff --git a/google_apis/gcm/engine/mcs_client.h b/google_apis/gcm/engine/mcs_client.h
index 62be1f7..b069b95 100644
--- a/google_apis/gcm/engine/mcs_client.h
+++ b/google_apis/gcm/engine/mcs_client.h
@@ -13,7 +13,6 @@
 #include <vector>
 
 #include "base/containers/circular_deque.h"
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "google_apis/gcm/base/gcm_export.h"
diff --git a/headless/lib/browser/headless_browser_main_parts.h b/headless/lib/browser/headless_browser_main_parts.h
index 743232d..496572b 100644
--- a/headless/lib/browser/headless_browser_main_parts.h
+++ b/headless/lib/browser/headless_browser_main_parts.h
@@ -7,7 +7,6 @@
 
 #include <memory>
 
-#include "base/files/file_path.h"
 #include "build/build_config.h"
 #include "content/public/browser/browser_main_parts.h"
 #include "content/public/common/main_function_params.h"
diff --git a/infra/config/generated/cr-buildbucket.cfg b/infra/config/generated/cr-buildbucket.cfg
index ff4f539..dabc37b 100644
--- a/infra/config/generated/cr-buildbucket.cfg
+++ b/infra/config/generated/cr-buildbucket.cfg
@@ -18443,7 +18443,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.ci"
       dimensions: "ssd:0"
       exe {
@@ -19683,7 +19683,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.ci"
       dimensions: "ssd:0"
       exe {
@@ -20672,7 +20672,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.ci"
       dimensions: "ssd:0"
       exe {
@@ -20734,7 +20734,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.ci"
       dimensions: "ssd:0"
       exe {
@@ -20796,7 +20796,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.ci"
       dimensions: "ssd:0"
       exe {
@@ -21291,7 +21291,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.ci"
       dimensions: "ssd:0"
       exe {
@@ -21415,7 +21415,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.ci"
       dimensions: "ssd:0"
       exe {
@@ -21477,7 +21477,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.ci"
       dimensions: "ssd:0"
       exe {
@@ -21539,7 +21539,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.ci"
       dimensions: "ssd:0"
       exe {
@@ -21601,7 +21601,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.ci"
       dimensions: "ssd:0"
       exe {
@@ -21663,7 +21663,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.ci"
       dimensions: "ssd:0"
       exe {
@@ -21725,7 +21725,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.ci"
       dimensions: "ssd:0"
       exe {
@@ -21787,7 +21787,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.ci"
       dimensions: "ssd:0"
       exe {
@@ -22035,7 +22035,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.ci"
       dimensions: "ssd:0"
       exe {
@@ -35478,7 +35478,7 @@
       dimensions: "builder:android-marshmallow-x86-rel-rts"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-16.04|Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       exe {
         cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"
@@ -38197,7 +38197,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -38326,7 +38326,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -38391,7 +38391,7 @@
       dimensions: "builder:cast_shell_linux"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04|Ubuntu-18.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       exe {
         cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"
@@ -38779,7 +38779,7 @@
       dimensions: "builder:chromeos-amd64-generic-rel-rts"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-18.04"
+      dimensions: "os:Ubuntu-16.04|Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       exe {
         cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"
@@ -39678,7 +39678,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -39743,7 +39743,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -39808,7 +39808,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -39873,7 +39873,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -39938,7 +39938,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -40003,7 +40003,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -40068,7 +40068,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -40198,7 +40198,7 @@
       dimensions: "builder:fuchsia-x64-cast"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04|Ubuntu-18.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       exe {
         cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"
@@ -40262,7 +40262,7 @@
       dimensions: "builder:fuchsia_arm64"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04|Ubuntu-18.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       exe {
         cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"
@@ -40326,7 +40326,7 @@
       dimensions: "builder:fuchsia_x64"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04|Ubuntu-18.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       exe {
         cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"
@@ -40390,7 +40390,7 @@
       dimensions: "builder:fuchsia_x64_rts"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-16.04|Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       exe {
         cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"
@@ -45265,7 +45265,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -45330,7 +45330,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -45395,7 +45395,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -45652,7 +45652,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -45717,7 +45717,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -45782,7 +45782,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -45912,7 +45912,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -45977,7 +45977,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -46172,7 +46172,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -46237,7 +46237,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -46755,7 +46755,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -46883,7 +46883,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -46948,7 +46948,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -47077,7 +47077,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -47142,7 +47142,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -47207,7 +47207,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -47272,7 +47272,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -47402,7 +47402,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -47467,7 +47467,7 @@
       dimensions: "builder:linux-libfuzzer-asan-rel"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04|Ubuntu-18.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       exe {
         cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"
@@ -47531,7 +47531,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -47596,7 +47596,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -47726,7 +47726,7 @@
       dimensions: "builder:linux-ozone-rel"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04|Ubuntu-18.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       exe {
         cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"
@@ -47790,7 +47790,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -47855,7 +47855,7 @@
       dimensions: "builder:linux-rel"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04|Ubuntu-18.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       exe {
         cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"
@@ -47919,7 +47919,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -47984,7 +47984,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -48049,7 +48049,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -48114,7 +48114,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -48179,7 +48179,7 @@
       dimensions: "builder:linux-rel-rts"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-16.04|Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       exe {
         cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"
@@ -48556,7 +48556,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -48621,7 +48621,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -48686,7 +48686,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -48751,7 +48751,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -48816,7 +48816,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -49075,7 +49075,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -49140,7 +49140,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -49270,7 +49270,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:32"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -49335,7 +49335,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -49400,7 +49400,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -49465,7 +49465,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -49530,7 +49530,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -49595,7 +49595,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -49660,7 +49660,7 @@
       dimensions: "builder:linux_chromium_compile_dbg_ng"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04|Ubuntu-18.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       exe {
         cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"
@@ -49728,7 +49728,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -49793,7 +49793,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -49862,7 +49862,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -49927,7 +49927,7 @@
       dimensions: "builder:linux_chromium_tsan_rel_ng"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04|Ubuntu-18.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       exe {
         cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"
@@ -50055,7 +50055,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -50120,7 +50120,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -50185,7 +50185,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -50250,7 +50250,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -50315,7 +50315,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -50509,7 +50509,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -52671,7 +52671,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
@@ -52736,7 +52736,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:8"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-16.04"
+      dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
       dimensions: "ssd:0"
       exe {
diff --git a/infra/config/lib/try.star b/infra/config/lib/try.star
index f9187ed..f5263f8 100644
--- a/infra/config/lib/try.star
+++ b/infra/config/lib/try.star
@@ -295,6 +295,7 @@
     )
 
 def chromium_linux_builder(*, name, goma_backend = builders.goma.backend.RBE_PROD, **kwargs):
+    kwargs.setdefault("os", builders.os.LINUX_BIONIC_REMOVE)
     return try_builder(
         name = name,
         builder_group = "tryserver.chromium.linux",
diff --git a/infra/config/subprojects/chromium/ci.star b/infra/config/subprojects/chromium/ci.star
index 3797003..854aa51 100644
--- a/infra/config/subprojects/chromium/ci.star
+++ b/infra/config/subprojects/chromium/ci.star
@@ -715,6 +715,7 @@
         category = "builder|other",
         short_name = "size",
     ),
+    os = os.LINUX_BIONIC_REMOVE,
 )
 
 ci.android_builder(
@@ -870,6 +871,7 @@
     ),
     main_console_view = main_console_if_on_branch(),
     tree_closing = True,
+    os = os.LINUX_BIONIC_REMOVE,
 )
 
 ci.android_builder(
@@ -881,6 +883,7 @@
     ),
     cq_mirrors_console_view = "mirrors",
     main_console_view = main_console_if_on_branch(),
+    os = os.LINUX_BIONIC_REMOVE,
 )
 
 ci.android_builder(
@@ -889,6 +892,7 @@
         category = "builder_tester|x86",
         short_name = "M_non-cq",
     ),
+    os = os.LINUX_BIONIC_REMOVE,
 )
 
 ci.android_builder(
@@ -945,6 +949,7 @@
     ),
     triggered_by = ["android-weblayer-with-aosp-webview-x86-rel"],
     notifies = ["weblayer-sheriff"],
+    os = os.LINUX_BIONIC_REMOVE,
 )
 
 ci.android_builder(
@@ -955,6 +960,7 @@
     ),
     triggered_by = ["android-weblayer-x86-rel"],
     notifies = ["weblayer-sheriff"],
+    os = os.LINUX_BIONIC_REMOVE,
 )
 
 ci.android_builder(
@@ -965,6 +971,7 @@
     ),
     triggered_by = ["android-weblayer-x86-rel"],
     notifies = ["weblayer-sheriff"],
+    os = os.LINUX_BIONIC_REMOVE,
 )
 
 ci.android_builder(
@@ -1031,6 +1038,7 @@
         category = "builder_tester|web-platform",
         short_name = "P",
     ),
+    os = os.LINUX_BIONIC_REMOVE,
 )
 
 ci.android_fyi_builder(
@@ -1039,6 +1047,7 @@
         category = "builder_tester|weblayer",
         short_name = "P",
     ),
+    os = os.LINUX_BIONIC_REMOVE,
 )
 
 ci.android_fyi_builder(
@@ -1047,6 +1056,7 @@
         category = "builder_tester|weblayer",
         short_name = "P",
     ),
+    os = os.LINUX_BIONIC_REMOVE,
 )
 
 ci.android_fyi_builder(
@@ -1055,6 +1065,7 @@
         category = "builder_tester|webview",
         short_name = "P",
     ),
+    os = os.LINUX_BIONIC_REMOVE,
 )
 
 ci.android_builder(
@@ -1063,6 +1074,7 @@
         category = "builder_tester|x86",
         short_name = "P",
     ),
+    os = os.LINUX_BIONIC_REMOVE,
 )
 
 ci.android_fyi_builder(
@@ -1073,6 +1085,7 @@
     ),
     triggered_by = ["android-weblayer-with-aosp-webview-x86-fyi-rel"],
     notifies = ["weblayer-sheriff"],
+    os = os.LINUX_BIONIC_REMOVE,
 )
 
 ci.android_fyi_builder(
@@ -1108,6 +1121,7 @@
         category = "emulator|11|x86",
         short_name = "rel",
     ),
+    os = os.LINUX_BIONIC_REMOVE,
 )
 
 ci.angle_linux_builder(
diff --git a/infra/config/subprojects/chromium/try.star b/infra/config/subprojects/chromium/try.star
index 992fb7df..6460850 100644
--- a/infra/config/subprojects/chromium/try.star
+++ b/infra/config/subprojects/chromium/try.star
@@ -1007,8 +1007,6 @@
     builderless = not settings.is_main,
     main_list_view = "try",
     tryjob = try_.job(),
-    # TODO(crbug/1202745)
-    os = os.LINUX_XENIAL_OR_BIONIC_REMOVE,
 )
 
 try_.chromium_linux_builder(
@@ -1020,7 +1018,6 @@
             ".+/[+]/chromecast/.+",
         ],
     ),
-    os = os.LINUX_BIONIC,
 )
 
 try_.chromium_linux_builder(
@@ -1113,8 +1110,6 @@
     builderless = not settings.is_main,
     main_list_view = "try",
     tryjob = try_.job(),
-    # TODO(crbug/1202745)
-    os = os.LINUX_XENIAL_OR_BIONIC_REMOVE,
 )
 
 try_.chromium_linux_builder(
@@ -1123,8 +1118,6 @@
     builderless = not settings.is_main,
     main_list_view = "try",
     tryjob = try_.job(),
-    # TODO(crbug/1202745)
-    os = os.LINUX_XENIAL_OR_BIONIC_REMOVE,
 )
 
 try_.chromium_linux_builder(
@@ -1133,8 +1126,6 @@
     builderless = not settings.is_main,
     main_list_view = "try",
     tryjob = try_.job(),
-    # TODO(crbug/1202745)
-    os = os.LINUX_XENIAL_OR_BIONIC_REMOVE,
 )
 
 try_.chromium_linux_builder(
@@ -1202,7 +1193,6 @@
     name = "linux-clang-tidy-dbg",
     executable = "recipe:tricium_clang_tidy_wrapper",
     goma_jobs = goma.jobs.J150,
-    os = os.LINUX_BIONIC_REMOVE,
 )
 
 try_.chromium_linux_builder(
@@ -1255,8 +1245,6 @@
     executable = "recipe:chromium_libfuzzer_trybot",
     main_list_view = "try",
     tryjob = try_.job(),
-    # TODO(crbug/1202745)
-    os = os.LINUX_XENIAL_OR_BIONIC_REMOVE,
 )
 
 try_.chromium_linux_builder(
@@ -1265,8 +1253,6 @@
     builderless = not settings.is_main,
     main_list_view = "try",
     tryjob = try_.job(),
-    # TODO(crbug/1202745)
-    os = os.LINUX_XENIAL_OR_BIONIC_REMOVE,
 )
 
 try_.chromium_linux_builder(
@@ -1291,7 +1277,6 @@
     main_list_view = "try",
     tryjob = try_.job(),
     use_clang_coverage = True,
-    os = os.LINUX_XENIAL_OR_BIONIC_REMOVE,
 )
 
 # Experimental builder to check dual coverage on linux platform.
@@ -1386,7 +1371,6 @@
     ssd = True,
     main_list_view = "try",
     tryjob = try_.job(),
-    os = os.LINUX_BIONIC,
 )
 
 try_.chromium_linux_builder(
@@ -1431,8 +1415,6 @@
     goma_jobs = goma.jobs.J150,
     main_list_view = "try",
     tryjob = try_.job(),
-    # TODO(crbug/1202745)
-    os = os.LINUX_XENIAL_OR_BIONIC_REMOVE,
 )
 
 try_.chromium_linux_builder(
@@ -1477,7 +1459,6 @@
     builderless = not settings.is_main,
     goma_jobs = goma.jobs.J150,
     main_list_view = "try",
-    os = os.LINUX_XENIAL_OR_BIONIC_REMOVE,
     tryjob = try_.job(),
 )
 
@@ -1558,13 +1539,11 @@
 try_.chromium_linux_builder(
     name = "tricium-oilpan-analysis",
     executable = "recipe:tricium_oilpan",
-    os = os.LINUX_BIONIC_REMOVE,
 )
 
 try_.chromium_linux_builder(
     name = "tricium-simple",
     executable = "recipe:tricium_simple",
-    os = os.LINUX_BIONIC_REMOVE,
 )
 
 try_.chromium_mac_builder(
@@ -2068,6 +2047,7 @@
     tryjob = try_.job(
         experiment_percentage = 5,
     ),
+    os = os.LINUX_XENIAL_OR_BIONIC_REMOVE,
 )
 
 try_.chromium_mac_builder(
@@ -2098,6 +2078,7 @@
     tryjob = try_.job(
         experiment_percentage = 5,
     ),
+    os = os.LINUX_XENIAL_OR_BIONIC_REMOVE,
 )
 
 try_.chromium_linux_builder(
@@ -2106,6 +2087,7 @@
     tryjob = try_.job(
         experiment_percentage = 5,
     ),
+    os = os.LINUX_XENIAL_OR_BIONIC_REMOVE,
 )
 
 try_.chromium_chromiumos_builder(
@@ -2114,6 +2096,7 @@
     tryjob = try_.job(
         experiment_percentage = 5,
     ),
+    os = os.LINUX_XENIAL_OR_BIONIC_REMOVE,
 )
 
 try_.chromium_mac_ios_builder(
diff --git a/ios/build/bots/scripts/PRESUBMIT.py b/ios/build/bots/scripts/PRESUBMIT.py
index be4098e..b47c125 100644
--- a/ios/build/bots/scripts/PRESUBMIT.py
+++ b/ios/build/bots/scripts/PRESUBMIT.py
@@ -23,6 +23,7 @@
       # 'test_runner_test.py',
       'wpr_runner_test.py',
       'xcode_log_parser_test.py',
+      'xcode_util_test.py',
       # 'xcodebuild_runner_test.py',
   ]
 
diff --git a/ios/build/bots/scripts/run.py b/ios/build/bots/scripts/run.py
index dba1238..fa4d088 100755
--- a/ios/build/bots/scripts/run.py
+++ b/ios/build/bots/scripts/run.py
@@ -70,6 +70,9 @@
       if not os.path.exists(xcode_app_path):
         raise test_runner.XcodePathNotFoundError(xcode_app_path)
 
+      # TODO(crbug.com/1191260): Pass in runtime args and handle moving runtime
+      # back to cache after runtime cache is set up in swarming, if Xcode
+      # installed is a new version (without runtime bundled)
       xcode.install(mac_toolchain_cmd, xcode_build_version, xcode_app_path)
       xcode.select(xcode_app_path)
     except subprocess.CalledProcessError as e:
@@ -82,7 +85,6 @@
 
     return True
 
-
   def run(self, args):
     """
     Main coordinating function.
diff --git a/ios/build/bots/scripts/test_runner.py b/ios/build/bots/scripts/test_runner.py
index 3e3709d..f9708ba 100644
--- a/ios/build/bots/scripts/test_runner.py
+++ b/ios/build/bots/scripts/test_runner.py
@@ -23,6 +23,7 @@
 import iossim_util
 import standard_json_util as sju
 import test_apps
+import test_runner_errors
 import xcode_log_parser
 import xcode_util
 import xctest_utils
@@ -32,12 +33,9 @@
 READLINE_TIMEOUT = 180
 
 
-class Error(Exception):
-  """Base class for errors."""
-  pass
-
-
-class OtoolError(Error):
+# TODO(crbug.com/1077277): Move commonly used error classes to
+# test_runner_errors module.
+class OtoolError(test_runner_errors.Error):
   """OTool non-zero error code"""
 
   def __init__(self, code):
@@ -45,7 +43,7 @@
           self).__init__('otool returned a non-zero return code: %s' % code)
 
 
-class TestRunnerError(Error):
+class TestRunnerError(test_runner_errors.Error):
   """Base class for TestRunner-related errors."""
   pass
 
diff --git a/ios/build/bots/scripts/test_runner_errors.py b/ios/build/bots/scripts/test_runner_errors.py
new file mode 100644
index 0000000..208aca5
--- /dev/null
+++ b/ios/build/bots/scripts/test_runner_errors.py
@@ -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.
+"""Stores Error classes to be accessed in multiple files within package."""
+
+
+class Error(Exception):
+  """Base class for errors."""
+  pass
+
+
+class IOSRuntimeHandlingError(Error):
+  """Base class for iOS runtime package related errors."""
+  pass
+
+
+class XcodeInstallError(Error):
+  """Base class for xcode install related errors."""
+  pass
+
+
+class XcodeMacToolchainMismatchError(XcodeInstallError):
+  """The mac_toolchain version can't work with the Xcode package."""
+
+  def __init__(self, xcode_build_version):
+    super(XcodeMacToolchainMismatchError, self).__init__(
+        'Legacy mac_toolchain cannot work with Xcode: %s' % xcode_build_version)
\ No newline at end of file
diff --git a/ios/build/bots/scripts/xcode_util.py b/ios/build/bots/scripts/xcode_util.py
index dbe44b8..c566dfd 100644
--- a/ios/build/bots/scripts/xcode_util.py
+++ b/ios/build/bots/scripts/xcode_util.py
@@ -3,14 +3,137 @@
 # found in the LICENSE file.
 
 import distutils.version
+import glob
 import logging
+import os
+import shutil
 import subprocess
 
+import test_runner_errors
+
 LOGGER = logging.getLogger(__name__)
+XcodeIOSSimulatorDefaultRuntimeFilename = 'iOS.simruntime'
+XcodeIOSSimulatorRuntimeRelPath = ('Contents/Developer/Platforms/'
+                                   'iPhoneOS.platform/Library/Developer/'
+                                   'CoreSimulator/Profiles/Runtimes')
+
+
+def _using_new_mac_toolchain(mac_toolchain):
+  """Returns if the mac_toolchain command passed in is new version.
+
+  New mac_toolchain can download an Xcode without bundled runtime, and can
+  download single runtimes. Legacy mac_toolchain can only download Xcode package
+  as a whole package. The function tells the difference by checking the
+  existence of a new command line switch in new version.
+  TODO(crbug.com/1191260): Remove this util function when the new mac_toolchain
+  version is rolled to everywhere using this script.
+  """
+  cmd = [
+      mac_toolchain,
+      'help',
+  ]
+  output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)
+
+  # "install-runtime" presents as a command line switch in help output in the
+  # new mac_toolchain.
+  using_new_mac_toolchain = 'install-runtime' in output
+  return using_new_mac_toolchain
+
+
+def _is_legacy_xcode_package(xcode_app_path):
+  """Checks and returns if the installed Xcode package is legacy version.
+
+  Legacy Xcode package are uploaded with legacy version of mac_toolchain. iOS
+  runtimes are packaged into legacy Xcode packages but not into new packages.
+
+  Args:
+    xcode_app_path: (string) Path to install the contents of Xcode.app.
+
+  Returns:
+    (bool) True if the package is legacy(with runtime bundled). False otherwise.
+  """
+  # Existence of default iOS runtime indicates the downloaded Xcode is a legacy
+  # one (with runtime bundled).
+  return os.path.exists(
+      os.path.join(xcode_app_path, XcodeIOSSimulatorRuntimeRelPath,
+                   XcodeIOSSimulatorDefaultRuntimeFilename))
+
+
+def _install_runtime(mac_toolchain, install_path, xcode_build_version,
+                     ios_version):
+  """Invokes mac_toolchain to install the runtime.
+
+  mac_toolchain will resolve & find the best suitable runtime and install to the
+  path, with Xcode and ios version as input.
+
+  Args:
+    install_path: (string) Path to install the runtime package into.
+    xcode_build_version: (string) Xcode build version, e.g. 12d4e.
+    ios_version: (string) Runtime version (number only), e.g. 13.4.
+  """
+  # Transform iOS version to the runtime version format required my the tool.
+  # e.g. "14.4" -> "ios-14-4"
+  runtime_version = 'ios-' + ios_version.replace('.', '-')
+
+  cmd = [
+      mac_toolchain,
+      'install-runtime',
+      '-xcode-version',
+      xcode_build_version.lower(),
+      '-runtime-version',
+      runtime_version,
+      '-output-dir',
+      install_path,
+  ]
+
+  LOGGER.debug('Installing runtime with command: %s' % cmd)
+  output = subprocess.check_call(cmd, stderr=subprocess.STDOUT)
+  return output
+
+
+def move_runtime(runtime_cache_folder, xcode_app_path, into_xcode):
+  """Moves runtime from runtime cache into xcode or vice versa.
+
+  The function assumes that there's exactly one *.simruntime file in the source
+  folder. It's intended to only work with new Xcode packages.
+
+  Args:
+    runtime_cache_folder: (string) Path to the runtime cache directory.
+    xcode_app_path: (string) Path to install the contents of Xcode.app.
+    into_xcode: (bool) Whether the function moves from cache dir into Xcode or
+      from Xcode to cache dir.
+
+  Raises:
+    IOSRuntimeHandlingError for issues moving runtime around.
+    shutil.Error for exceptions from shutil when moving files around.
+  """
+  xcode_runtime_folder = os.path.join(xcode_app_path,
+                                      XcodeIOSSimulatorRuntimeRelPath)
+  src_folder = runtime_cache_folder if into_xcode else xcode_runtime_folder
+  dst_folder = xcode_runtime_folder if into_xcode else runtime_cache_folder
+
+  runtimes_in_src = glob.glob(os.path.join(src_folder, '*.simruntime'))
+  if len(runtimes_in_src) != 1:
+    raise test_runner_errors.IOSRuntimeHandlingError(
+        'Not exactly one runtime files (files: %s) to move from %s!' %
+        (runtimes_in_src, src_folder))
+
+  # Get the runtime package filename. It might not be the default name.
+  runtime_name = os.path.basename(runtimes_in_src[0])
+  dst_runtime = os.path.join(dst_folder, runtime_name)
+
+  # Remove if the runtime package already exists in dst.
+  if os.path.exists(dst_runtime):
+    shutil.rmtree(dst_runtime)
+
+  LOGGER.debug('Moving %s from %s to %s.' %
+               (runtime_name, src_folder, dst_folder))
+  shutil.move(os.path.join(src_folder, runtime_name), dst_runtime)
+  return
 
 
 def select(xcode_app_path):
-  """Invoke sudo xcode-select -s {xcode_app_path}
+  """Invokes sudo xcode-select -s {xcode_app_path}
 
   Raises:
     subprocess.CalledProcessError on exit codes non zero
@@ -21,7 +144,7 @@
       '-s',
       xcode_app_path,
   ]
-  LOGGER.debug('Selecting XCode with command: %s and "xcrun simctl list".' % cmd)
+  LOGGER.debug('Selecting XCode with command %s and "xcrun simctl list".' % cmd)
   output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)
 
   # This is to avoid issues caused by mixed usage of different Xcode versions on
@@ -32,14 +155,26 @@
   return output
 
 
-def install(mac_toolchain, xcode_build_version, xcode_path):
-  """Invoke mactoolchain to install the given xcode version.
+def _install_xcode(mac_toolchain, xcode_build_version, xcode_path,
+                   using_new_mac_toolchain):
+  """Invokes mac_toolchain to install the given xcode version.
+
+  If using legacy mac_toolchain, install the whole Xcode package. If using the
+  new mac_toolchain, add a command line switch to try to install an Xcode
+  without runtime. However, the existence of runtime depends on the actual Xcode
+  package in CIPD. e.g. An Xcode package uploaded with legacy mac_toolchain will
+  include runtimes, even though it's installed with new mac_toolchain and
+  "-with-runtime=False" switch.
+
+  TODO(crbug.com/1191260): Remove the last argument when the new mac_toolchain
+  version is rolled to everywhere using this script.
 
   Args:
     xcode_build_version: (string) Xcode build version to install.
     mac_toolchain: (string) Path to mac_toolchain command to install Xcode
-    See https://chromium.googlesource.com/infra/infra/+/master/go/src/infra/cmd/mac_toolchain/
+    See https://chromium.googlesource.com/infra/infra/+/main/go/src/infra/cmd/mac_toolchain/
     xcode_path: (string) Path to install the contents of Xcode.app.
+    using_new_mac_toolchain: (bool) Using new mac_toolchain.
 
   Raises:
     subprocess.CalledProcessError on exit codes non zero
@@ -54,13 +189,82 @@
       '-output-dir',
       xcode_path,
   ]
-  LOGGER.debug("Installing xcode with command: %s" % cmd)
+
+  if using_new_mac_toolchain:
+    cmd.append('-with-runtime=False')
+
+  LOGGER.debug('Installing xcode with command: %s' % cmd)
   output = subprocess.check_call(cmd, stderr=subprocess.STDOUT)
   return output
 
 
+def install(mac_toolchain, xcode_build_version, xcode_app_path, **runtime_args):
+  """Installs the Xcode and returns if the installed one is a legacy package.
+
+  Installs the Xcode of given version to path. Returns if the Xcode package
+  of the version is a legacy package (with runtimes bundled in). Runtime related
+  arguments will only work when |mac_toolchain| is a new version (with runtime
+  features), and the |xcode_build_version| in CIPD is a new package (uploaded
+  by new mac_toolchain).
+
+  If using legacy mac_toolchain, install the whole legacy Xcode package. (Will
+  raise if the Xcode package isn't legacy.)
+
+  If using new mac_toolchain, first install the Xcode package:
+  * If installed Xcode is legacy one (with runtimes bundled), return.
+  * If installed Xcode isn't legacy (without runtime bundled), install and copy
+  * the specified runtime version into Xcode.
+
+  Args:
+    xcode_build_version: (string) Xcode build version to install.
+    mac_toolchain: (string) Path to mac_toolchain command to install Xcode
+    See https://chromium.googlesource.com/infra/infra/+/main/go/src/infra/cmd/mac_toolchain/
+    xcode_app_path: (string) Path to install the contents of Xcode.app.
+    runtime_args: Keyword arguments related with runtime installation, namely:
+      runtime_cache_folder: (string) Path to the folder where runtime package
+          file (e.g. iOS.simruntime) is stored.
+      ios_version: (string) iOS version requested to be in Xcode package.
+
+  Raises:
+    subprocess.CalledProcessError on exit codes non zero
+    XcodeMacToolchainMismatchError if an Xcode without runtime is installed with
+      a legacy mac_toolchain.
+
+  Returns:
+    True, if the Xcode package in CIPD is legacy (bundled with runtimes).
+    False, if the Xcode package in CIPD is new (not bundled with runtimes).
+  """
+  using_new_mac_toolchain = _using_new_mac_toolchain(mac_toolchain)
+
+  _install_xcode(mac_toolchain, xcode_build_version, xcode_app_path,
+                 using_new_mac_toolchain)
+  is_legacy_xcode_package = _is_legacy_xcode_package(xcode_app_path)
+
+  if not using_new_mac_toolchain and not is_legacy_xcode_package:
+    # Legacy mac_toolchain can't handle the situation when no runtime is in
+    # Xcode package.
+    raise test_runner_errors.XcodeMacToolchainMismatchError(xcode_build_version)
+
+  # Install & move the runtime to Xcode. Can only work with new mac_toolchain.
+  if not is_legacy_xcode_package:
+    runtime_cache_folder = runtime_args.get('runtime_cache_folder')
+    ios_version = runtime_args.get('ios_version')
+    if not runtime_cache_folder or not ios_version:
+      raise test_runner_errors.IOSRuntimeHandlingError(
+          'Insufficient runtime_args. runtime_cache_folder: %s, ios_version: %s'
+          % s(runtime_cache_folder, ios_version))
+
+    # Try to install the runtime to it's cache folder. mac_toolchain will test
+    # and install only when the runtime doesn't exist in cache.
+    _install_runtime(mac_toolchain, runtime_cache_folder, xcode_build_version,
+                     ios_version)
+    move_runtime(runtime_cache_folder, xcode_app_path, into_xcode=True)
+
+  return is_legacy_xcode_package
+
+
 def version():
-  """Invoke xcodebuild -version
+  """Invokes xcodebuild -version
 
   Raises:
     subprocess.CalledProcessError on exit codes non zero
@@ -72,14 +276,14 @@
       'xcodebuild',
       '-version',
   ]
-  LOGGER.debug("Checking XCode version with command: %s" % cmd)
+  LOGGER.debug('Checking XCode version with command: %s' % cmd)
 
   output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)
   output = output.splitlines()
   # output sample:
   # Xcode 12.0
   # Build version 12A6159
-  logging.info(output)
+  LOGGER.info(output)
 
   version = output[0].decode('UTF-8').split(' ')[1]
   build_version = output[1].decode('UTF-8').split(' ')[2].lower()
@@ -88,6 +292,6 @@
 
 def using_xcode_11_or_higher():
   """Returns true if using Xcode version 11 or higher."""
-  LOGGER.debug("Checking if Xcode version is 11 or higher")
+  LOGGER.debug('Checking if Xcode version is 11 or higher')
   return distutils.version.LooseVersion(
       '11.0') <= distutils.version.LooseVersion(version()[0])
diff --git a/ios/build/bots/scripts/xcode_util_test.py b/ios/build/bots/scripts/xcode_util_test.py
new file mode 100644
index 0000000..f146db4
--- /dev/null
+++ b/ios/build/bots/scripts/xcode_util_test.py
@@ -0,0 +1,322 @@
+# 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.
+"""Unittests for xcode_util.py."""
+
+import logging
+import mock
+import unittest
+
+import test_runner_errors
+import test_runner_test
+import xcode_util
+
+
+class XcodeUtilTest(test_runner_test.TestCase):
+  """Test class for xcode_util functions."""
+
+  def setUp(self):
+    super(XcodeUtilTest, self).setUp()
+
+
+class InstallTest(XcodeUtilTest):
+  """Test class for xcode_util.install function."""
+
+  def setUp(self):
+    super(InstallTest, self).setUp()
+    self.mac_toolchain = 'mac_toolchain'
+    self.xcode_build_version = 'TestXcodeVersion'
+    self.xcode_app_path = 'test/path/Xcode.app'
+    self.runtime_cache_folder = 'test/path/Runtime'
+    self.ios_version = '14.4'
+
+  @mock.patch('xcode_util.move_runtime', autospec=True)
+  @mock.patch('xcode_util._install_runtime', autospec=True)
+  @mock.patch('xcode_util._install_xcode', autospec=True)
+  def test_legacy_mactoolchain_new_xcode(self, mock_install_xcode,
+                                         mock_install_runtime,
+                                         mock_move_runtime):
+    self.mock(xcode_util, '_using_new_mac_toolchain', lambda cmd: False)
+    self.mock(xcode_util, '_is_legacy_xcode_package', lambda path: False)
+
+    with self.assertRaises(test_runner_errors.XcodeMacToolchainMismatchError):
+      is_legacy_xcode = xcode_util.install(self.mac_toolchain,
+                                           self.xcode_build_version,
+                                           self.xcode_app_path)
+      self.assertTrue(is_legacy_xcode, 'install should return true')
+
+    mock_install_xcode.assert_called_with('mac_toolchain', 'TestXcodeVersion',
+                                          'test/path/Xcode.app', False)
+    self.assertFalse(mock_install_runtime.called,
+                     '_install_runtime shouldn\'t be called')
+    self.assertFalse(mock_move_runtime.called,
+                     'move_runtime shouldn\'t be called')
+
+  @mock.patch('xcode_util.move_runtime', autospec=True)
+  @mock.patch('xcode_util._install_runtime', autospec=True)
+  @mock.patch('xcode_util._install_xcode', autospec=True)
+  def test_legacy_mactoolchain_legacy_xcode(self, mock_install_xcode,
+                                            mock_install_runtime,
+                                            mock_move_runtime):
+    self.mock(xcode_util, '_using_new_mac_toolchain', lambda cmd: False)
+    self.mock(xcode_util, '_is_legacy_xcode_package', lambda path: True)
+
+    is_legacy_xcode = xcode_util.install(self.mac_toolchain,
+                                         self.xcode_build_version,
+                                         self.xcode_app_path)
+
+    self.assertTrue(is_legacy_xcode, 'install_should return true')
+    mock_install_xcode.assert_called_with('mac_toolchain', 'TestXcodeVersion',
+                                          'test/path/Xcode.app', False)
+    self.assertFalse(mock_install_runtime.called,
+                     '_install_runtime shouldn\'t be called')
+    self.assertFalse(mock_move_runtime.called,
+                     'move_runtime shouldn\'t be called')
+
+  @mock.patch('xcode_util.move_runtime', autospec=True)
+  @mock.patch('xcode_util._install_runtime', autospec=True)
+  @mock.patch('xcode_util._install_xcode', autospec=True)
+  def test_new_mactoolchain_legacy_xcode(self, mock_install_xcode,
+                                         mock_install_runtime,
+                                         mock_move_runtime):
+    self.mock(xcode_util, '_using_new_mac_toolchain', lambda cmd: True)
+    self.mock(xcode_util, '_is_legacy_xcode_package', lambda path: True)
+
+    is_legacy_xcode = xcode_util.install(self.mac_toolchain,
+                                         self.xcode_build_version,
+                                         self.xcode_app_path)
+
+    self.assertTrue(is_legacy_xcode, 'install should return true')
+    mock_install_xcode.assert_called_with('mac_toolchain', 'TestXcodeVersion',
+                                          'test/path/Xcode.app', True)
+    self.assertFalse(mock_install_runtime.called,
+                     '_install_runtime shouldn\'t be called')
+    self.assertFalse(mock_move_runtime.called,
+                     'move_runtime shouldn\'t be called')
+
+  @mock.patch('xcode_util.move_runtime', autospec=True)
+  @mock.patch('xcode_util._install_runtime')
+  @mock.patch('xcode_util._install_xcode')
+  def test_new_mactoolchain_new_xcode(self, mock_install_xcode,
+                                      mock_install_runtime, mock_move_runtime):
+    self.mock(xcode_util, '_using_new_mac_toolchain', lambda cmd: True)
+    self.mock(xcode_util, '_is_legacy_xcode_package', lambda path: False)
+
+    is_legacy_xcode = xcode_util.install(
+        self.mac_toolchain,
+        self.xcode_build_version,
+        self.xcode_app_path,
+        runtime_cache_folder=self.runtime_cache_folder,
+        ios_version=self.ios_version)
+
+    self.assertFalse(is_legacy_xcode, 'install should return False')
+    mock_install_xcode.assert_called_with('mac_toolchain', 'TestXcodeVersion',
+                                          'test/path/Xcode.app', True)
+    mock_install_runtime.assert_called_with('mac_toolchain',
+                                            'test/path/Runtime',
+                                            'TestXcodeVersion', '14.4')
+    mock_move_runtime.assert_called_with('test/path/Runtime',
+                                         'test/path/Xcode.app', True)
+
+
+class HelperFunctionTests(XcodeUtilTest):
+  """Test class for xcode_util misc util functions."""
+
+  def setUp(self):
+    super(HelperFunctionTests, self).setUp()
+    self.xcode_runtime_rel_path = (
+        'Contents/Developer/'
+        'Platforms/iPhoneOS.platform/Library/Developer/'
+        'CoreSimulator/Profiles/Runtimes/iOS.simruntime')
+
+  @mock.patch('subprocess.check_output', autospec=True)
+  def test_using_new_mac_toolchain(self, mock_check_output):
+    mock_check_output.return_value = """
+Mac OS / iOS toolchain management
+
+Usage:  mac_toolchain [command] [arguments]
+
+Commands:
+  help             prints help about a command
+  install          Installs Xcode.
+  upload           Uploads Xcode CIPD packages.
+  package          Create CIPD packages locally.
+  install-runtime  Installs Runtime.
+
+
+Use "mac_toolchain help [command]" for more information about a command."""
+    self.assertTrue(xcode_util._using_new_mac_toolchain('mac_toolchain'))
+
+  @mock.patch('subprocess.check_output', autospec=True)
+  def test_using_new_legacy_toolchain(self, mock_check_output):
+    mock_check_output.return_value = """
+Mac OS / iOS toolchain management
+
+Usage:  mac_toolchain [command] [arguments]
+
+Commands:
+  help             prints help about a command
+  install          Installs Xcode.
+  upload           Uploads Xcode CIPD packages.
+  package          Create CIPD packages locally.
+
+
+Use "mac_toolchain help [command]" for more information about a command."""
+    self.assertFalse(xcode_util._using_new_mac_toolchain('mac_toolchain'))
+
+  @mock.patch('os.path.exists', autospec=True, return_value=True)
+  def test_is_legacy_xcode_package_legacy(self, mock_exists):
+    self.assertTrue(xcode_util._is_legacy_xcode_package('test/path/Xcode.app'))
+    mock_exists.assert_called_with('test/path/Xcode.app/' +
+                                   self.xcode_runtime_rel_path)
+
+  @mock.patch('os.path.exists', autospec=True, return_value=False)
+  def test_is_legacy_xcode_package_not_legacy(self, mock_exists):
+    self.assertFalse(xcode_util._is_legacy_xcode_package('test/path/Xcode.app'))
+    mock_exists.assert_called_with('test/path/Xcode.app/' +
+                                   self.xcode_runtime_rel_path)
+
+
+class MoveRuntimeTests(XcodeUtilTest):
+  """Test class for xcode_util.move_runtime function."""
+
+  def setUp(self):
+    super(MoveRuntimeTests, self).setUp()
+    self.runtime_cache_folder = 'test/path/Runtime'
+    self.xcode_app_path = 'test/path/Xcode.app'
+
+  @mock.patch('shutil.move', autospec=True)
+  @mock.patch('shutil.rmtree', autospec=True)
+  @mock.patch('os.path.exists', autospec=True)
+  @mock.patch('glob.glob', autospec=True)
+  def test_move_runtime_into_xcode(self, mock_glob, mock_exists, mock_rmtree,
+                                   mock_move):
+    mock_glob.return_value = ['test/path/Runtime/iOS.simruntime']
+    mock_exists.return_value = False
+
+    xcode_util.move_runtime(self.runtime_cache_folder, self.xcode_app_path,
+                            True)
+
+    xcode_runtime_path = ('test/path/Xcode.app/Contents/Developer/'
+                          'Platforms/iPhoneOS.platform/Library/Developer/'
+                          'CoreSimulator/Profiles/Runtimes/iOS.simruntime')
+    mock_glob.assert_called_with('test/path/Runtime/*.simruntime')
+    mock_exists.assert_called_with(xcode_runtime_path)
+    self.assertFalse(mock_rmtree.called)
+    mock_move.assert_called_with('test/path/Runtime/iOS.simruntime',
+                                 xcode_runtime_path)
+
+  @mock.patch('shutil.move', autospec=True)
+  @mock.patch('shutil.rmtree', autospec=True)
+  @mock.patch('os.path.exists', autospec=True)
+  @mock.patch('glob.glob', autospec=True)
+  def test_move_runtime_outside_xcode(self, mock_glob, mock_exists, mock_rmtree,
+                                      mock_move):
+    xcode_runtime_folder = ('test/path/Xcode.app/Contents/Developer/'
+                            'Platforms/iPhoneOS.platform/Library/Developer/'
+                            'CoreSimulator/Profiles/Runtimes')
+    mock_glob.return_value = [xcode_runtime_folder + '/iOS.simruntime']
+    mock_exists.return_value = False
+
+    xcode_util.move_runtime(self.runtime_cache_folder, self.xcode_app_path,
+                            False)
+
+    mock_glob.assert_called_with(xcode_runtime_folder + '/*.simruntime')
+    mock_exists.assert_called_with('test/path/Runtime/iOS.simruntime')
+    self.assertFalse(mock_rmtree.called)
+    mock_move.assert_called_with(xcode_runtime_folder + '/iOS.simruntime',
+                                 'test/path/Runtime/iOS.simruntime')
+
+  @mock.patch('shutil.move', autospec=True)
+  @mock.patch('shutil.rmtree', autospec=True)
+  @mock.patch('os.path.exists', autospec=True)
+  @mock.patch('glob.glob', autospec=True)
+  def test_move_runtime_multiple_in_src(self, mock_glob, mock_exists,
+                                        mock_rmtree, mock_move):
+    mock_glob.return_value = [
+        'test/path/Runtime/iOS.simruntime',
+        'test/path/Runtime/iOS 13.4.simruntime'
+    ]
+
+    with self.assertRaises(test_runner_errors.IOSRuntimeHandlingError):
+      xcode_util.move_runtime(self.runtime_cache_folder, self.xcode_app_path,
+                              True)
+    mock_glob.assert_called_with('test/path/Runtime/*.simruntime')
+    self.assertFalse(mock_exists.called)
+    self.assertFalse(mock_rmtree.called)
+    self.assertFalse(mock_move.called)
+
+  @mock.patch('shutil.move', autospec=True)
+  @mock.patch('shutil.rmtree', autospec=True)
+  @mock.patch('os.path.exists', autospec=True)
+  @mock.patch('glob.glob', autospec=True)
+  def test_move_runtime_remove_from_dst(self, mock_glob, mock_exists,
+                                        mock_rmtree, mock_move):
+    mock_glob.return_value = ['test/path/Runtime/iOS.simruntime']
+    mock_exists.return_value = True
+
+    xcode_util.move_runtime(self.runtime_cache_folder, self.xcode_app_path,
+                            True)
+
+    xcode_runtime_path = ('test/path/Xcode.app/Contents/Developer/'
+                          'Platforms/iPhoneOS.platform/Library/Developer/'
+                          'CoreSimulator/Profiles/Runtimes/iOS.simruntime')
+    mock_glob.assert_called_with('test/path/Runtime/*.simruntime')
+    mock_exists.assert_called_with(xcode_runtime_path)
+    mock_rmtree.assert_called_with(xcode_runtime_path)
+    mock_move.assert_called_with('test/path/Runtime/iOS.simruntime',
+                                 xcode_runtime_path)
+
+
+class MacToolchainInvocationTests(XcodeUtilTest):
+  """Test class for xcode_util functions invoking mac_toolchain."""
+
+  def setUp(self):
+    super(MacToolchainInvocationTests, self).setUp()
+    self.mac_toolchain = 'mac_toolchain'
+    self.xcode_build_version = 'TestXcodeVersion'
+    self.xcode_app_path = 'test/path/Xcode.app'
+    self.runtime_cache_folder = 'test/path/Runtime'
+    self.ios_version = '14.4'
+
+  @mock.patch('subprocess.check_call', autospec=True)
+  def test_install_runtime(self, mock_check_output):
+    xcode_util._install_runtime(self.mac_toolchain, self.runtime_cache_folder,
+                                self.xcode_build_version, self.ios_version)
+    mock_check_output.assert_called_with([
+        'mac_toolchain', 'install-runtime', '-xcode-version',
+        'testxcodeversion', '-runtime-version', 'ios-14-4', '-output-dir',
+        'test/path/Runtime'
+    ],
+                                         stderr=-2)
+
+  @mock.patch('subprocess.check_call', autospec=True)
+  def test_install_xcode_legacy_mac_toolchain(self, mock_check_output):
+    using_new_mac_toolchain = False
+    xcode_util._install_xcode(self.mac_toolchain, self.xcode_build_version,
+                              self.xcode_app_path, using_new_mac_toolchain)
+    mock_check_output.assert_called_with([
+        'mac_toolchain', 'install', '-kind', 'ios', '-xcode-version',
+        'testxcodeversion', '-output-dir', 'test/path/Xcode.app'
+    ],
+                                         stderr=-2)
+
+  @mock.patch('subprocess.check_call', autospec=True)
+  def test_install_xcode_new_mac_toolchain(self, mock_check_output):
+    using_new_mac_toolchain = True
+    xcode_util._install_xcode(self.mac_toolchain, self.xcode_build_version,
+                              self.xcode_app_path, using_new_mac_toolchain)
+    mock_check_output.assert_called_with([
+        'mac_toolchain', 'install', '-kind', 'ios', '-xcode-version',
+        'testxcodeversion', '-output-dir', 'test/path/Xcode.app',
+        '-with-runtime=False'
+    ],
+                                         stderr=-2)
+
+
+if __name__ == '__main__':
+  logging.basicConfig(
+      format='[%(asctime)s:%(levelname)s] %(message)s',
+      level=logging.DEBUG,
+      datefmt='%I:%M:%S')
+  unittest.main()
diff --git a/ios/chrome/browser/policy/policy_egtest.mm b/ios/chrome/browser/policy/policy_egtest.mm
index 0a0d7f5..3408ca6b 100644
--- a/ios/chrome/browser/policy/policy_egtest.mm
+++ b/ios/chrome/browser/policy/policy_egtest.mm
@@ -89,7 +89,7 @@
                       const std::string& pref_name) {
   // Loading chrome://policy isn't necessary for the test to succeed, but it
   // provides some visual feedback as the test runs.
-  [ChromeEarlGrey loadURL:GURL("chrome://policy")];
+  [ChromeEarlGrey loadURL:GURL(kChromeUIPolicyURL)];
   [ChromeEarlGrey waitForWebStateContainingText:l10n_util::GetStringUTF8(
                                                     IDS_POLICY_HEADER_NAME)];
   // Force the preference off via policy.
@@ -161,7 +161,7 @@
 
 // Tests that about:policy is available.
 - (void)testAboutPolicy {
-  [ChromeEarlGrey loadURL:GURL("chrome://policy")];
+  [ChromeEarlGrey loadURL:GURL(kChromeUIPolicyURL)];
   [ChromeEarlGrey waitForWebStateContainingText:l10n_util::GetStringUTF8(
                                                     IDS_POLICY_HEADER_NAME)];
 }
@@ -196,7 +196,7 @@
   // Disable default search provider via policy and make sure it does not crash
   // the omnibox UI.
   SetPolicy(false, policy::key::kDefaultSearchProviderEnabled);
-  [ChromeEarlGrey loadURL:GURL("chrome://policy")];
+  [ChromeEarlGrey loadURL:GURL(kChromeUIPolicyURL)];
 
   // Open a new tab and verify that the NTP does not crash. Regression test for
   // http://crbug.com/1148903.
diff --git a/ios/chrome/browser/policy/policy_platform_provider_egtest.mm b/ios/chrome/browser/policy/policy_platform_provider_egtest.mm
index 802ca3e..5e18c79 100644
--- a/ios/chrome/browser/policy/policy_platform_provider_egtest.mm
+++ b/ios/chrome/browser/policy/policy_platform_provider_egtest.mm
@@ -14,6 +14,7 @@
 #include "components/policy/policy_constants.h"
 #include "components/strings/grit/components_strings.h"
 #include "ios/chrome/browser/chrome_switches.h"
+#include "ios/chrome/browser/chrome_url_constants.h"
 #import "ios/chrome/browser/policy/policy_app_interface.h"
 #include "ios/chrome/browser/pref_names.h"
 #include "ios/chrome/test/earl_grey/chrome_earl_grey.h"
@@ -163,7 +164,7 @@
 // Tests that about:policy is not available when policy is disabled. Also serves
 // as a test that the browser does not crash on startup with policy disabled.
 - (void)testAboutPolicyNotAvailable {
-  [ChromeEarlGrey loadURL:GURL("chrome://policy")];
+  [ChromeEarlGrey loadURL:GURL(kChromeUIPolicyURL)];
   [ChromeEarlGrey
       waitForWebStateContainingText:l10n_util::GetStringUTF8(
                                         IDS_ERRORPAGES_HEADING_NOT_AVAILABLE)];
@@ -204,7 +205,7 @@
   GREYAssertFalse(suggestValue->GetBool(),
                   @"suggestValue had an unexpected value");
 
-  [ChromeEarlGrey loadURL:GURL("chrome://policy")];
+  [ChromeEarlGrey loadURL:GURL(kChromeUIPolicyURL)];
   [ChromeEarlGrey waitForWebStateContainingText:l10n_util::GetStringUTF8(
                                                     IDS_POLICY_SHOW_UNSET)];
 }
@@ -236,7 +237,7 @@
   GREYAssertFalse(suggestValue->GetBool(),
                   @"suggestValue had an unexpected value");
 
-  [ChromeEarlGrey loadURL:GURL("chrome://policy")];
+  [ChromeEarlGrey loadURL:GURL(kChromeUIPolicyURL)];
   [ChromeEarlGrey waitForWebStateContainingText:l10n_util::GetStringUTF8(
                                                     IDS_POLICY_SHOW_UNSET)];
 }
diff --git a/ios/chrome/browser/signin/authentication_service.h b/ios/chrome/browser/signin/authentication_service.h
index 4f05f69..c3f3d739 100644
--- a/ios/chrome/browser/signin/authentication_service.h
+++ b/ios/chrome/browser/signin/authentication_service.h
@@ -85,12 +85,15 @@
   // Virtual for testing.
   virtual ChromeIdentity* GetAuthenticatedIdentity() const;
 
-  // Signs |identity| in to Chrome with |hosted_domain| as its hosted domain,
-  // pauses sync and logs |identity| in to http://google.com.
+  // Grants signin::ConsentLevel::kSignin to |identity|.
+  // This method does not set up Sync-the-feature for the identity.
   // Virtual for testing.
   virtual void SignIn(ChromeIdentity* identity);
 
-  // Grants consent for |identity| to enable syncing the account.
+  // Grants signin::ConsentLevel::kSync to |identity|.
+  // This starts setting up Sync-the-feature, but the setup will only complete
+  // once SyncUserSettings::SetFirstSetupComplete() is called.
+  // Virtual for testing.
   virtual void GrantSyncConsent(ChromeIdentity* identity);
 
   // Signs the authenticated user out of Chrome and clears the browsing
diff --git a/ios/chrome/browser/signin/authentication_service.mm b/ios/chrome/browser/signin/authentication_service.mm
index 832ca0c..21788171 100644
--- a/ios/chrome/browser/signin/authentication_service.mm
+++ b/ios/chrome/browser/signin/authentication_service.mm
@@ -308,7 +308,6 @@
              ->IsValidIdentity(identity));
 
   ResetPromptForSignIn();
-  sync_setup_service_->PrepareForFirstSyncSetup();
 
   // Load all credentials from SSO library. This must load the credentials
   // for the primary account too.
@@ -366,6 +365,12 @@
   CHECK_EQ(account_id,
            identity_manager_->GetPrimaryAccountId(signin::ConsentLevel::kSync));
 
+  // Sets the Sync setup handle to prepare for configuring the Sync data types
+  // before Sync-the-feature actually starts.
+  // TODO(crbug.com/1206680): Add EarlGrey tests to ensure that the Sync feature
+  // only starts after GrantSyncConsent is called.
+  sync_setup_service_->PrepareForFirstSyncSetup();
+
   // Kick-off sync: The authentication error UI (sign in infobar and warning
   // badge in settings screen) check the sync auth error state. Sync
   // needs to be kicked off so that it resets the auth error quickly once
diff --git a/ios/chrome/browser/signin/authentication_service_unittest.mm b/ios/chrome/browser/signin/authentication_service_unittest.mm
index c9d390c..6876ad44 100644
--- a/ios/chrome/browser/signin/authentication_service_unittest.mm
+++ b/ios/chrome/browser/signin/authentication_service_unittest.mm
@@ -101,7 +101,7 @@
   }
 
   void SetExpectationsForSignIn() {
-    EXPECT_CALL(*sync_setup_service_mock(), PrepareForFirstSyncSetup());
+    EXPECT_CALL(*sync_setup_service_mock(), PrepareForFirstSyncSetup).Times(0);
   }
 
   void StoreKnownAccountsWhileInForeground() {
@@ -657,7 +657,7 @@
 
 TEST_F(AuthenticationServiceTest, SigninAndSyncDecoupled) {
   // Sign in.
-  SetExpectationsForSignIn();
+  EXPECT_CALL(*sync_setup_service_mock(), PrepareForFirstSyncSetup).Times(0);
   authentication_service()->SignIn(identity(0));
 
   EXPECT_NSEQ(identity(0),
@@ -669,6 +669,7 @@
   EXPECT_TRUE(authentication_service()->IsAuthenticated());
 
   // Grant Sync consent.
+  EXPECT_CALL(*sync_setup_service_mock(), PrepareForFirstSyncSetup).Times(1);
   EXPECT_CALL(*mock_sync_service()->GetMockUserSettings(),
               SetSyncRequested(true));
   authentication_service()->GrantSyncConsent(identity(0));
diff --git a/ios/chrome/browser/ui/first_run/first_run_screen_view_controller.mm b/ios/chrome/browser/ui/first_run/first_run_screen_view_controller.mm
index af465d3..14867fcd 100644
--- a/ios/chrome/browser/ui/first_run/first_run_screen_view_controller.mm
+++ b/ios/chrome/browser/ui/first_run/first_run_screen_view_controller.mm
@@ -62,7 +62,7 @@
 - (void)viewDidLoad {
   [super viewDidLoad];
 
-  if (@available(iOS 13.4, *)) {
+  if (@available(iOS 13, *)) {
     self.modalInPresentation = !self.canDismissScreen;
   }
 
diff --git a/ios/chrome/browser/ui/first_run/welcome/BUILD.gn b/ios/chrome/browser/ui/first_run/welcome/BUILD.gn
index a65930e..a3be426 100644
--- a/ios/chrome/browser/ui/first_run/welcome/BUILD.gn
+++ b/ios/chrome/browser/ui/first_run/welcome/BUILD.gn
@@ -31,12 +31,14 @@
     "welcome_screen_view_controller.mm",
   ]
   deps = [
+    "//base",
     "//ios/chrome/browser/ui/first_run:first_run_ui",
     "//ios/chrome/browser/ui/first_run/resources:welcome_metrics_checkmark",
     "//ios/chrome/browser/ui/first_run/resources:welcome_screen_banner",
     "//ios/chrome/common",
     "//ios/chrome/common/ui/colors",
     "//ios/chrome/common/ui/util",
+    "//url",
   ]
   frameworks = [ "UIKit.framework" ]
 }
diff --git a/ios/chrome/browser/ui/first_run/welcome/welcome_screen_coordinator.mm b/ios/chrome/browser/ui/first_run/welcome/welcome_screen_coordinator.mm
index 4673c06..6f1ca93 100644
--- a/ios/chrome/browser/ui/first_run/welcome/welcome_screen_coordinator.mm
+++ b/ios/chrome/browser/ui/first_run/welcome/welcome_screen_coordinator.mm
@@ -82,6 +82,10 @@
                            URL:TOSURL];
   [staticViewController setTitle:title];
 
+  if (@available(iOS 13, *)) {
+    staticViewController.modalInPresentation = YES;
+  }
+
   [self.baseNavigationController pushViewController:staticViewController
                                            animated:YES];
 }
diff --git a/ios/chrome/browser/ui/first_run/welcome/welcome_screen_view_controller.mm b/ios/chrome/browser/ui/first_run/welcome/welcome_screen_view_controller.mm
index e46a3ac0..5d440d4 100644
--- a/ios/chrome/browser/ui/first_run/welcome/welcome_screen_view_controller.mm
+++ b/ios/chrome/browser/ui/first_run/welcome/welcome_screen_view_controller.mm
@@ -8,6 +8,7 @@
 #import "ios/chrome/common/string_util.h"
 #import "ios/chrome/common/ui/colors/semantic_color_names.h"
 #import "ios/chrome/common/ui/util/pointer_interaction_util.h"
+#include "url/gurl.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
@@ -22,10 +23,10 @@
 
 }  // namespace
 
-@interface WelcomeScreenViewController ()
+@interface WelcomeScreenViewController () <UITextViewDelegate>
 
 @property(nonatomic, strong) CheckboxButton* metricsConsentButton;
-@property(nonatomic, strong) UILabel* termsOfServiceLabel;
+@property(nonatomic, strong) UITextView* termsOfServiceTextView;
 
 @end
 
@@ -47,8 +48,8 @@
   self.metricsConsentButton = [self createMetricsConsentButton];
   [self.specificContentView addSubview:self.metricsConsentButton];
 
-  self.termsOfServiceLabel = [self createTermsOfServiceLabel];
-  [self.specificContentView addSubview:self.termsOfServiceLabel];
+  self.termsOfServiceTextView = [self createTermsOfServiceTextView];
+  [self.specificContentView addSubview:self.termsOfServiceTextView];
 
   [NSLayoutConstraint activateConstraints:@[
     [self.metricsConsentButton.topAnchor
@@ -59,14 +60,14 @@
     [self.metricsConsentButton.widthAnchor
         constraintEqualToAnchor:self.specificContentView.widthAnchor],
 
-    [self.termsOfServiceLabel.topAnchor
+    [self.termsOfServiceTextView.topAnchor
         constraintEqualToAnchor:self.metricsConsentButton.bottomAnchor
                        constant:kDefaultMargin],
-    [self.termsOfServiceLabel.centerXAnchor
+    [self.termsOfServiceTextView.centerXAnchor
         constraintEqualToAnchor:self.specificContentView.centerXAnchor],
-    [self.termsOfServiceLabel.widthAnchor
+    [self.termsOfServiceTextView.widthAnchor
         constraintLessThanOrEqualToAnchor:self.specificContentView.widthAnchor],
-    [self.termsOfServiceLabel.bottomAnchor
+    [self.termsOfServiceTextView.bottomAnchor
         constraintEqualToAnchor:self.specificContentView.bottomAnchor],
   ]];
 
@@ -95,39 +96,66 @@
   return button;
 }
 
-// Creates and configures the label for the terms of service, with a formatted
-// link to the full text of the terms of service.
-- (UILabel*)createTermsOfServiceLabel {
-  // TODO(crbug.com/1189815): 1) Handle taps to display the ToS text; 2) Use a
-  // UITextView so only the link part is tappable.
-  UILabel* label = [[UILabel alloc] init];
-  label.numberOfLines = 0;
-  label.textAlignment = NSTextAlignmentCenter;
-  label.translatesAutoresizingMaskIntoConstraints = NO;
-  label.adjustsFontForContentSizeCategory = YES;
+// Creates and configures the text view for the terms of service, with a
+// formatted link to the full text of the terms of service.
+- (UITextView*)createTermsOfServiceTextView {
+  UITextView* textView = [[UITextView alloc] init];
+  textView.scrollEnabled = NO;
+  textView.editable = NO;
+  textView.adjustsFontForContentSizeCategory = YES;
+  textView.delegate = self;
+  textView.backgroundColor = UIColor.clearColor;
+  textView.linkTextAttributes =
+      @{NSForegroundColorAttributeName : [UIColor colorNamed:kBlueColor]};
+  textView.translatesAutoresizingMaskIntoConstraints = NO;
+
+  NSMutableParagraphStyle* paragraphStyle =
+      [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
+  paragraphStyle.alignment = NSTextAlignmentCenter;
 
   NSDictionary* textAttributes = @{
     NSForegroundColorAttributeName : [UIColor colorNamed:kTextSecondaryColor],
     NSFontAttributeName :
-        [UIFont preferredFontForTextStyle:UIFontTextStyleCaption1]
-  };
-  NSDictionary* linkAttributes = @{
-    NSForegroundColorAttributeName : [UIColor colorNamed:kBlueColor],
-    NSFontAttributeName :
         [UIFont preferredFontForTextStyle:UIFontTextStyleCaption1],
-    NSLinkAttributeName : [NSURL URLWithString:kTermsOfServiceUrl]
+    NSParagraphStyleAttributeName : paragraphStyle
   };
-  NSAttributedString* attributedString = AttributedStringFromStringWithLink(
+  NSDictionary* linkAttributes =
+      @{NSLinkAttributeName : [NSURL URLWithString:kTermsOfServiceUrl]};
+  // TODO(crbug.com/1189815): Use final strings and enable localization.
+  NSAttributedString* attributedText = AttributedStringFromStringWithLink(
       @"Test - By continuing, you agree to the BEGIN_LINKTerms of "
       @"ServiceEND_LINK",
       textAttributes, linkAttributes);
+  textView.attributedText = attributedText;
 
-  label.attributedText = attributedString;
-  return label;
+  return textView;
 }
 
 - (void)didTapMetricsButton {
   self.metricsConsentButton.selected = !self.metricsConsentButton.selected;
 }
 
+#pragma mark - UITextViewDelegate
+
+- (BOOL)textView:(UITextView*)textView
+    shouldInteractWithURL:(NSURL*)URL
+                  inRange:(NSRange)characterRange
+              interaction:(UITextItemInteraction)interaction {
+  DCHECK(textView == self.termsOfServiceTextView);
+  [self.delegate didTapTOSLink];
+
+  // The delegate is already handling the tap.
+  return NO;
+}
+
+- (void)textViewDidChangeSelection:(UITextView*)textView {
+  // Always force the |selectedTextRange| to |nil| to prevent users from
+  // selecting text. Setting the |selectable| property to |NO| doesn't help
+  // since it makes links inside the text view untappable. Another solution is
+  // to subclass |UITextView| and override |canBecomeFirstResponder| to return
+  // NO, but that workaround only works on iOS 13.5+. This is the simplest
+  // approach that works well on iOS 12, 13 & 14.
+  textView.selectedTextRange = nil;
+}
+
 @end
diff --git a/ios/chrome/browser/ui/history/history_coordinator.mm b/ios/chrome/browser/ui/history/history_coordinator.mm
index 489a55a..43ada9fb 100644
--- a/ios/chrome/browser/ui/history/history_coordinator.mm
+++ b/ios/chrome/browser/ui/history/history_coordinator.mm
@@ -11,6 +11,7 @@
 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
 #include "ios/chrome/browser/history/history_service_factory.h"
 #import "ios/chrome/browser/main/browser.h"
+#import "ios/chrome/browser/main/browser_observer_bridge.h"
 #import "ios/chrome/browser/policy/policy_util.h"
 #include "ios/chrome/browser/sync/profile_sync_service_factory.h"
 #import "ios/chrome/browser/ui/activity_services/activity_params.h"
@@ -34,11 +35,16 @@
 #error "This file requires ARC support."
 #endif
 
-@interface HistoryCoordinator () <HistoryMenuProvider, HistoryUIDelegate> {
+@interface HistoryCoordinator () <BrowserObserving,
+                                  HistoryMenuProvider,
+                                  HistoryUIDelegate> {
   // Provides dependencies and funnels callbacks from BrowsingHistoryService.
   std::unique_ptr<IOSBrowsingHistoryDriver> _browsingHistoryDriver;
   // Abstraction to communicate with HistoryService and WebHistoryService.
   std::unique_ptr<history::BrowsingHistoryService> _browsingHistoryService;
+  // Observe BrowserObserver to prevent any access to Browser before its
+  // destroyed.
+  std::unique_ptr<BrowserObserverBridge> _browserObserver;
 }
 // ViewController being managed by this Coordinator.
 @property(nonatomic, strong)
@@ -74,6 +80,9 @@
     self.historyTableViewController.menuProvider = self;
   }
 
+  _browserObserver = std::make_unique<BrowserObserverBridge>(self);
+  self.browser->AddObserver(_browserObserver.get());
+
   // Initialize and set HistoryMediator
   self.mediator = [[HistoryMediator alloc]
       initWithBrowserState:self.browser->GetBrowserState()];
@@ -133,6 +142,9 @@
   [self.sharingCoordinator stop];
   self.sharingCoordinator = nil;
 
+  self.browser->RemoveObserver(_browserObserver.get());
+  _browserObserver.reset();
+
   if (self.historyNavigationController) {
     if (self.historyClearBrowsingDataCoordinator) {
       [self.historyClearBrowsingDataCoordinator stopWithCompletion:^{
@@ -252,6 +264,12 @@
                                                actionProvider:actionProvider];
 }
 
+#pragma mark - BrowserObserving
+
+- (void)browserDestroyed:(Browser*)browser {
+  self.historyTableViewController.browser = nil;
+}
+
 #pragma mark - Private
 
 // Stops the coordinator and requests the presentation delegate to transition to
diff --git a/ios/chrome/browser/ui/history/history_table_view_controller.mm b/ios/chrome/browser/ui/history/history_table_view_controller.mm
index 554e7c82..1cc608e 100644
--- a/ios/chrome/browser/ui/history/history_table_view_controller.mm
+++ b/ios/chrome/browser/ui/history/history_table_view_controller.mm
@@ -284,14 +284,16 @@
 
   // If history sync is enabled and there hasn't been a response from synced
   // history, try fetching again.
-  SyncSetupService* syncSetupService =
-      SyncSetupServiceFactory::GetForBrowserState(
-          self.browser->GetBrowserState());
-  if (syncSetupService->IsSyncEnabled() &&
-      syncSetupService->IsDataTypeActive(syncer::HISTORY_DELETE_DIRECTIVES) &&
-      queryResultsInfo.sync_timed_out) {
-    [self showHistoryMatchingQuery:_currentQuery];
-    return;
+  if (self.browser) {
+    SyncSetupService* syncSetupService =
+        SyncSetupServiceFactory::GetForBrowserState(
+            self.browser->GetBrowserState());
+    if (syncSetupService->IsSyncEnabled() &&
+        syncSetupService->IsDataTypeActive(syncer::HISTORY_DELETE_DIRECTIVES) &&
+        queryResultsInfo.sync_timed_out) {
+      [self showHistoryMatchingQuery:_currentQuery];
+      return;
+    }
   }
 
   // At this point there has been a response, stop the loading indicator.
@@ -556,13 +558,15 @@
   self.historyService->RemoveVisits(entries);
 
   // Delete items from |self.tableView| using performBatchUpdates.
-  [self.tableView performBatchUpdates:^{
-    [self deleteItemsFromTableViewModelWithIndex:toDeleteIndexPaths
-                        deleteItemsFromTableView:YES];
-  }
+  __weak __typeof(self) weakSelf = self;
+  [self.tableView
+      performBatchUpdates:^{
+        [weakSelf deleteItemsFromTableViewModelWithIndex:toDeleteIndexPaths
+                                deleteItemsFromTableView:YES];
+      }
       completion:^(BOOL) {
-        [self updateTableViewAfterDeletingEntries];
-        [self configureViewsForNonEditModeWithAnimation:YES];
+        [weakSelf updateTableViewAfterDeletingEntries];
+        [weakSelf configureViewsForNonEditModeWithAnimation:YES];
       }];
   base::RecordAction(base::UserMetricsAction("HistoryPage_RemoveSelected"));
 }
@@ -1022,10 +1026,11 @@
     AddSameConstraints(self.scrimView, self.view.superview);
     self.tableView.accessibilityElementsHidden = YES;
     self.tableView.scrollEnabled = NO;
+    __weak __typeof(self) weakSelf = self;
     [UIView animateWithDuration:kTableViewNavigationScrimFadeDuration
                      animations:^{
-                       self.scrimView.alpha = 1.0f;
-                       [self.view layoutIfNeeded];
+                       weakSelf.scrimView.alpha = 1.0f;
+                       [weakSelf.view layoutIfNeeded];
                      }];
   }
 }
@@ -1034,14 +1039,15 @@
 - (void)hideScrim {
   if (self.scrimView.alpha > 0.0f) {
     self.navigationController.toolbarHidden = NO;
+    __weak __typeof(self) weakSelf = self;
     [UIView animateWithDuration:kTableViewNavigationScrimFadeDuration
         animations:^{
-          self.scrimView.alpha = 0.0f;
+          weakSelf.scrimView.alpha = 0.0f;
         }
         completion:^(BOOL finished) {
-          [self.scrimView removeFromSuperview];
-          self.tableView.accessibilityElementsHidden = NO;
-          self.tableView.scrollEnabled = YES;
+          [weakSelf.scrimView removeFromSuperview];
+          weakSelf.tableView.accessibilityElementsHidden = NO;
+          weakSelf.tableView.scrollEnabled = YES;
         }];
   }
 }
@@ -1193,9 +1199,12 @@
   base::RecordAction(
       base::UserMetricsAction("MobileHistoryPage_EntryLinkOpenNewTab"));
   UrlLoadParams params = UrlLoadParams::InNewTab(URL);
+  __weak __typeof(self) weakSelf = self;
   [self.delegate dismissHistoryWithCompletion:^{
-    UrlLoadingBrowserAgent::FromBrowser(self.browser)->Load(params);
-    [self.presentationDelegate showActiveRegularTabFromHistory];
+    if (weakSelf.browser) {
+      UrlLoadingBrowserAgent::FromBrowser(weakSelf.browser)->Load(params);
+      [weakSelf.presentationDelegate showActiveRegularTabFromHistory];
+    }
   }];
 }
 
@@ -1215,9 +1224,12 @@
       "MobileHistoryPage_EntryLinkOpenNewIncognitoTab"));
   UrlLoadParams params = UrlLoadParams::InNewTab(URL);
   params.in_incognito = YES;
+  __weak __typeof(self) weakSelf = self;
   [self.delegate dismissHistoryWithCompletion:^{
-    UrlLoadingBrowserAgent::FromBrowser(self.browser)->Load(params);
-    [self.presentationDelegate showActiveIncognitoTabFromHistory];
+    if (weakSelf.browser) {
+      UrlLoadingBrowserAgent::FromBrowser(weakSelf.browser)->Load(params);
+      [weakSelf.presentationDelegate showActiveIncognitoTabFromHistory];
+    }
   }];
 }
 
@@ -1277,9 +1289,12 @@
   UrlLoadParams params = UrlLoadParams::InCurrentTab(URL);
   params.web_params.transition_type = ui::PAGE_TRANSITION_AUTO_BOOKMARK;
   params.load_strategy = self.loadStrategy;
+  __weak __typeof(self) weakSelf = self;
   [self.delegate dismissHistoryWithCompletion:^{
-    UrlLoadingBrowserAgent::FromBrowser(self.browser)->Load(params);
-    [self.presentationDelegate showActiveRegularTabFromHistory];
+    if (weakSelf.browser) {
+      UrlLoadingBrowserAgent::FromBrowser(weakSelf.browser)->Load(params);
+      [weakSelf.presentationDelegate showActiveRegularTabFromHistory];
+    }
   }];
 }
 
diff --git a/ios/web/public/test/web_test.h b/ios/web/public/test/web_test.h
index 9696407..06657f5 100644
--- a/ios/web/public/test/web_test.h
+++ b/ios/web/public/test/web_test.h
@@ -49,17 +49,13 @@
   // fixture will fail if a render process crashes.
   void SetIgnoreRenderProcessCrashesDuringTesting(bool allow);
 
-  // Sets a SharedURLLoaderFactory for |browser_state_|.
-  void SetSharedURLLoaderFactory(
-      scoped_refptr<network::SharedURLLoaderFactory> shared_url_loader_factory);
-
  private:
   // The WebClient used in tests.
   ScopedTestingWebClient web_client_;
   // The threads used for testing.
   web::WebTaskEnvironment task_environment_;
   // The browser state used in tests.
-  FakeBrowserState browser_state_;
+  std::unique_ptr<BrowserState> browser_state_;
 
   // Triggers test failures if a render process dies during the test.
   std::unique_ptr<WebTestRenderProcessCrashObserver> crash_observer_;
diff --git a/ios/web/public/test/web_test.mm b/ios/web/public/test/web_test.mm
index 09eae49d..366926e1 100644
--- a/ios/web/public/test/web_test.mm
+++ b/ios/web/public/test/web_test.mm
@@ -4,9 +4,11 @@
 
 #include "ios/web/public/test/web_test.h"
 
+#include "base/check.h"
 #include "base/memory/ptr_util.h"
 #import "ios/web/js_messaging/java_script_feature_manager.h"
 #include "ios/web/public/deprecated/global_web_state_observer.h"
+#include "ios/web/public/test/fakes/fake_browser_state.h"
 #import "ios/web/public/test/fakes/fake_web_client.h"
 #import "ios/web/web_state/ui/wk_web_view_configuration_provider.h"
 
@@ -33,6 +35,7 @@
                  WebTaskEnvironment::Options options)
     : web_client_(std::move(web_client)),
       task_environment_(options),
+      browser_state_(std::make_unique<FakeBrowserState>()),
       crash_observer_(std::make_unique<WebTestRenderProcessCrashObserver>()) {}
 
 WebTest::~WebTest() {}
@@ -57,7 +60,8 @@
 }
 
 BrowserState* WebTest::GetBrowserState() {
-  return &browser_state_;
+  DCHECK(browser_state_);
+  return browser_state_.get();
 }
 
 void WebTest::SetIgnoreRenderProcessCrashesDuringTesting(bool allow) {
@@ -68,10 +72,4 @@
   }
 }
 
-void WebTest::SetSharedURLLoaderFactory(
-    scoped_refptr<network::SharedURLLoaderFactory> shared_url_loader_factory) {
-  browser_state_.SetSharedURLLoaderFactory(
-      std::move(shared_url_loader_factory));
-}
-
 }  // namespace web
diff --git a/media/capabilities/in_memory_video_decode_stats_db_impl.h b/media/capabilities/in_memory_video_decode_stats_db_impl.h
index c896534..7e31908 100644
--- a/media/capabilities/in_memory_video_decode_stats_db_impl.h
+++ b/media/capabilities/in_memory_video_decode_stats_db_impl.h
@@ -8,7 +8,6 @@
 #include <map>
 #include <memory>
 
-#include "base/files/file_path.h"
 #include "base/memory/weak_ptr.h"
 #include "components/leveldb_proto/public/proto_database.h"
 #include "media/base/media_export.h"
diff --git a/media/cdm/cdm_adapter.h b/media/cdm/cdm_adapter.h
index 57f2c4a..7c28a63 100644
--- a/media/cdm/cdm_adapter.h
+++ b/media/cdm/cdm_adapter.h
@@ -13,7 +13,6 @@
 
 #include "base/callback.h"
 #include "base/compiler_specific.h"
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
diff --git a/media/gpu/test/video_frame_validator.h b/media/gpu/test/video_frame_validator.h
index d74778f..e2bb0e6 100644
--- a/media/gpu/test/video_frame_validator.h
+++ b/media/gpu/test/video_frame_validator.h
@@ -12,7 +12,6 @@
 
 #include "base/callback.h"
 #include "base/files/file.h"
-#include "base/files/file_path.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/synchronization/condition_variable.h"
 #include "base/synchronization/lock.h"
diff --git a/net/disk_cache/simple/simple_index.h b/net/disk_cache/simple/simple_index.h
index 8a62fb1..d62e0fb9 100644
--- a/net/disk_cache/simple/simple_index.h
+++ b/net/disk_cache/simple/simple_index.h
@@ -14,7 +14,6 @@
 #include <vector>
 
 #include "base/callback.h"
-#include "base/files/file_path.h"
 #include "base/gtest_prod_util.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
diff --git a/pdf/pdf_engine.h b/pdf/pdf_engine.h
index 4e28a3d..3f9c7a4 100644
--- a/pdf/pdf_engine.h
+++ b/pdf/pdf_engine.h
@@ -383,9 +383,6 @@
   // Returns a page's rect in screen coordinates, as well as its surrounding
   // border areas and bottom separator.
   virtual gfx::Rect GetPageScreenRect(int page_index) const = 0;
-  // Gets the offset of the vertical scrollbar from the top in document
-  // coordinates.
-  virtual int GetVerticalScrollbarYPosition() = 0;
   // Set color / grayscale rendering modes.
   virtual void SetGrayscale(bool grayscale) = 0;
   // Get the number of characters on a given page.
diff --git a/pdf/pdfium/pdfium_engine.cc b/pdf/pdfium/pdfium_engine.cc
index 80c8187..c97012d 100644
--- a/pdf/pdfium/pdfium_engine.cc
+++ b/pdf/pdfium/pdfium_engine.cc
@@ -2564,10 +2564,6 @@
   return GetScreenRect(pages_[index]->rect());
 }
 
-int PDFiumEngine::GetVerticalScrollbarYPosition() {
-  return position_.y();
-}
-
 void PDFiumEngine::SetGrayscale(bool grayscale) {
   render_grayscale_ = grayscale;
 }
diff --git a/pdf/pdfium/pdfium_engine.h b/pdf/pdfium/pdfium_engine.h
index a12d6be..3671cffc 100644
--- a/pdf/pdfium/pdfium_engine.h
+++ b/pdf/pdfium/pdfium_engine.h
@@ -139,7 +139,6 @@
   gfx::Rect GetPageBoundsRect(int index) override;
   gfx::Rect GetPageContentsRect(int index) override;
   gfx::Rect GetPageScreenRect(int page_index) const override;
-  int GetVerticalScrollbarYPosition() override;
   void SetGrayscale(bool grayscale) override;
   int GetCharCount(int page_index) override;
   gfx::RectF GetCharBounds(int page_index, int char_index) override;
diff --git a/remoting/host/config_watcher.h b/remoting/host/config_watcher.h
index 7738d8b..3b150dc 100644
--- a/remoting/host/config_watcher.h
+++ b/remoting/host/config_watcher.h
@@ -8,7 +8,6 @@
 #include <string>
 
 #include "base/compiler_specific.h"
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 
diff --git a/remoting/host/setup/daemon_controller_delegate_mac.h b/remoting/host/setup/daemon_controller_delegate_mac.h
index 26e46f4..b6edf32 100644
--- a/remoting/host/setup/daemon_controller_delegate_mac.h
+++ b/remoting/host/setup/daemon_controller_delegate_mac.h
@@ -7,7 +7,6 @@
 
 #include <memory>
 
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "remoting/base/auto_thread.h"
diff --git a/remoting/host/win/unprivileged_process_delegate.h b/remoting/host/win/unprivileged_process_delegate.h
index aea3326..0d9ce9c 100644
--- a/remoting/host/win/unprivileged_process_delegate.h
+++ b/remoting/host/win/unprivileged_process_delegate.h
@@ -10,7 +10,6 @@
 #include <memory>
 
 #include "base/compiler_specific.h"
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/sequence_checker.h"
diff --git a/services/cert_verifier/cert_verifier_service_factory.h b/services/cert_verifier/cert_verifier_service_factory.h
index 16c70a64..2cd0caeb 100644
--- a/services/cert_verifier/cert_verifier_service_factory.h
+++ b/services/cert_verifier/cert_verifier_service_factory.h
@@ -15,7 +15,6 @@
 #include "services/cert_verifier/cert_net_url_loader/cert_net_fetcher_url_loader.h"
 #include "services/cert_verifier/public/mojom/cert_verifier_service_factory.mojom.h"
 #include "services/network/public/mojom/cert_verifier_service.mojom.h"
-#include "services/network/public/mojom/url_loader_factory.mojom.h"
 
 namespace cert_verifier {
 
diff --git a/services/cert_verifier/test_cert_verifier_service_factory.h b/services/cert_verifier/test_cert_verifier_service_factory.h
index 8b69642..2089d196 100644
--- a/services/cert_verifier/test_cert_verifier_service_factory.h
+++ b/services/cert_verifier/test_cert_verifier_service_factory.h
@@ -16,7 +16,6 @@
 #include "services/cert_verifier/public/mojom/cert_verifier_service_factory.mojom.h"
 #include "services/network/public/mojom/cert_verifier_service.mojom.h"
 #include "services/network/public/mojom/network_context.mojom.h"
-#include "services/network/public/mojom/url_loader_factory.mojom.h"
 
 namespace cert_verifier {
 
diff --git a/services/network/public/cpp/cors/cors.cc b/services/network/public/cpp/cors/cors.cc
index f148465..20b537c6 100644
--- a/services/network/public/cpp/cors/cors.cc
+++ b/services/network/public/cpp/cors/cors.cc
@@ -17,6 +17,7 @@
 #include "net/base/mime_util.h"
 #include "net/http/http_request_headers.h"
 #include "net/http/http_util.h"
+#include "services/network/public/cpp/is_potentially_trustworthy.h"
 #include "services/network/public/cpp/request_mode.h"
 #include "url/gurl.h"
 #include "url/origin.h"
@@ -208,8 +209,13 @@
   kMaxValue = kNotPermittedInPreflight,
 };
 
-void ReportAccessCheckResultMetric(AccessCheckResult result) {
+void ReportAccessCheckResultMetric(AccessCheckResult result,
+                                   const url::Origin& requestor_origin) {
   UMA_HISTOGRAM_ENUMERATION("Net.Cors.AccessCheckResult", result);
+  if (!IsOriginPotentiallyTrustworthy(requestor_origin)) {
+    UMA_HISTOGRAM_ENUMERATION("Net.Cors.AccessCheckResult.NotSecureRequestor",
+                              result);
+  }
 }
 
 }  // namespace
@@ -242,7 +248,8 @@
       CheckAccessInternal(response_url, allow_origin_header,
                           allow_credentials_header, credentials_mode, origin);
   ReportAccessCheckResultMetric(error_status ? AccessCheckResult::kNotPermitted
-                                             : AccessCheckResult::kPermitted);
+                                             : AccessCheckResult::kPermitted,
+                                origin);
   if (error_status) {
     UMA_HISTOGRAM_ENUMERATION("Net.Cors.AccessCheckError",
                               error_status->cors_error);
@@ -287,7 +294,8 @@
   ReportAccessCheckResultMetric(
       (error_status || !has_ok_status)
           ? AccessCheckResult::kNotPermittedInPreflight
-          : AccessCheckResult::kPermittedInPreflight);
+          : AccessCheckResult::kPermittedInPreflight,
+      origin);
 
   // Prefer using a preflight specific error code.
   if (error_status) {
diff --git a/services/network/public/cpp/cors/cors_unittest.cc b/services/network/public/cpp/cors/cors_unittest.cc
index 2af6006..cc1fa4e 100644
--- a/services/network/public/cpp/cors/cors_unittest.cc
+++ b/services/network/public/cpp/cors/cors_unittest.cc
@@ -6,6 +6,7 @@
 
 #include <limits.h>
 
+#include "base/test/metrics/histogram_tester.h"
 #include "build/build_config.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "url/gurl.h"
@@ -145,6 +146,75 @@
   EXPECT_EQ("fuga", error2->failed_parameter);
 }
 
+// Should match unexposed enum in cors.cc
+enum class AccessCheckResult {
+  kPermitted = 0,
+  kNotPermitted = 1,
+  kPermittedInPreflight = 2,
+  kNotPermittedInPreflight = 3,
+
+  kMaxValue = kNotPermittedInPreflight,
+};
+constexpr char kAccessCheckHistogram[] = "Net.Cors.AccessCheckResult";
+constexpr char kAccessCheckHistogramNotSecure[] =
+    "Net.Cors.AccessCheckResult.NotSecureRequestor";
+
+TEST_F(CorsTest, CheckAccessLogsAllowMetricsSecureOrigin) {
+  base::HistogramTester histogram_tester;
+  const GURL response_url("http://example.com/data");
+  const url::Origin origin = url::Origin::Create(GURL("https://google.com"));
+
+  CheckAccess(response_url, origin.Serialize() /* allow_origin_header */,
+              base::nullopt /* allow_credentials_header */,
+              network::mojom::CredentialsMode::kOmit, origin);
+  histogram_tester.ExpectUniqueSample(kAccessCheckHistogram,
+                                      AccessCheckResult::kPermitted, 1);
+  histogram_tester.ExpectTotalCount(kAccessCheckHistogramNotSecure, 0);
+}
+
+TEST_F(CorsTest, CheckAccessLogsBlockMetricsSecureOrigin) {
+  base::HistogramTester histogram_tester;
+  const GURL response_url("http://example.com/data");
+  const url::Origin origin = url::Origin::Create(GURL("https://google.com"));
+
+  CheckAccess(response_url,
+              std::string("https://not.google.com") /* allow_origin_header */,
+              base::nullopt /* allow_credentials_header */,
+              network::mojom::CredentialsMode::kOmit, origin);
+  histogram_tester.ExpectUniqueSample(kAccessCheckHistogram,
+                                      AccessCheckResult::kNotPermitted, 1);
+  histogram_tester.ExpectTotalCount(kAccessCheckHistogramNotSecure, 0);
+}
+
+TEST_F(CorsTest, CheckAccessLogsAllowMetricsInsecureOrigin) {
+  base::HistogramTester histogram_tester;
+  const GURL response_url("http://example.com/data");
+  const url::Origin origin = url::Origin::Create(GURL("http://google.com"));
+
+  CheckAccess(response_url, origin.Serialize() /* allow_origin_header */,
+              base::nullopt /* allow_credentials_header */,
+              network::mojom::CredentialsMode::kOmit, origin);
+  histogram_tester.ExpectUniqueSample(kAccessCheckHistogram,
+                                      AccessCheckResult::kPermitted, 1);
+  histogram_tester.ExpectUniqueSample(kAccessCheckHistogramNotSecure,
+                                      AccessCheckResult::kPermitted, 1);
+}
+
+TEST_F(CorsTest, CheckAccessLogsBlockMetricsInsecureOrigin) {
+  base::HistogramTester histogram_tester;
+  const GURL response_url("http://example.com/data");
+  const url::Origin origin = url::Origin::Create(GURL("http://google.com"));
+
+  CheckAccess(response_url,
+              std::string("http://not.google.com") /* allow_origin_header */,
+              base::nullopt /* allow_credentials_header */,
+              network::mojom::CredentialsMode::kOmit, origin);
+  histogram_tester.ExpectUniqueSample(kAccessCheckHistogram,
+                                      AccessCheckResult::kNotPermitted, 1);
+  histogram_tester.ExpectUniqueSample(kAccessCheckHistogramNotSecure,
+                                      AccessCheckResult::kNotPermitted, 1);
+}
+
 // Tests if CheckRedirectLocation detects kCorsDisabledScheme and
 // kRedirectContainsCredentials errors correctly.
 TEST_F(CorsTest, CheckRedirectLocation) {
diff --git a/services/network/test/test_url_loader_client.h b/services/network/test/test_url_loader_client.h
index 5e753bb..cecb19f 100644
--- a/services/network/test/test_url_loader_client.h
+++ b/services/network/test/test_url_loader_client.h
@@ -16,7 +16,6 @@
 #include "net/url_request/redirect_info.h"
 #include "services/network/public/cpp/url_loader_completion_status.h"
 #include "services/network/public/mojom/url_loader.mojom.h"
-#include "services/network/public/mojom/url_loader_factory.mojom.h"
 #include "services/network/public/mojom/url_response_head.mojom-forward.h"
 
 namespace network {
diff --git a/services/network/web_bundle_manager.h b/services/network/web_bundle_manager.h
index 3284e20..9ae2a23 100644
--- a/services/network/web_bundle_manager.h
+++ b/services/network/web_bundle_manager.h
@@ -14,7 +14,6 @@
 #include "services/network/public/cpp/resource_request.h"
 #include "services/network/public/mojom/network_context.mojom-forward.h"
 #include "services/network/public/mojom/url_loader.mojom.h"
-#include "services/network/public/mojom/url_loader_factory.mojom.h"
 
 namespace network {
 
diff --git a/services/network/web_bundle_url_loader_factory.h b/services/network/web_bundle_url_loader_factory.h
index d6c4c99..a8a8bed01 100644
--- a/services/network/web_bundle_url_loader_factory.h
+++ b/services/network/web_bundle_url_loader_factory.h
@@ -11,7 +11,6 @@
 #include "base/memory/weak_ptr.h"
 #include "components/web_package/mojom/web_bundle_parser.mojom.h"
 #include "services/network/public/mojom/network_context.mojom.h"
-#include "services/network/public/mojom/url_loader_factory.mojom.h"
 #include "services/network/public/mojom/web_bundle_handle.mojom.h"
 
 namespace network {
diff --git a/services/preferences/tracked/pref_hash_filter.h b/services/preferences/tracked/pref_hash_filter.h
index 371d09c..a197d88 100644
--- a/services/preferences/tracked/pref_hash_filter.h
+++ b/services/preferences/tracked/pref_hash_filter.h
@@ -15,7 +15,6 @@
 
 #include "base/callback.h"
 #include "base/compiler_specific.h"
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/optional.h"
diff --git a/storage/browser/file_system/file_stream_reader_test.h b/storage/browser/file_system/file_stream_reader_test.h
index a0c77e5e..e48515b6 100644
--- a/storage/browser/file_system/file_stream_reader_test.h
+++ b/storage/browser/file_system/file_stream_reader_test.h
@@ -6,7 +6,6 @@
 #define STORAGE_BROWSER_FILE_SYSTEM_FILE_STREAM_READER_TEST_H_
 
 #include "base/callback_helpers.h"
-#include "base/files/file_path.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
diff --git a/storage/browser/file_system/file_stream_writer_test.h b/storage/browser/file_system/file_stream_writer_test.h
index eb84a69..1b5b67de 100644
--- a/storage/browser/file_system/file_stream_writer_test.h
+++ b/storage/browser/file_system/file_stream_writer_test.h
@@ -7,7 +7,6 @@
 
 #include <cstdio>
 #include "base/callback_helpers.h"
-#include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/single_thread_task_runner.h"
@@ -234,4 +233,4 @@
 
 }  // namespace storage
 
-#endif  // STORAGE_BROWSER_FILE_SYSTEM_FILE_STREAM_WRITER_TEST_H_
\ No newline at end of file
+#endif  // STORAGE_BROWSER_FILE_SYSTEM_FILE_STREAM_WRITER_TEST_H_
diff --git a/storage/browser/file_system/file_system_operation_context.h b/storage/browser/file_system/file_system_operation_context.h
index 330dea9..b3837f2 100644
--- a/storage/browser/file_system/file_system_operation_context.h
+++ b/storage/browser/file_system/file_system_operation_context.h
@@ -8,7 +8,6 @@
 #include <stdint.h>
 
 #include "base/component_export.h"
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/supports_user_data.h"
 #include "base/threading/thread_checker.h"
diff --git a/storage/browser/file_system/file_system_quota_client.h b/storage/browser/file_system/file_system_quota_client.h
index 3a4261e..6ca864b 100644
--- a/storage/browser/file_system/file_system_quota_client.h
+++ b/storage/browser/file_system/file_system_quota_client.h
@@ -11,7 +11,6 @@
 
 #include "base/compiler_specific.h"
 #include "base/component_export.h"
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "storage/browser/file_system/file_system_quota_util.h"
diff --git a/storage/browser/file_system/file_writer_delegate.h b/storage/browser/file_system/file_writer_delegate.h
index 48725b3a..70626b3 100644
--- a/storage/browser/file_system/file_writer_delegate.h
+++ b/storage/browser/file_system/file_writer_delegate.h
@@ -11,7 +11,6 @@
 
 #include "base/component_export.h"
 #include "base/files/file.h"
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "base/time/time.h"
diff --git a/storage/browser/file_system/sandbox_file_system_backend.h b/storage/browser/file_system/sandbox_file_system_backend.h
index b6cf3cdd..9fdacef 100644
--- a/storage/browser/file_system/sandbox_file_system_backend.h
+++ b/storage/browser/file_system/sandbox_file_system_backend.h
@@ -13,7 +13,6 @@
 
 #include "base/compiler_specific.h"
 #include "base/component_export.h"
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "storage/browser/file_system/file_system_backend.h"
diff --git a/testing/buildbot/chromium.android.fyi.json b/testing/buildbot/chromium.android.fyi.json
index 10653df..ce79163c 100644
--- a/testing/buildbot/chromium.android.fyi.json
+++ b/testing/buildbot/chromium.android.fyi.json
@@ -103,7 +103,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -165,7 +165,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -229,7 +229,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -291,7 +291,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -348,7 +348,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -402,7 +402,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -464,7 +464,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -526,7 +526,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -588,7 +588,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -650,7 +650,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -714,7 +714,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -777,7 +777,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -839,7 +839,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -901,7 +901,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -964,7 +964,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -1026,7 +1026,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -1089,7 +1089,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -1151,7 +1151,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -1221,7 +1221,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -1284,7 +1284,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -1348,7 +1348,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -1411,7 +1411,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -1475,7 +1475,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -1538,7 +1538,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -1602,7 +1602,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -1664,7 +1664,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -1726,7 +1726,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -1788,7 +1788,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -1850,7 +1850,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -1912,7 +1912,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -1974,7 +1974,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -2036,7 +2036,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -2101,7 +2101,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -2163,7 +2163,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -2225,7 +2225,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -2287,7 +2287,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -2349,7 +2349,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -2411,7 +2411,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -2473,7 +2473,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -2535,7 +2535,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -2597,7 +2597,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -2659,7 +2659,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -2721,7 +2721,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -2784,7 +2784,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -2846,7 +2846,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -2908,7 +2908,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -2970,7 +2970,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -3032,7 +3032,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -3094,7 +3094,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -3156,7 +3156,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -3219,7 +3219,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -3282,7 +3282,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -3344,7 +3344,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -3406,7 +3406,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -3468,7 +3468,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -3530,7 +3530,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -3592,7 +3592,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -3654,7 +3654,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -3716,7 +3716,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -3778,7 +3778,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -3840,7 +3840,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -3903,7 +3903,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -3966,7 +3966,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -4029,7 +4029,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -4092,7 +4092,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -4154,7 +4154,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -4217,7 +4217,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -4280,7 +4280,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -4342,7 +4342,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -4486,7 +4486,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-8",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -4546,7 +4546,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -4624,7 +4624,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -4675,11 +4675,11 @@
             "--bucket",
             "chromium-result-details",
             "--test-name",
-            "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.209"
+            "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.210"
           ],
           "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
         },
-        "name": "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.209",
+        "name": "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.210",
         "resultdb": {
           "enable": true
         },
@@ -4689,7 +4689,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M90",
-              "revision": "version:90.0.4430.209"
+              "revision": "version:90.0.4430.210"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -4703,7 +4703,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -4782,7 +4782,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -4861,7 +4861,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -4912,11 +4912,11 @@
             "--bucket",
             "chromium-result-details",
             "--test-name",
-            "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.209"
+            "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.210"
           ],
           "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
         },
-        "name": "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.209",
+        "name": "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.210",
         "resultdb": {
           "enable": true
         },
@@ -4926,7 +4926,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M90",
-              "revision": "version:90.0.4430.209"
+              "revision": "version:90.0.4430.210"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -4940,7 +4940,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -5019,7 +5019,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -5084,7 +5084,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-8",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -5142,7 +5142,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-8",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -5198,7 +5198,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-8",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
diff --git a/testing/buildbot/chromium.android.json b/testing/buildbot/chromium.android.json
index 417fe40..9191fa0d1 100644
--- a/testing/buildbot/chromium.android.json
+++ b/testing/buildbot/chromium.android.json
@@ -35980,7 +35980,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -36049,7 +36049,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -36111,7 +36111,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -36173,7 +36173,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -36235,7 +36235,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -36304,7 +36304,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "e2-standard-8",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -36367,7 +36367,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -36434,7 +36434,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -36496,7 +36496,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -36559,7 +36559,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -36621,7 +36621,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -36678,7 +36678,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -36731,7 +36731,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -36793,7 +36793,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -36855,7 +36855,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -36917,7 +36917,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -36979,7 +36979,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -37041,7 +37041,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -37103,7 +37103,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -37165,7 +37165,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -37228,7 +37228,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -37290,7 +37290,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -37353,7 +37353,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -37415,7 +37415,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -37477,7 +37477,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -37541,7 +37541,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -37605,7 +37605,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -37668,7 +37668,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -37731,7 +37731,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -37793,7 +37793,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -37855,7 +37855,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -37917,7 +37917,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -37979,7 +37979,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -38041,7 +38041,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -38103,7 +38103,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -38165,7 +38165,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -38230,7 +38230,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -38292,7 +38292,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -38354,7 +38354,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -38416,7 +38416,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -38478,7 +38478,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -38540,7 +38540,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -38602,7 +38602,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -38664,7 +38664,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -38726,7 +38726,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -38788,7 +38788,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -38850,7 +38850,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -38913,7 +38913,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -38975,7 +38975,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -39037,7 +39037,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -39099,7 +39099,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -39162,7 +39162,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -39226,7 +39226,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -39288,7 +39288,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -39350,7 +39350,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -39412,7 +39412,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -39474,7 +39474,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -39536,7 +39536,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -39598,7 +39598,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -39660,7 +39660,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -39722,7 +39722,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -39784,7 +39784,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -39847,7 +39847,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -39909,7 +39909,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -39971,7 +39971,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -40033,7 +40033,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -40095,7 +40095,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -40158,7 +40158,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -40220,7 +40220,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -40282,7 +40282,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -40328,7 +40328,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -49028,7 +49028,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -49091,7 +49091,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -49155,7 +49155,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -49217,7 +49217,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -49274,7 +49274,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -49327,7 +49327,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -49389,7 +49389,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -49451,7 +49451,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -49513,7 +49513,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -49575,7 +49575,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -49638,7 +49638,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -49701,7 +49701,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -49763,7 +49763,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -49825,7 +49825,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -49888,7 +49888,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -49950,7 +49950,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -50013,7 +50013,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -50075,7 +50075,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -50137,7 +50137,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -50199,7 +50199,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -50269,7 +50269,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-8",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -50332,7 +50332,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -50394,7 +50394,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -50458,7 +50458,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -50522,7 +50522,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -50585,7 +50585,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -50648,7 +50648,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -50710,7 +50710,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -50772,7 +50772,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -50834,7 +50834,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -50896,7 +50896,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -50958,7 +50958,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -51020,7 +51020,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -51082,7 +51082,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -51147,7 +51147,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -51209,7 +51209,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -51271,7 +51271,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -51333,7 +51333,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -51395,7 +51395,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -51457,7 +51457,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -51519,7 +51519,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -51581,7 +51581,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -51643,7 +51643,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -51705,7 +51705,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -51767,7 +51767,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -51830,7 +51830,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -51892,7 +51892,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -51954,7 +51954,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -52016,7 +52016,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -52078,7 +52078,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -52140,7 +52140,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -52202,7 +52202,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -52265,7 +52265,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -52329,7 +52329,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -52391,7 +52391,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -52453,7 +52453,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -52515,7 +52515,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -52577,7 +52577,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -52639,7 +52639,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -52701,7 +52701,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -52763,7 +52763,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -52825,7 +52825,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -52887,7 +52887,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -52949,7 +52949,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -53012,7 +53012,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -53075,7 +53075,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -53137,7 +53137,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -53199,7 +53199,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -53261,7 +53261,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -53323,7 +53323,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -53385,7 +53385,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -53452,7 +53452,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -53516,7 +53516,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -53579,7 +53579,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -53641,7 +53641,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -53703,7 +53703,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -53786,7 +53786,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -53838,11 +53838,11 @@
             "--bucket",
             "chromium-result-details",
             "--test-name",
-            "weblayer_instrumentation_test_versions_with_chrome_apk_Client Library Skew Tests For 90.0.4430.209"
+            "weblayer_instrumentation_test_versions_with_chrome_apk_Client Library Skew Tests For 90.0.4430.210"
           ],
           "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
         },
-        "name": "weblayer_instrumentation_test_versions_with_chrome_apk_Client Library Skew Tests For 90.0.4430.209",
+        "name": "weblayer_instrumentation_test_versions_with_chrome_apk_Client Library Skew Tests For 90.0.4430.210",
         "resultdb": {
           "enable": true
         },
@@ -53852,7 +53852,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M90",
-              "revision": "version:90.0.4430.209"
+              "revision": "version:90.0.4430.210"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -53866,7 +53866,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -53946,7 +53946,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -54026,7 +54026,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -54078,11 +54078,11 @@
             "--bucket",
             "chromium-result-details",
             "--test-name",
-            "weblayer_instrumentation_test_versions_with_chrome_apk_Implementation Library Skew Tests For 90.0.4430.209"
+            "weblayer_instrumentation_test_versions_with_chrome_apk_Implementation Library Skew Tests For 90.0.4430.210"
           ],
           "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
         },
-        "name": "weblayer_instrumentation_test_versions_with_chrome_apk_Implementation Library Skew Tests For 90.0.4430.209",
+        "name": "weblayer_instrumentation_test_versions_with_chrome_apk_Implementation Library Skew Tests For 90.0.4430.210",
         "resultdb": {
           "enable": true
         },
@@ -54092,7 +54092,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M90",
-              "revision": "version:90.0.4430.209"
+              "revision": "version:90.0.4430.210"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -54106,7 +54106,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -54186,7 +54186,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -54254,7 +54254,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -54332,7 +54332,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -54383,11 +54383,11 @@
             "--bucket",
             "chromium-result-details",
             "--test-name",
-            "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.209"
+            "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.210"
           ],
           "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
         },
-        "name": "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.209",
+        "name": "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.210",
         "resultdb": {
           "enable": true
         },
@@ -54397,7 +54397,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M90",
-              "revision": "version:90.0.4430.209"
+              "revision": "version:90.0.4430.210"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -54411,7 +54411,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -54490,7 +54490,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -54569,7 +54569,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -54620,11 +54620,11 @@
             "--bucket",
             "chromium-result-details",
             "--test-name",
-            "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.209"
+            "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.210"
           ],
           "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
         },
-        "name": "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.209",
+        "name": "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.210",
         "resultdb": {
           "enable": true
         },
@@ -54634,7 +54634,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M90",
-              "revision": "version:90.0.4430.209"
+              "revision": "version:90.0.4430.210"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -54648,7 +54648,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -54727,7 +54727,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -54795,7 +54795,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -54873,7 +54873,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -54924,11 +54924,11 @@
             "--bucket",
             "chromium-result-details",
             "--test-name",
-            "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.209"
+            "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.210"
           ],
           "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
         },
-        "name": "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.209",
+        "name": "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.210",
         "resultdb": {
           "enable": true
         },
@@ -54938,7 +54938,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M90",
-              "revision": "version:90.0.4430.209"
+              "revision": "version:90.0.4430.210"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -54952,7 +54952,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -55031,7 +55031,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -55110,7 +55110,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -55161,11 +55161,11 @@
             "--bucket",
             "chromium-result-details",
             "--test-name",
-            "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.209"
+            "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.210"
           ],
           "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
         },
-        "name": "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.209",
+        "name": "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.210",
         "resultdb": {
           "enable": true
         },
@@ -55175,7 +55175,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M90",
-              "revision": "version:90.0.4430.209"
+              "revision": "version:90.0.4430.210"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -55189,7 +55189,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
@@ -55268,7 +55268,7 @@
               "device_os": null,
               "device_type": null,
               "machine_type": "n1-standard-4",
-              "os": "Ubuntu-16.04",
+              "os": "Ubuntu-16.04|Ubuntu-18.04",
               "pool": "chromium.tests.avd"
             }
           ],
diff --git a/testing/buildbot/chromium.mac.json b/testing/buildbot/chromium.mac.json
index 74cb47c..76bb6f37 100644
--- a/testing/buildbot/chromium.mac.json
+++ b/testing/buildbot/chromium.mac.json
@@ -11238,7 +11238,7 @@
           "dimension_sets": [
             {
               "cpu": "x86-64",
-              "machine_type": "n1-highcpu-4",
+              "machine_type": "n1-standard-4",
               "os": "Mac-11|Mac-10.16"
             }
           ],
@@ -12169,7 +12169,7 @@
           "dimension_sets": [
             {
               "cpu": "x86-64",
-              "machine_type": "n1-highcpu-4",
+              "machine_type": "n1-standard-4",
               "os": "Mac-11|Mac-10.16"
             }
           ],
diff --git a/testing/buildbot/test_suite_exceptions.pyl b/testing/buildbot/test_suite_exceptions.pyl
index 9bb3df0..de87062 100644
--- a/testing/buildbot/test_suite_exceptions.pyl
+++ b/testing/buildbot/test_suite_exceptions.pyl
@@ -1440,6 +1440,17 @@
           'shards': 2,
         },
       },
+      'Mac11 Tests': {
+        # TODO(crbug.com/1206401): Restore to defaults when there is enough
+        # capacity.
+        'swarming': {
+          'dimension_sets': [
+            {
+              'machine_type': 'n1-standard-4',
+            },
+          ],
+        },
+      },
       'fuchsia-code-coverage': {
         'swarming': {
           'shards': 12,
@@ -2958,6 +2969,17 @@
           'shards': 2,
         },
       },
+      'Mac11 Tests': {
+        # TODO(crbug.com/1206401): Restore to defaults when there is enough
+        # capacity.
+        'swarming': {
+          'dimension_sets': [
+            {
+              'machine_type': 'n1-standard-4',
+            },
+          ],
+        },
+      },
       'ToTLinuxASan': {
         'swarming': {
           'shards': 2,
diff --git a/testing/buildbot/variants.pyl b/testing/buildbot/variants.pyl
index c60de26..15539aa 100644
--- a/testing/buildbot/variants.pyl
+++ b/testing/buildbot/variants.pyl
@@ -370,13 +370,13 @@
       '../../weblayer/browser/android/javatests/skew/expectations.txt',
       '--impl-version=90',
     ],
-    'identifier': 'Implementation Library Skew Tests For 90.0.4430.209',
+    'identifier': 'Implementation Library Skew Tests For 90.0.4430.210',
     'swarming': {
       'cipd_packages': [
         {
           'cipd_package': 'chromium/testing/weblayer-x86',
           'location': 'weblayer_instrumentation_test_M90',
-          'revision': 'version:90.0.4430.209',
+          'revision': 'version:90.0.4430.210',
         }
       ],
     },
@@ -442,13 +442,13 @@
       '../../weblayer/browser/android/javatests/skew/expectations.txt',
       '--impl-version=90',
     ],
-    'identifier': 'Implementation Library Skew Tests For 90.0.4430.209',
+    'identifier': 'Implementation Library Skew Tests For 90.0.4430.210',
     'swarming': {
       'cipd_packages': [
         {
           'cipd_package': 'chromium/testing/weblayer-x86',
           'location': 'weblayer_instrumentation_test_M90',
-          'revision': 'version:90.0.4430.209',
+          'revision': 'version:90.0.4430.210',
         }
       ],
     },
@@ -514,13 +514,13 @@
       '../../weblayer/browser/android/javatests/skew/expectations.txt',
       '--client-version=90',
     ],
-    'identifier': 'Client Library Skew Tests For 90.0.4430.209',
+    'identifier': 'Client Library Skew Tests For 90.0.4430.210',
     'swarming': {
       'cipd_packages': [
         {
           'cipd_package': 'chromium/testing/weblayer-x86',
           'location': 'weblayer_instrumentation_test_M90',
-          'revision': 'version:90.0.4430.209',
+          'revision': 'version:90.0.4430.210',
         }
       ],
     },
diff --git a/testing/buildbot/waterfalls.pyl b/testing/buildbot/waterfalls.pyl
index 29ecf50..9390e31 100644
--- a/testing/buildbot/waterfalls.pyl
+++ b/testing/buildbot/waterfalls.pyl
@@ -1069,7 +1069,7 @@
           'enable_resultdb',
           'marshmallow-x86-emulator',
           'emulator-4-cores',
-          'linux-xenial',
+          'linux-xenial-or-bionic',
           'x86-64',
         ],
         'os_type': 'android',
@@ -1082,7 +1082,7 @@
           'enable_resultdb',
           'marshmallow-x86-emulator',
           'emulator-4-cores',
-          'linux-xenial',
+          'linux-xenial-or-bionic',
           'x86-64',
         ],
         'os_type': 'android',
@@ -1162,7 +1162,7 @@
           'enable_resultdb',
           'pie-x86-emulator',
           'emulator-4-cores',
-          'linux-xenial',
+          'linux-xenial-or-bionic',
           'x86-64',
         ],
         'os_type': 'android',
@@ -1175,7 +1175,7 @@
           'enable_resultdb',
           'marshmallow-x86-emulator',
           'emulator-4-cores',
-          'linux-xenial',
+          'linux-xenial-or-bionic',
           'x86-64',
         ],
         'os_type': 'android',
@@ -1188,7 +1188,7 @@
           'enable_resultdb',
           'oreo-x86-emulator',
           'emulator-4-cores',
-          'linux-xenial',
+          'linux-xenial-or-bionic',
           'x86-64',
         ],
         'os_type': 'android',
@@ -1201,7 +1201,7 @@
           'enable_resultdb',
           'pie-x86-emulator',
           'emulator-4-cores',
-          'linux-xenial',
+          'linux-xenial-or-bionic',
           'x86-64',
         ],
         'os_type': 'android',
@@ -1242,7 +1242,7 @@
           '11-x86-emulator',
           'emulator-4-cores',
           'enable_resultdb',
-          'linux-xenial',
+          'linux-xenial-or-bionic',
           'x86-64',
         ],
         'os_type': 'android',
@@ -1267,7 +1267,7 @@
           'enable_resultdb',
           'pie-x86-emulator',
           'emulator-4-cores',
-          'linux-xenial',
+          'linux-xenial-or-bionic',
           'x86-64',
         ],
         'test_suites': {
@@ -1281,7 +1281,7 @@
           'enable_resultdb',
           '10-x86-emulator',
           'emulator-4-cores',
-          'linux-xenial',
+          'linux-xenial-or-bionic',
           'x86-64',
         ],
         'os_type': 'android',
@@ -1294,7 +1294,7 @@
           'enable_resultdb',
           'pie-x86-emulator',
           'emulator-4-cores',
-          'linux-xenial',
+          'linux-xenial-or-bionic',
           'x86-64',
         ],
         'test_suites': {
@@ -1308,7 +1308,7 @@
           'enable_resultdb',
           'pie-x86-emulator',
           'emulator-4-cores',
-          'linux-xenial',
+          'linux-xenial-or-bionic',
           'x86-64',
         ],
         'test_suites': {
@@ -1322,7 +1322,7 @@
           'enable_resultdb',
           'pie-x86-emulator',
           'emulator-4-cores',
-          'linux-xenial',
+          'linux-xenial-or-bionic',
           'x86-64',
         ],
         'test_suites': {
diff --git a/third_party/blink/public/devtools_protocol/browser_protocol.pdl b/third_party/blink/public/devtools_protocol/browser_protocol.pdl
index 81a5671..d14942a8 100644
--- a/third_party/blink/public/devtools_protocol/browser_protocol.pdl
+++ b/third_party/blink/public/devtools_protocol/browser_protocol.pdl
@@ -6443,6 +6443,7 @@
       clipboard-write
       conversion-measurement
       cross-origin-isolated
+      direct-sockets
       display-capture
       document-domain
       encrypted-media
diff --git a/third_party/blink/public/mojom/permissions_policy/permissions_policy_feature.mojom b/third_party/blink/public/mojom/permissions_policy/permissions_policy_feature.mojom
index c550498..9761c84 100644
--- a/third_party/blink/public/mojom/permissions_policy/permissions_policy_feature.mojom
+++ b/third_party/blink/public/mojom/permissions_policy/permissions_policy_feature.mojom
@@ -133,6 +133,9 @@
   // a field with the main frame's origin.
   kSharedAutofill = 83,
 
+  // Controls access to Direct Sockets.
+  kDirectSockets = 84,
+
   // Don't change assigned numbers of any item, and don't reuse removed slots.
   // Add new features at the end of the enum.
   // Also, run update_permissions_policy_enum.py in
diff --git a/third_party/blink/renderer/bindings/IDLExtendedAttributes.txt b/third_party/blink/renderer/bindings/IDLExtendedAttributes.txt
index 929f165a..ea35e71 100644
--- a/third_party/blink/renderer/bindings/IDLExtendedAttributes.txt
+++ b/third_party/blink/renderer/bindings/IDLExtendedAttributes.txt
@@ -52,6 +52,7 @@
 CustomConstructor
 DefaultValue=Undefined
 DeprecateAs=*
+DirectSocketEnabled
 DoNotCheckConstants
 DoNotTestNewObject
 EnforceRange
diff --git a/third_party/blink/renderer/bindings/core/v8/isolated_world_csp.cc b/third_party/blink/renderer/bindings/core/v8/isolated_world_csp.cc
index a4fd193a..860eb10f 100644
--- a/third_party/blink/renderer/bindings/core/v8/isolated_world_csp.cc
+++ b/third_party/blink/renderer/bindings/core/v8/isolated_world_csp.cc
@@ -16,7 +16,6 @@
 #include "third_party/blink/renderer/platform/bindings/dom_wrapper_world.h"
 #include "third_party/blink/renderer/platform/heap/garbage_collected.h"
 #include "third_party/blink/renderer/platform/instrumentation/use_counter.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/weborigin/kurl.h"
 #include "third_party/blink/renderer/platform/weborigin/security_origin.h"
 #include "third_party/blink/renderer/platform/wtf/std_lib_extras.h"
diff --git a/third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value.cc b/third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value.cc
index 09db78a..e81369c 100644
--- a/third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value.cc
+++ b/third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value.cc
@@ -57,7 +57,6 @@
 #include "third_party/blink/renderer/platform/bindings/script_state.h"
 #include "third_party/blink/renderer/platform/blob/blob_data.h"
 #include "third_party/blink/renderer/platform/heap/handle.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/wtf/shared_buffer.h"
 #include "third_party/blink/renderer/platform/wtf/std_lib_extras.h"
 #include "third_party/blink/renderer/platform/wtf/text/string_buffer.h"
diff --git a/third_party/blink/renderer/bindings/core/v8/v8_embedder_graph_builder.cc b/third_party/blink/renderer/bindings/core/v8/v8_embedder_graph_builder.cc
index 7a98fb0..b91e5c1 100644
--- a/third_party/blink/renderer/bindings/core/v8/v8_embedder_graph_builder.cc
+++ b/third_party/blink/renderer/bindings/core/v8/v8_embedder_graph_builder.cc
@@ -15,7 +15,6 @@
 #include "third_party/blink/renderer/platform/bindings/v8_per_isolate_data.h"
 #include "third_party/blink/renderer/platform/bindings/wrapper_type_info.h"
 #include "third_party/blink/renderer/platform/heap/unified_heap_controller.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
 #include "third_party/blink/renderer/platform/wtf/buildflags.h"
 
diff --git a/third_party/blink/renderer/bindings/core/v8/v8_gc_controller.cc b/third_party/blink/renderer/bindings/core/v8/v8_gc_controller.cc
index d5b1fd8..fb7bba9 100644
--- a/third_party/blink/renderer/bindings/core/v8/v8_gc_controller.cc
+++ b/third_party/blink/renderer/bindings/core/v8/v8_gc_controller.cc
@@ -51,7 +51,6 @@
 #include "third_party/blink/renderer/platform/heap/heap_stats_collector.h"
 #include "third_party/blink/renderer/platform/instrumentation/histogram.h"
 #include "third_party/blink/renderer/platform/instrumentation/tracing/trace_event.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/wtf/allocator/partitions.h"
 #include "third_party/blink/renderer/platform/wtf/buildflags.h"
 #include "third_party/blink/renderer/platform/wtf/text/string_builder.h"
diff --git a/third_party/blink/renderer/bindings/core/v8/v8_wasm_response_extensions.cc b/third_party/blink/renderer/bindings/core/v8/v8_wasm_response_extensions.cc
index eda5ba6..9cf1fc3 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
@@ -24,7 +24,6 @@
 #include "third_party/blink/renderer/platform/instrumentation/tracing/trace_event.h"
 #include "third_party/blink/renderer/platform/loader/fetch/cached_metadata.h"
 #include "third_party/blink/renderer/platform/loader/fetch/script_cached_metadata_handler.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 
 namespace blink {
 
diff --git a/third_party/blink/renderer/bindings/scripts/bind_gen/codegen_expr.py b/third_party/blink/renderer/bindings/scripts/bind_gen/codegen_expr.py
index aa09f3d..9ea2e01 100644
--- a/third_party/blink/renderer/bindings/scripts/bind_gen/codegen_expr.py
+++ b/third_party/blink/renderer/bindings/scripts/bind_gen/codegen_expr.py
@@ -181,6 +181,7 @@
     #         feature_selector-2nd-phase-term))
     # which can be represented in more details as:
     #   (and cross_origin_isolated_term
+    #        direct_socket_enabled_term
     #        secure_context_term
     #        uncond_exposed_term
     #        (or
@@ -192,6 +193,7 @@
     #             feature_selector_term)))
     # where
     #   cross_origin_isolated_term represents [CrossOriginIsolated]
+    #   direct_socket_enabled_term represents [DirectSocketEnabled]
     #   secure_context_term represents [SecureContext=F1]
     #   uncond_exposed_term represents [Exposed=(G1, G2)]
     #   cond_exposed_term represents [Exposed(G1 F1, G2 F2)]
@@ -224,6 +226,12 @@
     else:
         cross_origin_isolated_term = _Expr(True)
 
+    # [DirectSocketEnabled]
+    if exposure.only_in_direct_socket_contexts:
+        direct_socket_enabled_term = _Expr("${is_direct_socket_enabled}")
+    else:
+        direct_socket_enabled_term = _Expr(True)
+
     # [SecureContext]
     if exposure.only_in_secure_contexts is True:
         secure_context_term = _Expr("${is_in_secure_context}")
@@ -295,6 +303,7 @@
     # Build an expression.
     top_level_terms = []
     top_level_terms.append(cross_origin_isolated_term)
+    top_level_terms.append(direct_socket_enabled_term)
     top_level_terms.append(secure_context_term)
     if uncond_exposed_terms:
         top_level_terms.append(expr_or(uncond_exposed_terms))
diff --git a/third_party/blink/renderer/bindings/scripts/bind_gen/dictionary.py b/third_party/blink/renderer/bindings/scripts/bind_gen/dictionary.py
index 7f3957c5..2ae35bc3 100644
--- a/third_party/blink/renderer/bindings/scripts/bind_gen/dictionary.py
+++ b/third_party/blink/renderer/bindings/scripts/bind_gen/dictionary.py
@@ -106,6 +106,10 @@
             "const bool ${is_cross_origin_isolated} = "
             "${execution_context}->CrossOriginIsolatedCapability();"),
         SymbolNode(
+            "is_direct_socket_enabled",
+            "const bool ${is_direct_socket_enabled} = "
+            "${execution_context}->DirectSocketCapability();"),
+        SymbolNode(
             "is_in_secure_context", "const bool ${is_in_secure_context} = "
             "${execution_context}->IsSecureContext();"),
     ]
diff --git a/third_party/blink/renderer/bindings/scripts/bind_gen/interface.py b/third_party/blink/renderer/bindings/scripts/bind_gen/interface.py
index 813d2a2..c033378 100644
--- a/third_party/blink/renderer/bindings/scripts/bind_gen/interface.py
+++ b/third_party/blink/renderer/bindings/scripts/bind_gen/interface.py
@@ -1875,11 +1875,12 @@
             elif key == "Reflect":
                 has_reflect = True
             elif key in ("Affects", "CrossOriginIsolated", "DeprecateAs",
-                         "Exposed", "LogActivity", "LogAllWorlds", "Measure",
-                         "MeasureAs", "ReflectEmpty", "ReflectInvalid",
-                         "ReflectMissing", "ReflectOnly",
-                         "RuntimeCallStatsCounter", "RuntimeEnabled",
-                         "SecureContext", "URL", "Unscopable"):
+                         "DirectSocketEnabled", "Exposed", "LogActivity",
+                         "LogAllWorlds", "Measure", "MeasureAs",
+                         "ReflectEmpty", "ReflectInvalid", "ReflectMissing",
+                         "ReflectOnly", "RuntimeCallStatsCounter",
+                         "RuntimeEnabled", "SecureContext", "URL",
+                         "Unscopable"):
                 pass
             else:
                 return None
@@ -4431,6 +4432,9 @@
         S("is_cross_origin_isolated",
           ("const bool ${is_cross_origin_isolated} = "
            "${execution_context}->CrossOriginIsolatedCapability();")),
+        S("is_direct_socket_enabled",
+          ("const bool ${is_direct_socket_enabled} = "
+           "${execution_context}->DirectSocketCapability();")),
         S("is_in_secure_context",
           ("const bool ${is_in_secure_context} = "
            "${execution_context}->IsSecureContext();")),
diff --git a/third_party/blink/renderer/bindings/scripts/code_generator.py b/third_party/blink/renderer/bindings/scripts/code_generator.py
index 8fdbc746..86e651da 100644
--- a/third_party/blink/renderer/bindings/scripts/code_generator.py
+++ b/third_party/blink/renderer/bindings/scripts/code_generator.py
@@ -70,6 +70,14 @@
         code, 'execution_context && (%s)' % cross_origin_isolated_test)
 
 
+# [DirectSocketEnabled]
+def direct_socket_enabled_if(code, direct_socket_enabled_test):
+    if not direct_socket_enabled_test:
+        return code
+    return generate_indented_conditional(
+        code, 'execution_context && (%s)' % direct_socket_enabled_test)
+
+
 # [SecureContext]
 def secure_context_if(code, secure_context_test):
     if secure_context_test is None:
@@ -123,6 +131,7 @@
         'runtime_enabled': runtime_enabled_if,
         'runtime_enabled_function': v8_utilities.runtime_enabled_function,
         'cross_origin_isolated': cross_origin_isolated_if,
+        'direct_socket_enabled': direct_socket_enabled_if,
         'secure_context': secure_context_if
     })
     jinja_env.filters.update(constant_filters())
diff --git a/third_party/blink/renderer/bindings/scripts/generate_global_constructors.py b/third_party/blink/renderer/bindings/scripts/generate_global_constructors.py
index c51cc276..8a571d5 100755
--- a/third_party/blink/renderer/bindings/scripts/generate_global_constructors.py
+++ b/third_party/blink/renderer/bindings/scripts/generate_global_constructors.py
@@ -123,7 +123,7 @@
           extended_attributes[name]) if extended_attributes[name] else '')
         for name in [
             'RuntimeEnabled', 'ContextEnabled', 'CrossOriginIsolated',
-            'SecureContext'
+            'DirectSocketEnabled', 'SecureContext'
         ] if name in extended_attributes
     ]
 
diff --git a/third_party/blink/renderer/bindings/scripts/interface_dependency_resolver.py b/third_party/blink/renderer/bindings/scripts/interface_dependency_resolver.py
index 33b11d0..8845480 100644
--- a/third_party/blink/renderer/bindings/scripts/interface_dependency_resolver.py
+++ b/third_party/blink/renderer/bindings/scripts/interface_dependency_resolver.py
@@ -45,6 +45,7 @@
 # attribute on the main interface.
 DEPENDENCY_EXTENDED_ATTRIBUTES = frozenset([
     'CrossOriginIsolated',
+    'DirectSocketEnabled',
     'RuntimeEnabled',
     'SecureContext',
 ])
diff --git a/third_party/blink/renderer/bindings/scripts/v8_attributes.py b/third_party/blink/renderer/bindings/scripts/v8_attributes.py
index 7a519f0..b77173d 100644
--- a/third_party/blink/renderer/bindings/scripts/v8_attributes.py
+++ b/third_party/blink/renderer/bindings/scripts/v8_attributes.py
@@ -280,7 +280,11 @@
         'runtime_enabled_feature_name':
         v8_utilities.runtime_enabled_feature_name(attribute, runtime_features),
         # [CrossOriginIsolated]
-        'cross_origin_isolated_test': v8_utilities.cross_origin_isolated(attribute, interface),
+        'cross_origin_isolated_test':
+        v8_utilities.cross_origin_isolated(attribute, interface),
+        # [DirectSocketEnabled]
+        'direct_socket_enabled_test':
+        v8_utilities.direct_socket_enabled(attribute, interface),
         # [SecureContext]
         'secure_context_test': v8_utilities.secure_context(attribute, interface),
         'use_output_parameter_for_result': idl_type.use_output_parameter_for_result,
@@ -344,18 +348,22 @@
     return bool(attribute['cross_origin_isolated_test'])
 
 
+def is_direct_socket_enabled(attribute):
+    return bool(attribute['direct_socket_enabled_test'])
+
+
 def is_secure_context(attribute):
     return bool(attribute['secure_context_test'])
 
 
 def filter_accessors(attributes):
     return [
-        attribute for attribute in attributes
-        if not (attribute['exposed_test'] or is_secure_context(attribute)
-                or is_cross_origin_isolated(attribute)
-                or attribute['context_enabled_feature_name']
-                or is_origin_trial_enabled(attribute)
-                or attribute['runtime_enabled_feature_name'])
+        attribute for attribute in attributes if not (
+            attribute['exposed_test'] or is_secure_context(attribute)
+            or is_cross_origin_isolated(attribute) or is_direct_socket_enabled(
+                attribute) or attribute['context_enabled_feature_name']
+            or is_origin_trial_enabled(attribute)
+            or attribute['runtime_enabled_feature_name'])
         and not attribute['is_data_type_property']
     ]
 
@@ -363,6 +371,7 @@
 def is_data_attribute(attribute):
     return (not (attribute['exposed_test'] or is_secure_context(attribute)
                  or is_cross_origin_isolated(attribute)
+                 or is_direct_socket_enabled(attribute)
                  or attribute['context_enabled_feature_name']
                  or is_origin_trial_enabled(attribute)
                  or attribute['runtime_enabled_feature_name'])
@@ -379,16 +388,18 @@
     return [
         attribute for attribute in attributes
         if not (attribute['exposed_test'] or is_secure_context(attribute)
-                or is_cross_origin_isolated(attribute))
+                or is_cross_origin_isolated(attribute)
+                or is_direct_socket_enabled(attribute))
         and attribute['runtime_enabled_feature_name']
     ]
 
 
 def filter_conditionally_enabled(attributes):
     return [
-        attribute for attribute in attributes if attribute['exposed_test'] or
-        ((is_secure_context(attribute) or is_cross_origin_isolated(attribute))
-         and not is_origin_trial_enabled(attribute))
+        attribute for attribute in attributes if attribute['exposed_test'] or (
+            (is_secure_context(attribute) or is_cross_origin_isolated(
+                attribute) or is_direct_socket_enabled(attribute))
+            and not is_origin_trial_enabled(attribute))
     ]
 
 
diff --git a/third_party/blink/renderer/bindings/scripts/v8_interface.py b/third_party/blink/renderer/bindings/scripts/v8_interface.py
index 43506e9..60a1adb3 100644
--- a/third_party/blink/renderer/bindings/scripts/v8_interface.py
+++ b/third_party/blink/renderer/bindings/scripts/v8_interface.py
@@ -169,9 +169,13 @@
         feature['needs_cross_origin_isolated'] = any(
             member.get('cross_origin_isolated_test', False)
             for member in members)
+        feature['needs_direct_socket_enabled'] = any(
+            member.get('direct_socket_enabled_test', False)
+            for member in members)
         feature['needs_context'] = feature['needs_secure_context'] or feature[
-            'needs_cross_origin_isolated'] or any(
-                member.get('exposed_test', False) for member in members)
+            'needs_cross_origin_isolated'] or feature[
+                'needs_direct_socket_enabled'] or any(
+                    member.get('exposed_test', False) for member in members)
 
     if features:
         includes.add('platform/bindings/script_state.h')
@@ -538,9 +542,12 @@
         attr for attr in conditionally_enabled_attributes
         if attr['constructor_type']
     ]
-    has_conditional_coi_attributes = any(  #pylint: disable=invalid-name
+    has_conditional_coi_attributes = any(  # pylint: disable=invalid-name
         v8_attributes.is_cross_origin_isolated(attr)
         for attr in conditionally_enabled_attributes)
+    has_conditional_direct_socket_attributes = any(  # pylint: disable=invalid-name
+        v8_attributes.is_direct_socket_enabled(attr)
+        for attr in conditionally_enabled_attributes)
     has_conditional_secure_attributes = any(  # pylint: disable=invalid-name
         v8_attributes.is_secure_context(attr)
         for attr in conditionally_enabled_attributes)
@@ -551,6 +558,8 @@
         conditional_interface_objects,
         'has_conditional_coi_attributes':
         has_conditional_coi_attributes,
+        'has_conditional_direct_socket_attributes':
+        has_conditional_direct_socket_attributes,
         'has_conditional_secure_attributes':
         has_conditional_secure_attributes,
     })
@@ -565,10 +574,15 @@
     has_conditional_coi_methods = any(  # pylint: disable=invalid-name
         v8_methods.is_cross_origin_isolated(method)
         for method in conditional_methods)
+    has_conditional_direct_socket_methods = any(  # pylint: disable=invalid-name
+        v8_methods.is_direct_socket_enabled(method)
+        for method in conditional_methods)
     has_conditional_secure_methods = any(  # pylint: disable=invalid-name
         v8_methods.is_secure_context(method) for method in conditional_methods)
     context.update({
         'has_conditional_coi_methods': has_conditional_coi_methods,
+        'has_conditional_direct_socket_methods':
+        has_conditional_direct_socket_methods,
         'has_conditional_secure_methods': has_conditional_secure_methods,
         'conditional_methods': conditional_methods,
     })
@@ -1224,6 +1238,9 @@
         # [CrossOriginIsolated]
         'cross_origin_isolated_test_all':
         common_value(overloads, 'cross_origin_isolated_test'),
+        # [DirectSocketEnabled]
+        'direct_socket_enabled_test_all':
+        common_value(overloads, 'direct_socket_enabled_test'),
         # [SecureContext]
         'secure_context_test_all':
         common_value(overloads, 'secure_context_test'),
diff --git a/third_party/blink/renderer/bindings/scripts/v8_methods.py b/third_party/blink/renderer/bindings/scripts/v8_methods.py
index 8b1274e..3a6445d 100644
--- a/third_party/blink/renderer/bindings/scripts/v8_methods.py
+++ b/third_party/blink/renderer/bindings/scripts/v8_methods.py
@@ -69,6 +69,12 @@
         method else method['cross_origin_isolated_test'])
 
 
+def is_direct_socket_enabled(method):
+    return bool(
+        method['overloads']['direct_socket_enabled_test_all'] if 'overloads' in
+        method else method['direct_socket_enabled_test'])
+
+
 def is_secure_context(method):
     return bool(method['overloads']['secure_context_test_all'] if 'overloads'
                 in method else method['secure_context_test'])
@@ -78,7 +84,7 @@
     exposed = method['overloads']['exposed_test_all'] \
         if 'overloads' in method else method['exposed_test']
     return exposed or is_secure_context(method) or is_cross_origin_isolated(
-        method)
+        method) or is_direct_socket_enabled(method)
 
 
 def filter_conditionally_enabled(methods, interface_is_partial):
@@ -315,6 +321,9 @@
         # [CrossOriginIsolated]
         'cross_origin_isolated_test':
         v8_utilities.cross_origin_isolated(method, interface),
+        # [DirectSocketEnabled]
+        'direct_socket_enabled_test':
+        v8_utilities.direct_socket_enabled(method, interface),
         # [SecureContext]
         'secure_context_test':
         v8_utilities.secure_context(method, interface),
diff --git a/third_party/blink/renderer/bindings/scripts/v8_utilities.py b/third_party/blink/renderer/bindings/scripts/v8_utilities.py
index 9ad6301..7432ab4e 100644
--- a/third_party/blink/renderer/bindings/scripts/v8_utilities.py
+++ b/third_party/blink/renderer/bindings/scripts/v8_utilities.py
@@ -367,6 +367,24 @@
     return 'is_cross_origin_isolated'
 
 
+# [DirectSocketEnabled]
+def direct_socket_enabled(member, interface):
+    """Returns C++ code that checks whether an interface/method/attribute/etc.
+    is exposed to the current context. Requires that the surrounding code
+    defines an |is_direct_socket_enabled| variable prior to this check."""
+    member_is_direct_socket_enabled = (
+        'DirectSocketEnabled' in member.extended_attributes)
+    interface_is_direct_socket_enabled = (
+        (member.defined_in is None or member.defined_in == interface.name)
+        and 'DirectSocketEnabled' in interface.extended_attributes)
+
+    if not (member_is_direct_socket_enabled
+            or interface_is_direct_socket_enabled):
+        return None
+
+    return 'is_direct_socket_enabled'
+
+
 # [SecureContext]
 def secure_context(member, interface):
     """Returns C++ code that checks whether an interface/method/attribute/etc. is exposed
diff --git a/third_party/blink/renderer/bindings/scripts/web_idl/exposure.py b/third_party/blink/renderer/bindings/scripts/web_idl/exposure.py
index ed565b8..77788df 100644
--- a/third_party/blink/renderer/bindings/scripts/web_idl/exposure.py
+++ b/third_party/blink/renderer/bindings/scripts/web_idl/exposure.py
@@ -59,6 +59,8 @@
             self._context_enabled_features = tuple(
                 other.context_enabled_features)
             self._only_in_coi_contexts = other.only_in_coi_contexts
+            self._only_in_direct_socket_contexts = (
+                other.only_in_direct_socket_contexts)
             self._only_in_secure_contexts = other.only_in_secure_contexts
         else:
             self._global_names_and_features = tuple()
@@ -67,6 +69,7 @@
             self._context_dependent_runtime_enabled_features = tuple()
             self._context_enabled_features = tuple()
             self._only_in_coi_contexts = False
+            self._only_in_direct_socket_contexts = False
             self._only_in_secure_contexts = None
 
     @property
@@ -115,6 +118,17 @@
         return self._only_in_coi_contexts
 
     @property
+    def only_in_direct_socket_contexts(self):
+        """
+        Returns whether this construct is available only in contexts deemed
+        suitable to host Direct Sockets. The returned value is a boolean:
+        True if the construct is restricted to these contexts, False if not.
+
+        TODO(crbug.com/1206150): This needs a specification (and definition).
+        """
+        return self._only_in_direct_socket_contexts
+
+    @property
     def only_in_secure_contexts(self):
         """
         Returns whether this construct is available only in secure contexts or
@@ -142,6 +156,7 @@
 
         if (self.context_dependent_runtime_enabled_features
                 or self.context_enabled_features or self.only_in_coi_contexts
+                or self.only_in_direct_socket_contexts
                 or self.only_in_secure_contexts):
             return True
 
@@ -167,6 +182,7 @@
         self._context_dependent_runtime_enabled_features = []
         self._context_enabled_features = []
         self._only_in_coi_contexts = False
+        self._only_in_direct_socket_contexts = False
         self._only_in_secure_contexts = None
 
     def __getstate__(self):
@@ -196,6 +212,10 @@
         assert isinstance(value, bool)
         self._only_in_coi_contexts = value
 
+    def set_only_in_direct_socket_contexts(self, value):
+        assert isinstance(value, bool)
+        self._only_in_direct_socket_contexts = value
+
     def set_only_in_secure_contexts(self, value):
         assert (isinstance(value, (bool, str))
                 or (isinstance(value, (list, tuple))
diff --git a/third_party/blink/renderer/bindings/scripts/web_idl/idl_compiler.py b/third_party/blink/renderer/bindings/scripts/web_idl/idl_compiler.py
index 8fa0298..32821c8 100644
--- a/third_party/blink/renderer/bindings/scripts/web_idl/idl_compiler.py
+++ b/third_party/blink/renderer/bindings/scripts/web_idl/idl_compiler.py
@@ -224,6 +224,9 @@
             propagate(('ContextEnabled', 'add_context_enabled_feature'))
             propagate(('CrossOriginIsolated', 'set_only_in_coi_contexts'),
                       default_value=True)
+            propagate(
+                ('DirectSocketEnabled', 'set_only_in_direct_socket_contexts'),
+                default_value=True)
             propagate(('SecureContext', 'set_only_in_secure_contexts'),
                       default_value=True)
 
@@ -521,9 +524,9 @@
 
     def _propagate_extattrs_to_overload_group(self):
         ANY_OF = ('CrossOrigin', 'CrossOriginIsolated', 'Custom',
-                  'LegacyLenientThis', 'LegacyUnforgeable',
-                  'NoAllocDirectCall', 'NotEnumerable', 'PerWorldBindings',
-                  'SecureContext', 'Unscopable')
+                  'DirectSocketEnabled', 'LegacyLenientThis',
+                  'LegacyUnforgeable', 'NoAllocDirectCall', 'NotEnumerable',
+                  'PerWorldBindings', 'SecureContext', 'Unscopable')
 
         old_irs = self._ir_map.irs_of_kinds(IRMap.IR.Kind.INTERFACE,
                                             IRMap.IR.Kind.NAMESPACE)
@@ -596,6 +599,13 @@
                 else:
                     group.exposure.set_only_in_coi_contexts(True)
 
+                # [DirectSocketEnabled]
+                if any(not exposure.only_in_direct_socket_contexts
+                       for exposure in exposures):
+                    pass  # Exposed by default.
+                else:
+                    group.exposure.set_only_in_direct_socket_contexts(True)
+
                 # [SecureContext]
                 if any(exposure.only_in_secure_contexts is False
                        for exposure in exposures):
diff --git a/third_party/blink/renderer/bindings/templates/attributes.cc.tmpl b/third_party/blink/renderer/bindings/templates/attributes.cc.tmpl
index 431d81d..5286586 100644
--- a/third_party/blink/renderer/bindings/templates/attributes.cc.tmpl
+++ b/third_party/blink/renderer/bindings/templates/attributes.cc.tmpl
@@ -641,13 +641,15 @@
 
 
 {##############################################################################}
-{# This macro installs |attributes_to_install| conditionally based on Exposed, CrossOriginIsolated, SecureContext, and RuntimeEnabled checks. #}
+{# This macro installs |attributes_to_install| conditionally based on Exposed, CrossOriginIsolated, DirectSocketEnabled, SecureContext, and RuntimeEnabled checks. #}
 {% macro install_conditional_attributes(attributes_to_install) %}
 {% for exposed_test, exposed_attribute_list in attributes_to_install | groupby('exposed_test') %}
 {% filter exposed(exposed_test) %}
 {% for cross_origin_isolated_test, cross_origin_isolated_attribute_list in exposed_attribute_list | groupby('cross_origin_isolated_test') %}
 {% filter cross_origin_isolated(cross_origin_isolated_test) %}
-{% for secure_context_test, secure_context_attribute_list in cross_origin_isolated_attribute_list | groupby('secure_context_test') %}
+{% for direct_socket_enabled_test, direct_socket_enabled_attribute_list in cross_origin_isolated_attribute_list | groupby('direct_socket_enabled_test') %}
+{% filter direct_socket_enabled(direct_socket_enabled_test) %}
+{% for secure_context_test, secure_context_attribute_list in direct_socket_enabled_isolated_attribute_list | groupby('secure_context_test') %}
 {% filter secure_context(secure_context_test) %}
 {% for feature_name, attribute_list in secure_context_attribute_list | groupby('runtime_enabled_feature_name') %}
 {% filter runtime_enabled(feature_name) %}
@@ -655,9 +657,11 @@
 {% endfilter %}{# runtime_enabled #}
 {% endfor %}{# secure_context_attribute_list grouped by runtime_enabled #}
 {% endfilter %}{# secure_context #}
-{% endfor %}{# cross_origin_isolated_attribute_list grouped by secure_context_text #}
+{% endfor %}{# direct_socket_isolated_attribute_list grouped by secure_context_text #}
+{% endfilter %}{# direct_socket_enabled #}
+{% endfor %}{# cross_origin_isolated_attribute_list grouped by direct_socket_enabled_test #}
 {% endfilter %}{# cross_origin_isolated #}
-{% endfor %}{# cross_origin_isolated_attribute_list grouped by cross_origin_isolated_test #}
+{% endfor %}{# exposed_attribute_list grouped by cross_origin_isolation_test #}
 {% endfilter %}{# exposed #}
 {% endfor %}{# attributes grouped by exposed_test #}
 {% endmacro %}
@@ -680,13 +684,15 @@
 
 
 {##############################################################################}
-{# This macro installs |attributes_to_install| conditionally based on Exposed, CrossOriginIsolated, SecureContext, and RuntimeEnabled checks. #}
+{# This macro installs |attributes_to_install| conditionally based on Exposed, CrossOriginIsolated, DirectSocketEnabled, SecureContext, and RuntimeEnabled checks. #}
 {% macro install_conditional_interface_objects(attributes_to_install) %}
 {% for exposed_test, exposed_attribute_list in attributes_to_install | groupby('exposed_test') %}
 {% filter exposed(exposed_test) %}
 {% for cross_origin_isolated_test, cross_origin_isolated_attribute_list in exposed_attribute_list | groupby('cross_origin_isolated_test') %}
 {% filter cross_origin_isolated(cross_origin_isolated_test) %}
-{% for secure_context_test, secure_context_attribute_list in cross_origin_isolated_attribute_list | groupby('secure_context_test') %}
+{% for direct_socket_enabled_test, direct_socket_enabled_attribute_list in cross_origin_isolated_attribute_list | groupby('direct_socket_enabled_test') %}
+{% filter direct_socket_enabled(direct_socket_enabled_test) %}
+{% for secure_context_test, secure_context_attribute_list in direct_socket_enabled_attribute_list | groupby('secure_context_test') %}
 {% filter secure_context(secure_context_test) %}
 {% for feature_name, attribute_list in secure_context_attribute_list | groupby('runtime_enabled_feature_name') %}
 {% filter runtime_enabled(feature_name) %}
@@ -694,9 +700,11 @@
 {% endfilter %}{# runtime_enabled #}
 {% endfor %}{# secure_context_attribute_list grouped by runtime_enabled #}
 {% endfilter %}{# secure_context #}
-{% endfor %}{# cross_origin_isolated_attribute_list grouped by secure_context_text #}
+{% endfor %}{# direct_socket_isolated_attribute_list grouped by secure_context_text #}
+{% endfilter %}{# direct_socket_enabled #}
+{% endfor %}{# cross_origin_isolated_attribute_list grouped by direct_socket_enabled_test #}
 {% endfilter %}{# cross_origin_isolated #}
-{% endfor %}{# exposed_attribute_list grouped by cross_origin_isolated_test #}
+{% endfor %}{# exposed_attribute_list grouped by cross_origin_isolation_test #}
 {% endfilter %}{# exposed #}
 {% endfor %}{# attributes grouped by exposed_test #}
 {% endmacro %}
diff --git a/third_party/blink/renderer/bindings/templates/interface_base.cc.tmpl b/third_party/blink/renderer/bindings/templates/interface_base.cc.tmpl
index 233aa3a..8d502128 100644
--- a/third_party/blink/renderer/bindings/templates/interface_base.cc.tmpl
+++ b/third_party/blink/renderer/bindings/templates/interface_base.cc.tmpl
@@ -866,6 +866,9 @@
   {% if feature.needs_cross_origin_isolated %}
   bool is_cross_origin_isolated = (execution_context && execution_context->CrossOriginIsolatedCapability());
   {% endif %}{# needs cross-origin isolated #}
+  {% if feature.needs_direct_socket_enabled %}
+  bool is_direct_socket_enabled = (execution_context && execution_context->DirectSocketCapability());
+  {% endif %}{# needs direct socket enabled #}
   {% if feature.needs_secure_context %}
   bool is_secure_context = (execution_context && execution_context->IsSecureContext());
   {% endif %}{# needs secure context #}
@@ -880,6 +883,16 @@
   {{install_interface_objects(attribute_list, 'instance', 'prototype') | trim | indent(2)}}
   {% endfilter %}
   {% endfor %}
+  {% for direct_socket_enabled_test, attribute_list in feature.attributes | selectattr('is_data_type_property') | groupby('direct_socket_enabled_test') %}
+  {% filter direct_socket_enabled(direct_socket_enabled_test) %}
+  {{install_interface_objects(attribute_list, 'instance', 'prototype') | trim | indent(2)}}
+  {% endfilter %}
+  {% endfor %}
+  {% for direct_socket_enabled_test, attribute_list in feature.attributes | rejectattr('is_data_type_property') | groupby('direct_socket_enabled_test') %}
+  {% filter direct_socket_enabled(direct_socket_enabled_test) %}
+  {{install_interface_objects(attribute_list, 'instance', 'prototype') | trim | indent(2)}}
+  {% endfilter %}
+  {% endfor %}
   {% for secure_context_test, attribute_list in feature.attributes | selectattr('is_data_type_property') | groupby('secure_context_test') %}
   {% filter secure_context(secure_context_test) %}
   {{install_interface_objects(attribute_list, 'instance', 'prototype') | trim | indent(2)}}
@@ -903,6 +916,7 @@
   {% filter exposed(method.exposed_test) %}
   {% filter secure_context(method.secure_context_test) %}
   {% filter cross_origin_isolated(method.cross_origin_isolated_test) %}
+  {% filter direct_socket_enabled(method.direct_socket_enabled_test) %}
   static constexpr V8DOMConfiguration::MethodConfiguration
   k{{method.camel_case_name}}Configurations[] = {
       {{method_configuration(method) | trim | indent(6)}}
@@ -912,6 +926,7 @@
         isolate, world, instance, prototype,
         interface, signature, config);
   }
+  {% endfilter %}{# direct_socket_enabled #}
   {% endfilter %}{# cross_origin_isolated #}
   {% endfilter %}{# secure_context #}
   {% endfilter %}{# exposed_test #}
@@ -1007,6 +1022,9 @@
   {% if has_conditional_coi_attributes or has_conditional_coi_methods %}
   bool is_cross_origin_isolated = (execution_context && execution_context->CrossOriginIsolatedCapability());
   {% endif %}
+  {% if has_conditional_direct_socket_attributes or has_conditional_direct_socket_methods %}
+  bool is_direct_socket_enabled = (execution_context && execution_context->DirectSocketCapability());
+  {% endif %}
 
   {% set attributes_on_instance = conditional_attributes | selectattr('on_instance') | list %}
   {% set methods_on_instance = conditional_methods | selectattr('on_instance') | list %}
diff --git a/third_party/blink/renderer/bindings/templates/methods.cc.tmpl b/third_party/blink/renderer/bindings/templates/methods.cc.tmpl
index 0538b8d28..02c4fd66 100644
--- a/third_party/blink/renderer/bindings/templates/methods.cc.tmpl
+++ b/third_party/blink/renderer/bindings/templates/methods.cc.tmpl
@@ -622,6 +622,9 @@
 {% filter cross_origin_isolated(method.overloads.cross_origin_isolated_test_all
                                 if method.overloads else
                                 method.cross_origin_isolated_test) %}
+{% filter direct_socket_enabled(method.overloads.direct_socket_enabled_test_all
+                                if method.overloads else
+                                method.direct_socket_enabled_test) %}
 {% filter secure_context(method.overloads.secure_context_test_all
                          if method.overloads else
                          method.secure_context_test) %}
@@ -645,6 +648,7 @@
 {% endfilter %}{# runtime_enabled() #}
 {% endfilter %}{# exposed() #}
 {% endfilter %}{# secure_context() #}
+{% endfilter %}{# direct_socket_enabled() #}
 {% endfilter %}{# cross_origin_isolated() #}
 {% endfor %}
 {%- endmacro %}
diff --git a/third_party/blink/renderer/bindings/tests/idls/core/test_interface.idl b/third_party/blink/renderer/bindings/tests/idls/core/test_interface.idl
index 4344032c..0cd9186 100644
--- a/third_party/blink/renderer/bindings/tests/idls/core/test_interface.idl
+++ b/third_party/blink/renderer/bindings/tests/idls/core/test_interface.idl
@@ -162,6 +162,19 @@
     [CrossOriginIsolated,Exposed=Worker,RuntimeEnabled=RuntimeFeature2] void crossOriginIsolatedWorkerExposedRuntimeEnabledMethod();
     [CrossOriginIsolated,Exposed=Worker,RuntimeEnabled=RuntimeFeature2] attribute boolean crossOriginIsolatedWorkerExposedRuntimeEnabledAttribute;
 
+    [DirectSocketEnabled] void directSocketEnabledMethod();
+    [DirectSocketEnabled] attribute boolean directSocketEnabledAttribute;
+    [DirectSocketEnabled,RuntimeEnabled=RuntimeFeature2] void directSocketEnabledRuntimeEnabledMethod();
+    [DirectSocketEnabled,RuntimeEnabled=RuntimeFeature2] attribute boolean directSocketEnabledRuntimeEnabledAttribute;
+    [DirectSocketEnabled,Exposed=Window] void directSocketEnabledWindowExposedMethod();
+    [DirectSocketEnabled,Exposed=Window] attribute boolean directSocketEnabledWindowExposedAttribute;
+    [DirectSocketEnabled,Exposed=Worker] void directSocketEnabledWorkerExposedMethod();
+    [DirectSocketEnabled,Exposed=Worker] attribute boolean directSocketEnabledWorkerExposedAttribute;
+    [DirectSocketEnabled,Exposed=Window,RuntimeEnabled=RuntimeFeature2] void directSocketEnabledWindowExposedRuntimeEnabledMethod();
+    [DirectSocketEnabled,Exposed=Window,RuntimeEnabled=RuntimeFeature2] attribute boolean directSocketEnabledWindowExposedRuntimeEnabledAttribute;
+    [DirectSocketEnabled,Exposed=Worker,RuntimeEnabled=RuntimeFeature2] void directSocketEnabledWorkerExposedRuntimeEnabledMethod();
+    [DirectSocketEnabled,Exposed=Worker,RuntimeEnabled=RuntimeFeature2] attribute boolean directSocketEnabledWorkerExposedRuntimeEnabledAttribute;
+
     // Arguments that are sequences or records of nullable types.
     void methodWithNullableSequences(sequence<double?> numbers, sequence<DOMString?> strings, sequence<Element?> elements, sequence<(double or DOMString)?> unions);
     void methodWithNullableRecords(record<DOMString, double?> numbers, record<DOMString, DOMString?> strings, record<DOMString, Element?> elements, record<DOMString, (double or DOMString)?> unions);
diff --git a/third_party/blink/renderer/bindings/tests/idls/core/test_interface_check_security.idl b/third_party/blink/renderer/bindings/tests/idls/core/test_interface_check_security.idl
index 933d6f8..122636e 100644
--- a/third_party/blink/renderer/bindings/tests/idls/core/test_interface_check_security.idl
+++ b/third_party/blink/renderer/bindings/tests/idls/core/test_interface_check_security.idl
@@ -46,4 +46,5 @@
     [CrossOrigin, RuntimeEnabled=RuntimeFeature] void doNotCheckSecurityVoidOverloadMethod(String argument1, optional long argument2);
     [SecureContext, RuntimeEnabled=RuntimeFeature] void secureContextRuntimeEnabledMethod(String arg);
     [CrossOriginIsolated, RuntimeEnabled=RuntimeFeature] void crossOriginIsolatedRuntimeEnabledMethod(String arg);
+    [DirectSocketEnabled, RuntimeEnabled=RuntimeFeature] void directSocketEnabledRuntimeEnabledMethod(String arg);
 };
diff --git a/third_party/blink/renderer/bindings/tests/idls/core/test_interface_direct_socket_enabled.idl b/third_party/blink/renderer/bindings/tests/idls/core/test_interface_direct_socket_enabled.idl
new file mode 100644
index 0000000..86aa0ad
--- /dev/null
+++ b/third_party/blink/renderer/bindings/tests/idls/core/test_interface_direct_socket_enabled.idl
@@ -0,0 +1,21 @@
+// 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.
+
+[
+    DirectSocketEnabled,
+    Exposed=(Window,Worker)
+] interface TestInterfaceDirectSocketEnabled {
+    void directSocketEnabledMethod();
+    attribute boolean directSocketEnabledAttribute;
+    [RuntimeEnabled=RuntimeFeature2] void directSocketEnabledRuntimeEnabledMethod();
+    [RuntimeEnabled=RuntimeFeature2] attribute boolean directSocketEnabledRuntimeEnabledAttribute;
+    [Exposed=Window] void directSocketEnabledWindowExposedMethod();
+    [Exposed=Window] attribute boolean directSocketEnabledWindowExposedAttribute;
+    [Exposed=Worker] void directSocketEnabledWorkerExposedMethod();
+    [Exposed=Worker] attribute boolean directSocketEnabledWorkerExposedAttribute;
+    [Exposed=Window,RuntimeEnabled=RuntimeFeature2] void directSocketEnabledWindowExposedRuntimeEnabledMethod();
+    [Exposed=Window,RuntimeEnabled=RuntimeFeature2] attribute boolean directSocketEnabledWindowExposedRuntimeEnabledAttribute;
+    [Exposed=Worker,RuntimeEnabled=RuntimeFeature2] void directSocketEnabledWorkerExposedRuntimeEnabledMethod();
+    [Exposed=Worker,RuntimeEnabled=RuntimeFeature2] attribute boolean directSocketEnabledWorkerExposedRuntimeEnabledAttribute;
+};
diff --git a/third_party/blink/renderer/bindings/tests/idls/core/test_interface_partial.idl b/third_party/blink/renderer/bindings/tests/idls/core/test_interface_partial.idl
index f573793..f6039ef7 100644
--- a/third_party/blink/renderer/bindings/tests/idls/core/test_interface_partial.idl
+++ b/third_party/blink/renderer/bindings/tests/idls/core/test_interface_partial.idl
@@ -57,6 +57,7 @@
 
     [SecureContext] attribute long partialSecureContextLongAttribute;
     [CrossOriginIsolated] attribute long partialCrossOriginIsolatedLongAttribute;
+    [DirectSocketEnabled] attribute long partialDirectSocketEnabledLongAttribute;
 
     attribute DOMString -dashed-attribute;
     attribute DOMString -webkit-cased-attribute;
diff --git a/third_party/blink/renderer/bindings/tests/idls/core/test_interface_partial_2.idl b/third_party/blink/renderer/bindings/tests/idls/core/test_interface_partial_2.idl
index 7642d632..1162d2a 100644
--- a/third_party/blink/renderer/bindings/tests/idls/core/test_interface_partial_2.idl
+++ b/third_party/blink/renderer/bindings/tests/idls/core/test_interface_partial_2.idl
@@ -43,4 +43,6 @@
     [SecureContext] attribute boolean partial2SecureContextAttribute;
     [CrossOriginIsolated] void partial2CrossOriginIsolatedMethod();
     [CrossOriginIsolated] attribute boolean partial2CrossOriginIsolatedAttribute;
+    [DirectSocketEnabled] void partial2DirectSocketEnabledMethod();
+    [DirectSocketEnabled] attribute boolean partial2DirectSocketEnabledAttribute;
 };
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface.cc b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface.cc
index c0247e3..ecf5dc08 100644
--- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface.cc
+++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface.cc
@@ -1089,6 +1089,174 @@
   impl->setCrossOriginIsolatedWorkerExposedRuntimeEnabledAttribute(cpp_value);
 }
 
+static void DirectSocketEnabledAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  v8::Local<v8::Object> holder = info.Holder();
+
+  TestInterfaceImplementation* impl = V8TestInterface::ToImpl(holder);
+
+  V8SetReturnValueBool(info, impl->directSocketEnabledAttribute());
+}
+
+static void DirectSocketEnabledAttributeAttributeSetter(
+    v8::Local<v8::Value> v8_value, const v8::FunctionCallbackInfo<v8::Value>& info) {
+  v8::Isolate* isolate = info.GetIsolate();
+  ALLOW_UNUSED_LOCAL(isolate);
+
+  v8::Local<v8::Object> holder = info.Holder();
+  ALLOW_UNUSED_LOCAL(holder);
+
+  TestInterfaceImplementation* impl = V8TestInterface::ToImpl(holder);
+
+  ExceptionState exception_state(isolate, ExceptionState::kSetterContext, "TestInterface", "directSocketEnabledAttribute");
+
+  // Prepare the value to be set.
+  bool cpp_value{ NativeValueTraits<IDLBoolean>::NativeValue(info.GetIsolate(), v8_value, exception_state) };
+  if (exception_state.HadException())
+    return;
+
+  impl->setDirectSocketEnabledAttribute(cpp_value);
+}
+
+static void DirectSocketEnabledRuntimeEnabledAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  v8::Local<v8::Object> holder = info.Holder();
+
+  TestInterfaceImplementation* impl = V8TestInterface::ToImpl(holder);
+
+  V8SetReturnValueBool(info, impl->directSocketEnabledRuntimeEnabledAttribute());
+}
+
+static void DirectSocketEnabledRuntimeEnabledAttributeAttributeSetter(
+    v8::Local<v8::Value> v8_value, const v8::FunctionCallbackInfo<v8::Value>& info) {
+  v8::Isolate* isolate = info.GetIsolate();
+  ALLOW_UNUSED_LOCAL(isolate);
+
+  v8::Local<v8::Object> holder = info.Holder();
+  ALLOW_UNUSED_LOCAL(holder);
+
+  TestInterfaceImplementation* impl = V8TestInterface::ToImpl(holder);
+
+  ExceptionState exception_state(isolate, ExceptionState::kSetterContext, "TestInterface", "directSocketEnabledRuntimeEnabledAttribute");
+
+  // Prepare the value to be set.
+  bool cpp_value{ NativeValueTraits<IDLBoolean>::NativeValue(info.GetIsolate(), v8_value, exception_state) };
+  if (exception_state.HadException())
+    return;
+
+  impl->setDirectSocketEnabledRuntimeEnabledAttribute(cpp_value);
+}
+
+static void DirectSocketEnabledWindowExposedAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  v8::Local<v8::Object> holder = info.Holder();
+
+  TestInterfaceImplementation* impl = V8TestInterface::ToImpl(holder);
+
+  V8SetReturnValueBool(info, impl->directSocketEnabledWindowExposedAttribute());
+}
+
+static void DirectSocketEnabledWindowExposedAttributeAttributeSetter(
+    v8::Local<v8::Value> v8_value, const v8::FunctionCallbackInfo<v8::Value>& info) {
+  v8::Isolate* isolate = info.GetIsolate();
+  ALLOW_UNUSED_LOCAL(isolate);
+
+  v8::Local<v8::Object> holder = info.Holder();
+  ALLOW_UNUSED_LOCAL(holder);
+
+  TestInterfaceImplementation* impl = V8TestInterface::ToImpl(holder);
+
+  ExceptionState exception_state(isolate, ExceptionState::kSetterContext, "TestInterface", "directSocketEnabledWindowExposedAttribute");
+
+  // Prepare the value to be set.
+  bool cpp_value{ NativeValueTraits<IDLBoolean>::NativeValue(info.GetIsolate(), v8_value, exception_state) };
+  if (exception_state.HadException())
+    return;
+
+  impl->setDirectSocketEnabledWindowExposedAttribute(cpp_value);
+}
+
+static void DirectSocketEnabledWorkerExposedAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  v8::Local<v8::Object> holder = info.Holder();
+
+  TestInterfaceImplementation* impl = V8TestInterface::ToImpl(holder);
+
+  V8SetReturnValueBool(info, impl->directSocketEnabledWorkerExposedAttribute());
+}
+
+static void DirectSocketEnabledWorkerExposedAttributeAttributeSetter(
+    v8::Local<v8::Value> v8_value, const v8::FunctionCallbackInfo<v8::Value>& info) {
+  v8::Isolate* isolate = info.GetIsolate();
+  ALLOW_UNUSED_LOCAL(isolate);
+
+  v8::Local<v8::Object> holder = info.Holder();
+  ALLOW_UNUSED_LOCAL(holder);
+
+  TestInterfaceImplementation* impl = V8TestInterface::ToImpl(holder);
+
+  ExceptionState exception_state(isolate, ExceptionState::kSetterContext, "TestInterface", "directSocketEnabledWorkerExposedAttribute");
+
+  // Prepare the value to be set.
+  bool cpp_value{ NativeValueTraits<IDLBoolean>::NativeValue(info.GetIsolate(), v8_value, exception_state) };
+  if (exception_state.HadException())
+    return;
+
+  impl->setDirectSocketEnabledWorkerExposedAttribute(cpp_value);
+}
+
+static void DirectSocketEnabledWindowExposedRuntimeEnabledAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  v8::Local<v8::Object> holder = info.Holder();
+
+  TestInterfaceImplementation* impl = V8TestInterface::ToImpl(holder);
+
+  V8SetReturnValueBool(info, impl->directSocketEnabledWindowExposedRuntimeEnabledAttribute());
+}
+
+static void DirectSocketEnabledWindowExposedRuntimeEnabledAttributeAttributeSetter(
+    v8::Local<v8::Value> v8_value, const v8::FunctionCallbackInfo<v8::Value>& info) {
+  v8::Isolate* isolate = info.GetIsolate();
+  ALLOW_UNUSED_LOCAL(isolate);
+
+  v8::Local<v8::Object> holder = info.Holder();
+  ALLOW_UNUSED_LOCAL(holder);
+
+  TestInterfaceImplementation* impl = V8TestInterface::ToImpl(holder);
+
+  ExceptionState exception_state(isolate, ExceptionState::kSetterContext, "TestInterface", "directSocketEnabledWindowExposedRuntimeEnabledAttribute");
+
+  // Prepare the value to be set.
+  bool cpp_value{ NativeValueTraits<IDLBoolean>::NativeValue(info.GetIsolate(), v8_value, exception_state) };
+  if (exception_state.HadException())
+    return;
+
+  impl->setDirectSocketEnabledWindowExposedRuntimeEnabledAttribute(cpp_value);
+}
+
+static void DirectSocketEnabledWorkerExposedRuntimeEnabledAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  v8::Local<v8::Object> holder = info.Holder();
+
+  TestInterfaceImplementation* impl = V8TestInterface::ToImpl(holder);
+
+  V8SetReturnValueBool(info, impl->directSocketEnabledWorkerExposedRuntimeEnabledAttribute());
+}
+
+static void DirectSocketEnabledWorkerExposedRuntimeEnabledAttributeAttributeSetter(
+    v8::Local<v8::Value> v8_value, const v8::FunctionCallbackInfo<v8::Value>& info) {
+  v8::Isolate* isolate = info.GetIsolate();
+  ALLOW_UNUSED_LOCAL(isolate);
+
+  v8::Local<v8::Object> holder = info.Holder();
+  ALLOW_UNUSED_LOCAL(holder);
+
+  TestInterfaceImplementation* impl = V8TestInterface::ToImpl(holder);
+
+  ExceptionState exception_state(isolate, ExceptionState::kSetterContext, "TestInterface", "directSocketEnabledWorkerExposedRuntimeEnabledAttribute");
+
+  // Prepare the value to be set.
+  bool cpp_value{ NativeValueTraits<IDLBoolean>::NativeValue(info.GetIsolate(), v8_value, exception_state) };
+  if (exception_state.HadException())
+    return;
+
+  impl->setDirectSocketEnabledWorkerExposedRuntimeEnabledAttribute(cpp_value);
+}
+
 static void ScriptStringAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) {
   v8::Local<v8::Object> holder = info.Holder();
 
@@ -1596,6 +1764,34 @@
   TestInterfacePartial::setPartialCrossOriginIsolatedLongAttribute(*impl, cpp_value);
 }
 
+static void PartialDirectSocketEnabledLongAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  v8::Local<v8::Object> holder = info.Holder();
+
+  TestInterfaceImplementation* impl = V8TestInterface::ToImpl(holder);
+
+  V8SetReturnValueInt(info, TestInterfacePartial::partialDirectSocketEnabledLongAttribute(*impl));
+}
+
+static void PartialDirectSocketEnabledLongAttributeAttributeSetter(
+    v8::Local<v8::Value> v8_value, const v8::FunctionCallbackInfo<v8::Value>& info) {
+  v8::Isolate* isolate = info.GetIsolate();
+  ALLOW_UNUSED_LOCAL(isolate);
+
+  v8::Local<v8::Object> holder = info.Holder();
+  ALLOW_UNUSED_LOCAL(holder);
+
+  TestInterfaceImplementation* impl = V8TestInterface::ToImpl(holder);
+
+  ExceptionState exception_state(isolate, ExceptionState::kSetterContext, "TestInterface", "partialDirectSocketEnabledLongAttribute");
+
+  // Prepare the value to be set.
+  int32_t cpp_value{ NativeValueTraits<IDLLong>::NativeValue(info.GetIsolate(), v8_value, exception_state) };
+  if (exception_state.HadException())
+    return;
+
+  TestInterfacePartial::setPartialDirectSocketEnabledLongAttribute(*impl, cpp_value);
+}
+
 static void Dec45DashedDec45AttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) {
   v8::Local<v8::Object> holder = info.Holder();
 
@@ -1780,6 +1976,34 @@
   TestInterfacePartial2Implementation::setPartial2CrossOriginIsolatedAttribute(*impl, cpp_value);
 }
 
+static void Partial2DIrectSocketEnabledAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  v8::Local<v8::Object> holder = info.Holder();
+
+  TestInterfaceImplementation* impl = V8TestInterface::ToImpl(holder);
+
+  V8SetReturnValueBool(info, TestInterfacePartial2Implementation::partial2DirectSocketEnabledAttribute(*impl));
+}
+
+static void Partial2DIrectSocketEnabledAttributeAttributeSetter(
+    v8::Local<v8::Value> v8_value, const v8::FunctionCallbackInfo<v8::Value>& info) {
+  v8::Isolate* isolate = info.GetIsolate();
+  ALLOW_UNUSED_LOCAL(isolate);
+
+  v8::Local<v8::Object> holder = info.Holder();
+  ALLOW_UNUSED_LOCAL(holder);
+
+  TestInterfaceImplementation* impl = V8TestInterface::ToImpl(holder);
+
+  ExceptionState exception_state(isolate, ExceptionState::kSetterContext, "TestInterface", "partial2DirectSocketEnabledAttribute");
+
+  // Prepare the value to be set.
+  bool cpp_value{ NativeValueTraits<IDLBoolean>::NativeValue(info.GetIsolate(), v8_value, exception_state) };
+  if (exception_state.HadException())
+    return;
+
+  TestInterfacePartial2Implementation::setPartial2DirectSocketEnabledAttribute(*impl, cpp_value);
+}
+
 static void PartialSecureContextAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) {
   v8::Local<v8::Object> holder = info.Holder();
 
@@ -2468,6 +2692,42 @@
   impl->crossOriginIsolatedWorkerExposedRuntimeEnabledMethod();
 }
 
+static void DirectSocketEnabledMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  TestInterfaceImplementation* impl = V8TestInterface::ToImpl(info.Holder());
+
+  impl->directSocketEnabledMethod();
+}
+
+static void DirectSocketEnabledRuntimeEnabledMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  TestInterfaceImplementation* impl = V8TestInterface::ToImpl(info.Holder());
+
+  impl->directSocketEnabledRuntimeEnabledMethod();
+}
+
+static void DirectSocketEnabledWindowExposedMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  TestInterfaceImplementation* impl = V8TestInterface::ToImpl(info.Holder());
+
+  impl->directSocketEnabledWindowExposedMethod();
+}
+
+static void DirectSocketEnabledWorkerExposedMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  TestInterfaceImplementation* impl = V8TestInterface::ToImpl(info.Holder());
+
+  impl->directSocketEnabledWorkerExposedMethod();
+}
+
+static void DirectSocketEnabledWindowExposedRuntimeEnabledMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  TestInterfaceImplementation* impl = V8TestInterface::ToImpl(info.Holder());
+
+  impl->directSocketEnabledWindowExposedRuntimeEnabledMethod();
+}
+
+static void DirectSocketEnabledWorkerExposedRuntimeEnabledMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  TestInterfaceImplementation* impl = V8TestInterface::ToImpl(info.Holder());
+
+  impl->directSocketEnabledWorkerExposedRuntimeEnabledMethod();
+}
+
 static void MethodWithNullableSequencesMethod(const v8::FunctionCallbackInfo<v8::Value>& info) {
   ExceptionState exception_state(info.GetIsolate(), ExceptionState::kExecutionContext, "TestInterface", "methodWithNullableSequences");
 
@@ -2735,6 +2995,12 @@
   TestInterfacePartial2Implementation::partial2CrossOriginIsolatedMethod(*impl);
 }
 
+static void Partial2DIrectSocketEnabledMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  TestInterfaceImplementation* impl = V8TestInterface::ToImpl(info.Holder());
+
+  TestInterfacePartial2Implementation::partial2DirectSocketEnabledMethod(*impl);
+}
+
 static void PartialSecureContextMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) {
   TestInterfaceImplementation* impl = V8TestInterface::ToImpl(info.Holder());
 
@@ -3652,6 +3918,96 @@
   test_interface_implementation_v8_internal::CrossOriginIsolatedWorkerExposedRuntimeEnabledAttributeAttributeSetter(v8_value, info);
 }
 
+void V8TestInterface::DirectSocketEnabledAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceImplementation_directSocketEnabledAttribute_Getter");
+
+  test_interface_implementation_v8_internal::DirectSocketEnabledAttributeAttributeGetter(info);
+}
+
+void V8TestInterface::DirectSocketEnabledAttributeAttributeSetterCallback(
+    const v8::FunctionCallbackInfo<v8::Value>& info) {
+  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceImplementation_directSocketEnabledAttribute_Setter");
+
+  v8::Local<v8::Value> v8_value = info[0];
+
+  test_interface_implementation_v8_internal::DirectSocketEnabledAttributeAttributeSetter(v8_value, info);
+}
+
+void V8TestInterface::DirectSocketEnabledRuntimeEnabledAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceImplementation_directSocketEnabledRuntimeEnabledAttribute_Getter");
+
+  test_interface_implementation_v8_internal::DirectSocketEnabledRuntimeEnabledAttributeAttributeGetter(info);
+}
+
+void V8TestInterface::DirectSocketEnabledRuntimeEnabledAttributeAttributeSetterCallback(
+    const v8::FunctionCallbackInfo<v8::Value>& info) {
+  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceImplementation_directSocketEnabledRuntimeEnabledAttribute_Setter");
+
+  v8::Local<v8::Value> v8_value = info[0];
+
+  test_interface_implementation_v8_internal::DirectSocketEnabledRuntimeEnabledAttributeAttributeSetter(v8_value, info);
+}
+
+void V8TestInterface::DirectSocketEnabledWindowExposedAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceImplementation_directSocketEnabledWindowExposedAttribute_Getter");
+
+  test_interface_implementation_v8_internal::DirectSocketEnabledWindowExposedAttributeAttributeGetter(info);
+}
+
+void V8TestInterface::DirectSocketEnabledWindowExposedAttributeAttributeSetterCallback(
+    const v8::FunctionCallbackInfo<v8::Value>& info) {
+  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceImplementation_directSocketEnabledWindowExposedAttribute_Setter");
+
+  v8::Local<v8::Value> v8_value = info[0];
+
+  test_interface_implementation_v8_internal::DirectSocketEnabledWindowExposedAttributeAttributeSetter(v8_value, info);
+}
+
+void V8TestInterface::DirectSocketEnabledWorkerExposedAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceImplementation_directSocketEnabledWorkerExposedAttribute_Getter");
+
+  test_interface_implementation_v8_internal::DirectSocketEnabledWorkerExposedAttributeAttributeGetter(info);
+}
+
+void V8TestInterface::DirectSocketEnabledWorkerExposedAttributeAttributeSetterCallback(
+    const v8::FunctionCallbackInfo<v8::Value>& info) {
+  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceImplementation_directSocketEnabledWorkerExposedAttribute_Setter");
+
+  v8::Local<v8::Value> v8_value = info[0];
+
+  test_interface_implementation_v8_internal::DirectSocketEnabledWorkerExposedAttributeAttributeSetter(v8_value, info);
+}
+
+void V8TestInterface::DirectSocketEnabledWindowExposedRuntimeEnabledAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceImplementation_directSocketEnabledWindowExposedRuntimeEnabledAttribute_Getter");
+
+  test_interface_implementation_v8_internal::DirectSocketEnabledWindowExposedRuntimeEnabledAttributeAttributeGetter(info);
+}
+
+void V8TestInterface::DirectSocketEnabledWindowExposedRuntimeEnabledAttributeAttributeSetterCallback(
+    const v8::FunctionCallbackInfo<v8::Value>& info) {
+  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceImplementation_directSocketEnabledWindowExposedRuntimeEnabledAttribute_Setter");
+
+  v8::Local<v8::Value> v8_value = info[0];
+
+  test_interface_implementation_v8_internal::DirectSocketEnabledWindowExposedRuntimeEnabledAttributeAttributeSetter(v8_value, info);
+}
+
+void V8TestInterface::DirectSocketEnabledWorkerExposedRuntimeEnabledAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceImplementation_directSocketEnabledWorkerExposedRuntimeEnabledAttribute_Getter");
+
+  test_interface_implementation_v8_internal::DirectSocketEnabledWorkerExposedRuntimeEnabledAttributeAttributeGetter(info);
+}
+
+void V8TestInterface::DirectSocketEnabledWorkerExposedRuntimeEnabledAttributeAttributeSetterCallback(
+    const v8::FunctionCallbackInfo<v8::Value>& info) {
+  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceImplementation_directSocketEnabledWorkerExposedRuntimeEnabledAttribute_Setter");
+
+  v8::Local<v8::Value> v8_value = info[0];
+
+  test_interface_implementation_v8_internal::DirectSocketEnabledWorkerExposedRuntimeEnabledAttributeAttributeSetter(v8_value, info);
+}
+
 void V8TestInterface::ScriptStringAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
   RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceImplementation_scriptString_Getter");
 
@@ -3913,6 +4269,21 @@
   test_interface_implementation_v8_internal::PartialCrossOriginIsolatedLongAttributeAttributeSetter(v8_value, info);
 }
 
+void V8TestInterface::PartialDirectSocketEnabledLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceImplementation_partialDirectSocketEnabledLongAttribute_Getter");
+
+  test_interface_implementation_v8_internal::PartialDirectSocketEnabledLongAttributeAttributeGetter(info);
+}
+
+void V8TestInterface::PartialDirectSocketEnabledLongAttributeAttributeSetterCallback(
+    const v8::FunctionCallbackInfo<v8::Value>& info) {
+  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceImplementation_partialDirectSocketEnabledLongAttribute_Setter");
+
+  v8::Local<v8::Value> v8_value = info[0];
+
+  test_interface_implementation_v8_internal::PartialDirectSocketEnabledLongAttributeAttributeSetter(v8_value, info);
+}
+
 void V8TestInterface::Dec45DashedDec45AttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
   RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceImplementation_-dashed-attribute_Getter");
 
@@ -4018,6 +4389,21 @@
   test_interface_implementation_v8_internal::Partial2CrossOriginIsolatedAttributeAttributeSetter(v8_value, info);
 }
 
+void V8TestInterface::Partial2DIrectSocketEnabledAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceImplementation_partial2DirectSocketEnabledAttribute_Getter");
+
+  test_interface_implementation_v8_internal::Partial2DIrectSocketEnabledAttributeAttributeGetter(info);
+}
+
+void V8TestInterface::Partial2DIrectSocketEnabledAttributeAttributeSetterCallback(
+    const v8::FunctionCallbackInfo<v8::Value>& info) {
+  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceImplementation_partial2DirectSocketEnabledAttribute_Setter");
+
+  v8::Local<v8::Value> v8_value = info[0];
+
+  test_interface_implementation_v8_internal::Partial2DIrectSocketEnabledAttributeAttributeSetter(v8_value, info);
+}
+
 void V8TestInterface::PartialSecureContextAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
   RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceImplementation_partialSecureContextAttribute_Getter");
 
@@ -4360,6 +4746,48 @@
   test_interface_implementation_v8_internal::CrossOriginIsolatedWorkerExposedRuntimeEnabledMethodMethod(info);
 }
 
+void V8TestInterface::DirectSocketEnabledMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  BLINK_BINDINGS_TRACE_EVENT("TestInterface.directSocketEnabledMethod");
+  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceImplementation_directSocketEnabledMethod");
+
+  test_interface_implementation_v8_internal::DirectSocketEnabledMethodMethod(info);
+}
+
+void V8TestInterface::DirectSocketEnabledRuntimeEnabledMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  BLINK_BINDINGS_TRACE_EVENT("TestInterface.directSocketEnabledRuntimeEnabledMethod");
+  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceImplementation_directSocketEnabledRuntimeEnabledMethod");
+
+  test_interface_implementation_v8_internal::DirectSocketEnabledRuntimeEnabledMethodMethod(info);
+}
+
+void V8TestInterface::DirectSocketEnabledWindowExposedMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  BLINK_BINDINGS_TRACE_EVENT("TestInterface.directSocketEnabledWindowExposedMethod");
+  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceImplementation_directSocketEnabledWindowExposedMethod");
+
+  test_interface_implementation_v8_internal::DirectSocketEnabledWindowExposedMethodMethod(info);
+}
+
+void V8TestInterface::DirectSocketEnabledWorkerExposedMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  BLINK_BINDINGS_TRACE_EVENT("TestInterface.directSocketEnabledWorkerExposedMethod");
+  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceImplementation_directSocketEnabledWorkerExposedMethod");
+
+  test_interface_implementation_v8_internal::DirectSocketEnabledWorkerExposedMethodMethod(info);
+}
+
+void V8TestInterface::DirectSocketEnabledWindowExposedRuntimeEnabledMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  BLINK_BINDINGS_TRACE_EVENT("TestInterface.directSocketEnabledWindowExposedRuntimeEnabledMethod");
+  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceImplementation_directSocketEnabledWindowExposedRuntimeEnabledMethod");
+
+  test_interface_implementation_v8_internal::DirectSocketEnabledWindowExposedRuntimeEnabledMethodMethod(info);
+}
+
+void V8TestInterface::DirectSocketEnabledWorkerExposedRuntimeEnabledMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  BLINK_BINDINGS_TRACE_EVENT("TestInterface.directSocketEnabledWorkerExposedRuntimeEnabledMethod");
+  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceImplementation_directSocketEnabledWorkerExposedRuntimeEnabledMethod");
+
+  test_interface_implementation_v8_internal::DirectSocketEnabledWorkerExposedRuntimeEnabledMethodMethod(info);
+}
+
 void V8TestInterface::MethodWithNullableSequencesMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
   BLINK_BINDINGS_TRACE_EVENT("TestInterface.methodWithNullableSequences");
   RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceImplementation_methodWithNullableSequences");
@@ -4479,6 +4907,13 @@
   test_interface_implementation_v8_internal::Partial2CrossOriginIsolatedMethodMethod(info);
 }
 
+void V8TestInterface::Partial2DIrectSocketEnabledMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  BLINK_BINDINGS_TRACE_EVENT("TestInterface.partial2DirectSocketEnabledMethod");
+  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceImplementation_partial2DirectSocketEnabledMethod");
+
+  test_interface_implementation_v8_internal::Partial2DIrectSocketEnabledMethodMethod(info);
+}
+
 void V8TestInterface::PartialSecureContextMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
   BLINK_BINDINGS_TRACE_EVENT("TestInterface.partialSecureContextMethod");
   RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceImplementation_partialSecureContextMethod");
@@ -5075,192 +5510,23 @@
   DCHECK(execution_context);
   bool is_secure_context = (execution_context && execution_context->IsSecureContext());
   bool is_cross_origin_isolated = (execution_context && execution_context->CrossOriginIsolatedCapability());
+  bool is_direct_socket_enabled = (execution_context && execution_context->DirectSocketCapability());
 
   if (!prototype_object.IsEmpty() || !interface_object.IsEmpty()) {
-    if (is_secure_context) {
-      static constexpr V8DOMConfiguration::AccessorConfiguration
-      kAccessorConfigurations[] = {
-          { "partial2SecureContextAttribute", V8TestInterface::Partial2SecureContextAttributeAttributeGetterCallback, V8TestInterface::Partial2SecureContextAttributeAttributeSetterCallback, static_cast<unsigned>(V8PrivateProperty::CachedAccessor::kNone), static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds },
-          { "partialSecureContextAttribute", V8TestInterface::PartialSecureContextAttributeAttributeGetterCallback, V8TestInterface::PartialSecureContextAttributeAttributeSetterCallback, static_cast<unsigned>(V8PrivateProperty::CachedAccessor::kNone), static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds },
-          { "secureContextAttribute", V8TestInterface::SecureContextAttributeAttributeGetterCallback, V8TestInterface::SecureContextAttributeAttributeSetterCallback, static_cast<unsigned>(V8PrivateProperty::CachedAccessor::kNone), static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds },
-      };
-      V8DOMConfiguration::InstallAccessors(
-          isolate, world, instance_object, prototype_object, interface_object,
-          signature, kAccessorConfigurations,
-          base::size(kAccessorConfigurations));
-
-      if (RuntimeEnabledFeatures::PartialRuntimeFeatureEnabled()) {
-        static constexpr V8DOMConfiguration::AccessorConfiguration
-        kAccessorConfigurations[] = {
-            { "partialSecureContextLongAttribute", V8TestInterface::PartialSecureContextLongAttributeAttributeGetterCallback, V8TestInterface::PartialSecureContextLongAttributeAttributeSetterCallback, static_cast<unsigned>(V8PrivateProperty::CachedAccessor::kNone), static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds },
-        };
-        V8DOMConfiguration::InstallAccessors(
-            isolate, world, instance_object, prototype_object, interface_object,
-            signature, kAccessorConfigurations,
-            base::size(kAccessorConfigurations));
-      }
-      if (RuntimeEnabledFeatures::SecureFeatureEnabled()) {
-        static constexpr V8DOMConfiguration::AccessorConfiguration
-        kAccessorConfigurations[] = {
-            { "partialSecureContextRuntimeEnabledAttribute", V8TestInterface::PartialSecureContextRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterface::PartialSecureContextRuntimeEnabledAttributeAttributeSetterCallback, static_cast<unsigned>(V8PrivateProperty::CachedAccessor::kNone), static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds },
-            { "secureContextRuntimeEnabledAttribute", V8TestInterface::SecureContextRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterface::SecureContextRuntimeEnabledAttributeAttributeSetterCallback, static_cast<unsigned>(V8PrivateProperty::CachedAccessor::kNone), static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds },
-        };
-        V8DOMConfiguration::InstallAccessors(
-            isolate, world, instance_object, prototype_object, interface_object,
-            signature, kAccessorConfigurations,
-            base::size(kAccessorConfigurations));
-      }
-    }
-    if (is_secure_context || !RuntimeEnabledFeatures::SecureContextnessFeatureEnabled()) {
-      static constexpr V8DOMConfiguration::AccessorConfiguration
-      kAccessorConfigurations[] = {
-          { "secureContextnessRuntimeEnabledAttribute", V8TestInterface::SecureContextnessRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterface::SecureContextnessRuntimeEnabledAttributeAttributeSetterCallback, static_cast<unsigned>(V8PrivateProperty::CachedAccessor::kNone), static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds },
-      };
-      V8DOMConfiguration::InstallAccessors(
-          isolate, world, instance_object, prototype_object, interface_object,
-          signature, kAccessorConfigurations,
-          base::size(kAccessorConfigurations));
+    if (execution_context && (is_direct_socket_enabled)) {
     }
     if (execution_context && (is_cross_origin_isolated)) {
-      static constexpr V8DOMConfiguration::AccessorConfiguration
-      kAccessorConfigurations[] = {
-          { "crossOriginIsolatedAttribute", V8TestInterface::CrossOriginIsolatedAttributeAttributeGetterCallback, V8TestInterface::CrossOriginIsolatedAttributeAttributeSetterCallback, static_cast<unsigned>(V8PrivateProperty::CachedAccessor::kNone), static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds },
-          { "partial2CrossOriginIsolatedAttribute", V8TestInterface::Partial2CrossOriginIsolatedAttributeAttributeGetterCallback, V8TestInterface::Partial2CrossOriginIsolatedAttributeAttributeSetterCallback, static_cast<unsigned>(V8PrivateProperty::CachedAccessor::kNone), static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds },
-      };
-      V8DOMConfiguration::InstallAccessors(
-          isolate, world, instance_object, prototype_object, interface_object,
-          signature, kAccessorConfigurations,
-          base::size(kAccessorConfigurations));
-
-      if (RuntimeEnabledFeatures::PartialRuntimeFeatureEnabled()) {
-        static constexpr V8DOMConfiguration::AccessorConfiguration
-        kAccessorConfigurations[] = {
-            { "partialCrossOriginIsolatedLongAttribute", V8TestInterface::PartialCrossOriginIsolatedLongAttributeAttributeGetterCallback, V8TestInterface::PartialCrossOriginIsolatedLongAttributeAttributeSetterCallback, static_cast<unsigned>(V8PrivateProperty::CachedAccessor::kNone), static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds },
-        };
-        V8DOMConfiguration::InstallAccessors(
-            isolate, world, instance_object, prototype_object, interface_object,
-            signature, kAccessorConfigurations,
-            base::size(kAccessorConfigurations));
-      }
-      if (RuntimeEnabledFeatures::RuntimeFeature2Enabled()) {
-        static constexpr V8DOMConfiguration::AccessorConfiguration
-        kAccessorConfigurations[] = {
-            { "crossOriginIsolatedRuntimeEnabledAttribute", V8TestInterface::CrossOriginIsolatedRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterface::CrossOriginIsolatedRuntimeEnabledAttributeAttributeSetterCallback, static_cast<unsigned>(V8PrivateProperty::CachedAccessor::kNone), static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds },
-        };
-        V8DOMConfiguration::InstallAccessors(
-            isolate, world, instance_object, prototype_object, interface_object,
-            signature, kAccessorConfigurations,
-            base::size(kAccessorConfigurations));
-      }
     }
     if (execution_context && (execution_context->IsWindow())) {
-      static constexpr V8DOMConfiguration::AccessorConfiguration
-      kAccessorConfigurations[] = {
-          { "windowExposedAttribute", V8TestInterface::WindowExposedAttributeAttributeGetterCallback, V8TestInterface::WindowExposedAttributeAttributeSetterCallback, static_cast<unsigned>(V8PrivateProperty::CachedAccessor::kNone), static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds },
-      };
-      V8DOMConfiguration::InstallAccessors(
-          isolate, world, instance_object, prototype_object, interface_object,
-          signature, kAccessorConfigurations,
-          base::size(kAccessorConfigurations));
-
-      if (is_secure_context) {
-        static constexpr V8DOMConfiguration::AccessorConfiguration
-        kAccessorConfigurations[] = {
-            { "partialSecureContextWindowExposedAttribute", V8TestInterface::PartialSecureContextWindowExposedAttributeAttributeGetterCallback, V8TestInterface::PartialSecureContextWindowExposedAttributeAttributeSetterCallback, static_cast<unsigned>(V8PrivateProperty::CachedAccessor::kNone), static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds },
-            { "secureContextWindowExposedAttribute", V8TestInterface::SecureContextWindowExposedAttributeAttributeGetterCallback, V8TestInterface::SecureContextWindowExposedAttributeAttributeSetterCallback, static_cast<unsigned>(V8PrivateProperty::CachedAccessor::kNone), static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds },
-        };
-        V8DOMConfiguration::InstallAccessors(
-            isolate, world, instance_object, prototype_object, interface_object,
-            signature, kAccessorConfigurations,
-            base::size(kAccessorConfigurations));
-
-        if (RuntimeEnabledFeatures::SecureFeatureEnabled()) {
-          static constexpr V8DOMConfiguration::AccessorConfiguration
-          kAccessorConfigurations[] = {
-              { "partialSecureContextWindowExposedRuntimeEnabledAttribute", V8TestInterface::PartialSecureContextWindowExposedRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterface::PartialSecureContextWindowExposedRuntimeEnabledAttributeAttributeSetterCallback, static_cast<unsigned>(V8PrivateProperty::CachedAccessor::kNone), static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds },
-              { "secureContextWindowExposedRuntimeEnabledAttribute", V8TestInterface::SecureContextWindowExposedRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterface::SecureContextWindowExposedRuntimeEnabledAttributeAttributeSetterCallback, static_cast<unsigned>(V8PrivateProperty::CachedAccessor::kNone), static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds },
-          };
-          V8DOMConfiguration::InstallAccessors(
-              isolate, world, instance_object, prototype_object, interface_object,
-              signature, kAccessorConfigurations,
-              base::size(kAccessorConfigurations));
-        }
+      if (execution_context && (is_direct_socket_enabled)) {
       }
       if (execution_context && (is_cross_origin_isolated)) {
-        static constexpr V8DOMConfiguration::AccessorConfiguration
-        kAccessorConfigurations[] = {
-            { "crossOriginIsolatedWindowExposedAttribute", V8TestInterface::CrossOriginIsolatedWindowExposedAttributeAttributeGetterCallback, V8TestInterface::CrossOriginIsolatedWindowExposedAttributeAttributeSetterCallback, static_cast<unsigned>(V8PrivateProperty::CachedAccessor::kNone), static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds },
-        };
-        V8DOMConfiguration::InstallAccessors(
-            isolate, world, instance_object, prototype_object, interface_object,
-            signature, kAccessorConfigurations,
-            base::size(kAccessorConfigurations));
-
-        if (RuntimeEnabledFeatures::RuntimeFeature2Enabled()) {
-          static constexpr V8DOMConfiguration::AccessorConfiguration
-          kAccessorConfigurations[] = {
-              { "crossOriginIsolatedWindowExposedRuntimeEnabledAttribute", V8TestInterface::CrossOriginIsolatedWindowExposedRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterface::CrossOriginIsolatedWindowExposedRuntimeEnabledAttributeAttributeSetterCallback, static_cast<unsigned>(V8PrivateProperty::CachedAccessor::kNone), static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds },
-          };
-          V8DOMConfiguration::InstallAccessors(
-              isolate, world, instance_object, prototype_object, interface_object,
-              signature, kAccessorConfigurations,
-              base::size(kAccessorConfigurations));
-        }
       }
     }
     if (execution_context && (execution_context->IsWorkerGlobalScope())) {
-      static constexpr V8DOMConfiguration::AccessorConfiguration
-      kAccessorConfigurations[] = {
-          { "workerExposedAttribute", V8TestInterface::WorkerExposedAttributeAttributeGetterCallback, V8TestInterface::WorkerExposedAttributeAttributeSetterCallback, static_cast<unsigned>(V8PrivateProperty::CachedAccessor::kNone), static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds },
-      };
-      V8DOMConfiguration::InstallAccessors(
-          isolate, world, instance_object, prototype_object, interface_object,
-          signature, kAccessorConfigurations,
-          base::size(kAccessorConfigurations));
-
-      if (is_secure_context) {
-        static constexpr V8DOMConfiguration::AccessorConfiguration
-        kAccessorConfigurations[] = {
-            { "partialSecureContextWorkerExposedAttribute", V8TestInterface::PartialSecureContextWorkerExposedAttributeAttributeGetterCallback, V8TestInterface::PartialSecureContextWorkerExposedAttributeAttributeSetterCallback, static_cast<unsigned>(V8PrivateProperty::CachedAccessor::kNone), static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds },
-            { "secureContextWorkerExposedAttribute", V8TestInterface::SecureContextWorkerExposedAttributeAttributeGetterCallback, V8TestInterface::SecureContextWorkerExposedAttributeAttributeSetterCallback, static_cast<unsigned>(V8PrivateProperty::CachedAccessor::kNone), static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds },
-        };
-        V8DOMConfiguration::InstallAccessors(
-            isolate, world, instance_object, prototype_object, interface_object,
-            signature, kAccessorConfigurations,
-            base::size(kAccessorConfigurations));
-
-        if (RuntimeEnabledFeatures::SecureFeatureEnabled()) {
-          static constexpr V8DOMConfiguration::AccessorConfiguration
-          kAccessorConfigurations[] = {
-              { "partialSecureContextWorkerExposedRuntimeEnabledAttribute", V8TestInterface::PartialSecureContextWorkerExposedRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterface::PartialSecureContextWorkerExposedRuntimeEnabledAttributeAttributeSetterCallback, static_cast<unsigned>(V8PrivateProperty::CachedAccessor::kNone), static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds },
-              { "secureContextWorkerExposedRuntimeEnabledAttribute", V8TestInterface::SecureContextWorkerExposedRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterface::SecureContextWorkerExposedRuntimeEnabledAttributeAttributeSetterCallback, static_cast<unsigned>(V8PrivateProperty::CachedAccessor::kNone), static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds },
-          };
-          V8DOMConfiguration::InstallAccessors(
-              isolate, world, instance_object, prototype_object, interface_object,
-              signature, kAccessorConfigurations,
-              base::size(kAccessorConfigurations));
-        }
+      if (execution_context && (is_direct_socket_enabled)) {
       }
       if (execution_context && (is_cross_origin_isolated)) {
-        static constexpr V8DOMConfiguration::AccessorConfiguration
-        kAccessorConfigurations[] = {
-            { "crossOriginIsolatedWorkerExposedAttribute", V8TestInterface::CrossOriginIsolatedWorkerExposedAttributeAttributeGetterCallback, V8TestInterface::CrossOriginIsolatedWorkerExposedAttributeAttributeSetterCallback, static_cast<unsigned>(V8PrivateProperty::CachedAccessor::kNone), static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds },
-        };
-        V8DOMConfiguration::InstallAccessors(
-            isolate, world, instance_object, prototype_object, interface_object,
-            signature, kAccessorConfigurations,
-            base::size(kAccessorConfigurations));
-
-        if (RuntimeEnabledFeatures::RuntimeFeature2Enabled()) {
-          static constexpr V8DOMConfiguration::AccessorConfiguration
-          kAccessorConfigurations[] = {
-              { "crossOriginIsolatedWorkerExposedRuntimeEnabledAttribute", V8TestInterface::CrossOriginIsolatedWorkerExposedRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterface::CrossOriginIsolatedWorkerExposedRuntimeEnabledAttributeAttributeSetterCallback, static_cast<unsigned>(V8PrivateProperty::CachedAccessor::kNone), static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds },
-          };
-          V8DOMConfiguration::InstallAccessors(
-              isolate, world, instance_object, prototype_object, interface_object,
-              signature, kAccessorConfigurations,
-              base::size(kAccessorConfigurations));
-        }
       }
     }
     if (execution_context && (execution_context->IsWorkerGlobalScope())) {
@@ -5540,6 +5806,98 @@
         }
       }
     }
+    if (execution_context && (is_direct_socket_enabled)) {
+      {
+        // Install directSocketEnabledMethod configuration
+        const V8DOMConfiguration::MethodConfiguration kConfigurations[] = {
+            {"directSocketEnabledMethod", V8TestInterface::DirectSocketEnabledMethodMethodCallback, 0, v8::None, V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kDoNotCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds}
+        };
+        for (const auto& config : kConfigurations) {
+          V8DOMConfiguration::InstallMethod(
+              isolate, world, instance_object, prototype_object,
+              interface_object, signature, config);
+        }
+      }
+    }
+    if (execution_context && (is_direct_socket_enabled)) {
+      if (RuntimeEnabledFeatures::RuntimeFeature2Enabled()) {
+        {
+          // Install directSocketEnabledRuntimeEnabledMethod configuration
+          const V8DOMConfiguration::MethodConfiguration kConfigurations[] = {
+              {"directSocketEnabledRuntimeEnabledMethod", V8TestInterface::DirectSocketEnabledRuntimeEnabledMethodMethodCallback, 0, v8::None, V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kDoNotCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds}
+          };
+          for (const auto& config : kConfigurations) {
+            V8DOMConfiguration::InstallMethod(
+                isolate, world, instance_object, prototype_object,
+                interface_object, signature, config);
+          }
+        }
+      }
+    }
+    if (execution_context && (is_direct_socket_enabled)) {
+      if (execution_context && (execution_context->IsWindow())) {
+        {
+          // Install directSocketEnabledWindowExposedMethod configuration
+          const V8DOMConfiguration::MethodConfiguration kConfigurations[] = {
+              {"directSocketEnabledWindowExposedMethod", V8TestInterface::DirectSocketEnabledWindowExposedMethodMethodCallback, 0, v8::None, V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kDoNotCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds}
+          };
+          for (const auto& config : kConfigurations) {
+            V8DOMConfiguration::InstallMethod(
+                isolate, world, instance_object, prototype_object,
+                interface_object, signature, config);
+          }
+        }
+      }
+    }
+    if (execution_context && (is_direct_socket_enabled)) {
+      if (execution_context && (execution_context->IsWorkerGlobalScope())) {
+        {
+          // Install directSocketEnabledWorkerExposedMethod configuration
+          const V8DOMConfiguration::MethodConfiguration kConfigurations[] = {
+              {"directSocketEnabledWorkerExposedMethod", V8TestInterface::DirectSocketEnabledWorkerExposedMethodMethodCallback, 0, v8::None, V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kDoNotCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds}
+          };
+          for (const auto& config : kConfigurations) {
+            V8DOMConfiguration::InstallMethod(
+                isolate, world, instance_object, prototype_object,
+                interface_object, signature, config);
+          }
+        }
+      }
+    }
+    if (execution_context && (is_direct_socket_enabled)) {
+      if (execution_context && (execution_context->IsWindow())) {
+        if (RuntimeEnabledFeatures::RuntimeFeature2Enabled()) {
+          {
+            // Install directSocketEnabledWindowExposedRuntimeEnabledMethod configuration
+            const V8DOMConfiguration::MethodConfiguration kConfigurations[] = {
+                {"directSocketEnabledWindowExposedRuntimeEnabledMethod", V8TestInterface::DirectSocketEnabledWindowExposedRuntimeEnabledMethodMethodCallback, 0, v8::None, V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kDoNotCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds}
+            };
+            for (const auto& config : kConfigurations) {
+              V8DOMConfiguration::InstallMethod(
+                  isolate, world, instance_object, prototype_object,
+                  interface_object, signature, config);
+            }
+          }
+        }
+      }
+    }
+    if (execution_context && (is_direct_socket_enabled)) {
+      if (execution_context && (execution_context->IsWorkerGlobalScope())) {
+        if (RuntimeEnabledFeatures::RuntimeFeature2Enabled()) {
+          {
+            // Install directSocketEnabledWorkerExposedRuntimeEnabledMethod configuration
+            const V8DOMConfiguration::MethodConfiguration kConfigurations[] = {
+                {"directSocketEnabledWorkerExposedRuntimeEnabledMethod", V8TestInterface::DirectSocketEnabledWorkerExposedRuntimeEnabledMethodMethodCallback, 0, v8::None, V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kDoNotCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds}
+            };
+            for (const auto& config : kConfigurations) {
+              V8DOMConfiguration::InstallMethod(
+                  isolate, world, instance_object, prototype_object,
+                  interface_object, signature, config);
+            }
+          }
+        }
+      }
+    }
     if (is_secure_context) {
       {
         // Install partial2SecureContextMethod configuration
@@ -5566,6 +5924,19 @@
         }
       }
     }
+    if (execution_context && (is_direct_socket_enabled)) {
+      {
+        // Install partial2DirectSocketEnabledMethod configuration
+        const V8DOMConfiguration::MethodConfiguration kConfigurations[] = {
+            {"partial2DirectSocketEnabledMethod", V8TestInterface::Partial2DIrectSocketEnabledMethodMethodCallback, 0, v8::None, V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kDoNotCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds}
+        };
+        for (const auto& config : kConfigurations) {
+          V8DOMConfiguration::InstallMethod(
+              isolate, world, instance_object, prototype_object,
+              interface_object, signature, config);
+        }
+      }
+    }
     if (is_secure_context) {
       {
         // Install partialSecureContextMethod configuration
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface.h b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface.h
index ef529f8..422ee119 100644
--- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface.h
+++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface.h
@@ -151,6 +151,18 @@
   CORE_EXPORT static void CrossOriginIsolatedWindowExposedRuntimeEnabledAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
   CORE_EXPORT static void CrossOriginIsolatedWorkerExposedRuntimeEnabledAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
   CORE_EXPORT static void CrossOriginIsolatedWorkerExposedRuntimeEnabledAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
+  CORE_EXPORT static void DirectSocketEnabledAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
+  CORE_EXPORT static void DirectSocketEnabledAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
+  CORE_EXPORT static void DirectSocketEnabledRuntimeEnabledAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
+  CORE_EXPORT static void DirectSocketEnabledRuntimeEnabledAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
+  CORE_EXPORT static void DirectSocketEnabledWindowExposedAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
+  CORE_EXPORT static void DirectSocketEnabledWindowExposedAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
+  CORE_EXPORT static void DirectSocketEnabledWorkerExposedAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
+  CORE_EXPORT static void DirectSocketEnabledWorkerExposedAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
+  CORE_EXPORT static void DirectSocketEnabledWindowExposedRuntimeEnabledAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
+  CORE_EXPORT static void DirectSocketEnabledWindowExposedRuntimeEnabledAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
+  CORE_EXPORT static void DirectSocketEnabledWorkerExposedRuntimeEnabledAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
+  CORE_EXPORT static void DirectSocketEnabledWorkerExposedRuntimeEnabledAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
   CORE_EXPORT static void ScriptStringAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
   CORE_EXPORT static void ScriptStringAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
   CORE_EXPORT static void HTMLStringAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
@@ -186,6 +198,8 @@
   CORE_EXPORT static void PartialSecureContextLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
   CORE_EXPORT static void PartialCrossOriginIsolatedLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
   CORE_EXPORT static void PartialCrossOriginIsolatedLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
+  CORE_EXPORT static void PartialDirectSocketEnabledLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
+  CORE_EXPORT static void PartialDirectSocketEnabledLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
   CORE_EXPORT static void Dec45DashedDec45AttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
   CORE_EXPORT static void Dec45DashedDec45AttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
   CORE_EXPORT static void Dec45WebkitDec45CasedDec45AttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
@@ -200,6 +214,8 @@
   CORE_EXPORT static void Partial2SecureContextAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
   CORE_EXPORT static void Partial2CrossOriginIsolatedAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
   CORE_EXPORT static void Partial2CrossOriginIsolatedAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
+  CORE_EXPORT static void Partial2DIrectSocketEnabledAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
+  CORE_EXPORT static void Partial2DIrectSocketEnabledAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
   CORE_EXPORT static void PartialSecureContextAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
   CORE_EXPORT static void PartialSecureContextAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
   CORE_EXPORT static void PartialSecureContextRuntimeEnabledAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
@@ -249,6 +265,12 @@
   CORE_EXPORT static void CrossOriginIsolatedWorkerExposedMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>&);
   CORE_EXPORT static void CrossOriginIsolatedWindowExposedRuntimeEnabledMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>&);
   CORE_EXPORT static void CrossOriginIsolatedWorkerExposedRuntimeEnabledMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>&);
+  CORE_EXPORT static void DirectSocketEnabledMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>&);
+  CORE_EXPORT static void DirectSocketEnabledRuntimeEnabledMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>&);
+  CORE_EXPORT static void DirectSocketEnabledWindowExposedMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>&);
+  CORE_EXPORT static void DirectSocketEnabledWorkerExposedMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>&);
+  CORE_EXPORT static void DirectSocketEnabledWindowExposedRuntimeEnabledMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>&);
+  CORE_EXPORT static void DirectSocketEnabledWorkerExposedRuntimeEnabledMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>&);
   CORE_EXPORT static void MethodWithNullableSequencesMethodCallback(const v8::FunctionCallbackInfo<v8::Value>&);
   CORE_EXPORT static void MethodWithNullableRecordsMethodCallback(const v8::FunctionCallbackInfo<v8::Value>&);
   CORE_EXPORT static void SetTimeoutForScriptMethodCallback(const v8::FunctionCallbackInfo<v8::Value>&);
@@ -266,6 +288,7 @@
   CORE_EXPORT static void PartialVoidMethodPartialCallbackTypeArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>&);
   CORE_EXPORT static void Partial2SecureContextMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>&);
   CORE_EXPORT static void Partial2CrossOriginIsolatedMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>&);
+  CORE_EXPORT static void Partial2DIrectSocketEnabledMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>&);
   CORE_EXPORT static void PartialSecureContextMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>&);
   CORE_EXPORT static void PartialSecureContextRuntimeEnabledMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>&);
   CORE_EXPORT static void PartialSecureContextWindowExposedMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>&);
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_check_security.cc b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_check_security.cc
index 6e321839..56702f4 100644
--- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_check_security.cc
+++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_check_security.cc
@@ -479,6 +479,24 @@
   impl->crossOriginIsolatedRuntimeEnabledMethod(arg);
 }
 
+static void DirectSocketEnabledRuntimeEnabledMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  ExceptionState exception_state(info.GetIsolate(), ExceptionState::kExecutionContext, "TestInterfaceCheckSecurity", "directSocketEnabledRuntimeEnabledMethod");
+
+  TestInterfaceCheckSecurity* impl = V8TestInterfaceCheckSecurity::ToImpl(info.Holder());
+
+  if (UNLIKELY(info.Length() < 1)) {
+    exception_state.ThrowTypeError(ExceptionMessages::NotEnoughArguments(1, info.Length()));
+    return;
+  }
+
+  V8StringResource<> arg;
+  arg = info[0];
+  if (!arg.Prepare())
+    return;
+
+  impl->directSocketEnabledRuntimeEnabledMethod(arg);
+}
+
 static const struct {
   using GetterCallback = void(*)(const v8::PropertyCallbackInfo<v8::Value>&);
   using SetterCallback = void(*)(v8::Local<v8::Value>, const V8CrossOriginCallbackInfo&);
@@ -670,6 +688,13 @@
   test_interface_check_security_v8_internal::CrossOriginIsolatedRuntimeEnabledMethodMethod(info);
 }
 
+void V8TestInterfaceCheckSecurity::DirectSocketEnabledRuntimeEnabledMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  BLINK_BINDINGS_TRACE_EVENT("TestInterfaceCheckSecurity.directSocketEnabledRuntimeEnabledMethod");
+  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceCheckSecurity_directSocketEnabledRuntimeEnabledMethod");
+
+  test_interface_check_security_v8_internal::DirectSocketEnabledRuntimeEnabledMethodMethod(info);
+}
+
 bool V8TestInterfaceCheckSecurity::SecurityCheck(v8::Local<v8::Context> accessing_context, v8::Local<v8::Object> accessed_object, v8::Local<v8::Value> data) {
   #error "Unexpected security check for interface TestInterfaceCheckSecurity"
 }
@@ -938,6 +963,7 @@
   DCHECK(execution_context);
   bool is_secure_context = (execution_context && execution_context->IsSecureContext());
   bool is_cross_origin_isolated = (execution_context && execution_context->CrossOriginIsolatedCapability());
+  bool is_direct_socket_enabled = (execution_context && execution_context->DirectSocketCapability());
 
   if (!instance_object.IsEmpty()) {
     if (is_secure_context) {
@@ -970,6 +996,21 @@
         }
       }
     }
+    if (execution_context && (is_direct_socket_enabled)) {
+      if (RuntimeEnabledFeatures::RuntimeFeatureEnabled()) {
+        {
+          // Install directSocketEnabledRuntimeEnabledMethod configuration
+          const V8DOMConfiguration::MethodConfiguration kConfigurations[] = {
+              {"directSocketEnabledRuntimeEnabledMethod", V8TestInterfaceCheckSecurity::DirectSocketEnabledRuntimeEnabledMethodMethodCallback, 1, v8::None, V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds}
+          };
+          for (const auto& config : kConfigurations) {
+            V8DOMConfiguration::InstallMethod(
+                isolate, world, instance_object, prototype_object,
+                interface_object, signature, config);
+          }
+        }
+      }
+    }
   }
 }
 
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_check_security.h b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_check_security.h
index 0114474..ec3d45e 100644
--- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_check_security.h
+++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_check_security.h
@@ -76,6 +76,7 @@
   CORE_EXPORT static void DoNotCheckSecurityVoidOverloadMethodOriginSafeMethodGetterCallback(v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Value>&);
   CORE_EXPORT static void SecureContextRuntimeEnabledMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>&);
   CORE_EXPORT static void CrossOriginIsolatedRuntimeEnabledMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>&);
+  CORE_EXPORT static void DirectSocketEnabledRuntimeEnabledMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>&);
 
   CORE_EXPORT static bool SecurityCheck(v8::Local<v8::Context>, v8::Local<v8::Object>, v8::Local<v8::Value>);
   CORE_EXPORT static void CrossOriginNamedGetter(v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Value>&);
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_conditional_secure_context.cc b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_conditional_secure_context.cc
index 0fd9185..e7748e2 100644
--- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_conditional_secure_context.cc
+++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_conditional_secure_context.cc
@@ -484,72 +484,9 @@
   bool is_secure_context = (execution_context && execution_context->IsSecureContext());
 
   if (!prototype_object.IsEmpty() || !interface_object.IsEmpty()) {
-    if (is_secure_context || !RuntimeEnabledFeatures::SecureContextnessFeatureEnabled()) {
-      static constexpr V8DOMConfiguration::AccessorConfiguration
-      kAccessorConfigurations[] = {
-          { "secureContextAttribute", V8TestInterfaceConditionalSecureContext::SecureContextAttributeAttributeGetterCallback, V8TestInterfaceConditionalSecureContext::SecureContextAttributeAttributeSetterCallback, static_cast<unsigned>(V8PrivateProperty::CachedAccessor::kNone), static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds },
-      };
-      V8DOMConfiguration::InstallAccessors(
-          isolate, world, instance_object, prototype_object, interface_object,
-          signature, kAccessorConfigurations,
-          base::size(kAccessorConfigurations));
-
-      if (RuntimeEnabledFeatures::SecureFeatureEnabled()) {
-        static constexpr V8DOMConfiguration::AccessorConfiguration
-        kAccessorConfigurations[] = {
-            { "secureContextRuntimeEnabledAttribute", V8TestInterfaceConditionalSecureContext::SecureContextRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterfaceConditionalSecureContext::SecureContextRuntimeEnabledAttributeAttributeSetterCallback, static_cast<unsigned>(V8PrivateProperty::CachedAccessor::kNone), static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds },
-        };
-        V8DOMConfiguration::InstallAccessors(
-            isolate, world, instance_object, prototype_object, interface_object,
-            signature, kAccessorConfigurations,
-            base::size(kAccessorConfigurations));
-      }
-    }
     if (execution_context && (execution_context->IsWindow())) {
-      if (is_secure_context || !RuntimeEnabledFeatures::SecureContextnessFeatureEnabled()) {
-        static constexpr V8DOMConfiguration::AccessorConfiguration
-        kAccessorConfigurations[] = {
-            { "secureContextWindowExposedAttribute", V8TestInterfaceConditionalSecureContext::SecureContextWindowExposedAttributeAttributeGetterCallback, V8TestInterfaceConditionalSecureContext::SecureContextWindowExposedAttributeAttributeSetterCallback, static_cast<unsigned>(V8PrivateProperty::CachedAccessor::kNone), static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds },
-        };
-        V8DOMConfiguration::InstallAccessors(
-            isolate, world, instance_object, prototype_object, interface_object,
-            signature, kAccessorConfigurations,
-            base::size(kAccessorConfigurations));
-
-        if (RuntimeEnabledFeatures::SecureFeatureEnabled()) {
-          static constexpr V8DOMConfiguration::AccessorConfiguration
-          kAccessorConfigurations[] = {
-              { "secureContextWindowExposedRuntimeEnabledAttribute", V8TestInterfaceConditionalSecureContext::SecureContextWindowExposedRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterfaceConditionalSecureContext::SecureContextWindowExposedRuntimeEnabledAttributeAttributeSetterCallback, static_cast<unsigned>(V8PrivateProperty::CachedAccessor::kNone), static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds },
-          };
-          V8DOMConfiguration::InstallAccessors(
-              isolate, world, instance_object, prototype_object, interface_object,
-              signature, kAccessorConfigurations,
-              base::size(kAccessorConfigurations));
-        }
-      }
     }
     if (execution_context && (execution_context->IsWorkerGlobalScope())) {
-      if (is_secure_context || !RuntimeEnabledFeatures::SecureContextnessFeatureEnabled()) {
-        static constexpr V8DOMConfiguration::AccessorConfiguration
-        kAccessorConfigurations[] = {
-            { "secureContextWorkerExposedAttribute", V8TestInterfaceConditionalSecureContext::SecureContextWorkerExposedAttributeAttributeGetterCallback, V8TestInterfaceConditionalSecureContext::SecureContextWorkerExposedAttributeAttributeSetterCallback, static_cast<unsigned>(V8PrivateProperty::CachedAccessor::kNone), static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds },
-        };
-        V8DOMConfiguration::InstallAccessors(
-            isolate, world, instance_object, prototype_object, interface_object,
-            signature, kAccessorConfigurations,
-            base::size(kAccessorConfigurations));
-
-        if (RuntimeEnabledFeatures::SecureFeatureEnabled()) {
-          static constexpr V8DOMConfiguration::AccessorConfiguration
-          kAccessorConfigurations[] = {
-              { "secureContextWorkerExposedRuntimeEnabledAttribute", V8TestInterfaceConditionalSecureContext::SecureContextWorkerExposedRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterfaceConditionalSecureContext::SecureContextWorkerExposedRuntimeEnabledAttributeAttributeSetterCallback, static_cast<unsigned>(V8PrivateProperty::CachedAccessor::kNone), static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds },
-          };
-          V8DOMConfiguration::InstallAccessors(
-              isolate, world, instance_object, prototype_object, interface_object,
-              signature, kAccessorConfigurations,
-              base::size(kAccessorConfigurations));
-        }
-      }
     }
     if (is_secure_context || !RuntimeEnabledFeatures::SecureContextnessFeatureEnabled()) {
       {
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_cross_origin_isolated.cc b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_cross_origin_isolated.cc
index 184379a..46fa8483 100644
--- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_cross_origin_isolated.cc
+++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_cross_origin_isolated.cc
@@ -485,70 +485,13 @@
 
   if (!prototype_object.IsEmpty() || !interface_object.IsEmpty()) {
     if (execution_context && (is_cross_origin_isolated)) {
-      static constexpr V8DOMConfiguration::AccessorConfiguration
-      kAccessorConfigurations[] = {
-          { "crossOriginIsolatedAttribute", V8TestInterfaceCrossOriginIsolated::CrossOriginIsolatedAttributeAttributeGetterCallback, V8TestInterfaceCrossOriginIsolated::CrossOriginIsolatedAttributeAttributeSetterCallback, static_cast<unsigned>(V8PrivateProperty::CachedAccessor::kNone), static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds },
-      };
-      V8DOMConfiguration::InstallAccessors(
-          isolate, world, instance_object, prototype_object, interface_object,
-          signature, kAccessorConfigurations,
-          base::size(kAccessorConfigurations));
-
-      if (RuntimeEnabledFeatures::RuntimeFeature2Enabled()) {
-        static constexpr V8DOMConfiguration::AccessorConfiguration
-        kAccessorConfigurations[] = {
-            { "crossOriginIsolatedRuntimeEnabledAttribute", V8TestInterfaceCrossOriginIsolated::CrossOriginIsolatedRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterfaceCrossOriginIsolated::CrossOriginIsolatedRuntimeEnabledAttributeAttributeSetterCallback, static_cast<unsigned>(V8PrivateProperty::CachedAccessor::kNone), static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds },
-        };
-        V8DOMConfiguration::InstallAccessors(
-            isolate, world, instance_object, prototype_object, interface_object,
-            signature, kAccessorConfigurations,
-            base::size(kAccessorConfigurations));
-      }
     }
     if (execution_context && (execution_context->IsWindow())) {
       if (execution_context && (is_cross_origin_isolated)) {
-        static constexpr V8DOMConfiguration::AccessorConfiguration
-        kAccessorConfigurations[] = {
-            { "crossOriginIsolatedWindowExposedAttribute", V8TestInterfaceCrossOriginIsolated::CrossOriginIsolatedWindowExposedAttributeAttributeGetterCallback, V8TestInterfaceCrossOriginIsolated::CrossOriginIsolatedWindowExposedAttributeAttributeSetterCallback, static_cast<unsigned>(V8PrivateProperty::CachedAccessor::kNone), static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds },
-        };
-        V8DOMConfiguration::InstallAccessors(
-            isolate, world, instance_object, prototype_object, interface_object,
-            signature, kAccessorConfigurations,
-            base::size(kAccessorConfigurations));
-
-        if (RuntimeEnabledFeatures::RuntimeFeature2Enabled()) {
-          static constexpr V8DOMConfiguration::AccessorConfiguration
-          kAccessorConfigurations[] = {
-              { "crossOriginIsolatedWindowExposedRuntimeEnabledAttribute", V8TestInterfaceCrossOriginIsolated::CrossOriginIsolatedWindowExposedRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterfaceCrossOriginIsolated::CrossOriginIsolatedWindowExposedRuntimeEnabledAttributeAttributeSetterCallback, static_cast<unsigned>(V8PrivateProperty::CachedAccessor::kNone), static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds },
-          };
-          V8DOMConfiguration::InstallAccessors(
-              isolate, world, instance_object, prototype_object, interface_object,
-              signature, kAccessorConfigurations,
-              base::size(kAccessorConfigurations));
-        }
       }
     }
     if (execution_context && (execution_context->IsWorkerGlobalScope())) {
       if (execution_context && (is_cross_origin_isolated)) {
-        static constexpr V8DOMConfiguration::AccessorConfiguration
-        kAccessorConfigurations[] = {
-            { "crossOriginIsolatedWorkerExposedAttribute", V8TestInterfaceCrossOriginIsolated::CrossOriginIsolatedWorkerExposedAttributeAttributeGetterCallback, V8TestInterfaceCrossOriginIsolated::CrossOriginIsolatedWorkerExposedAttributeAttributeSetterCallback, static_cast<unsigned>(V8PrivateProperty::CachedAccessor::kNone), static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds },
-        };
-        V8DOMConfiguration::InstallAccessors(
-            isolate, world, instance_object, prototype_object, interface_object,
-            signature, kAccessorConfigurations,
-            base::size(kAccessorConfigurations));
-
-        if (RuntimeEnabledFeatures::RuntimeFeature2Enabled()) {
-          static constexpr V8DOMConfiguration::AccessorConfiguration
-          kAccessorConfigurations[] = {
-              { "crossOriginIsolatedWorkerExposedRuntimeEnabledAttribute", V8TestInterfaceCrossOriginIsolated::CrossOriginIsolatedWorkerExposedRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterfaceCrossOriginIsolated::CrossOriginIsolatedWorkerExposedRuntimeEnabledAttributeAttributeSetterCallback, static_cast<unsigned>(V8PrivateProperty::CachedAccessor::kNone), static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds },
-          };
-          V8DOMConfiguration::InstallAccessors(
-              isolate, world, instance_object, prototype_object, interface_object,
-              signature, kAccessorConfigurations,
-              base::size(kAccessorConfigurations));
-        }
       }
     }
     if (execution_context && (is_cross_origin_isolated)) {
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_direct_socket_enabled.cc b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_direct_socket_enabled.cc
new file mode 100644
index 0000000..b282820
--- /dev/null
+++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_direct_socket_enabled.cc
@@ -0,0 +1,592 @@
+// 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.
+
+// This file has been auto-generated from the Jinja2 template
+// third_party/blink/renderer/bindings/templates/interface.cc.tmpl
+// by the script code_generator_v8.py.
+// DO NOT MODIFY!
+
+// clang-format off
+#include "third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_direct_socket_enabled.h"
+
+#include <algorithm>
+
+#include "base/memory/scoped_refptr.h"
+#include "third_party/blink/renderer/bindings/core/v8/idl_types.h"
+#include "third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h"
+#include "third_party/blink/renderer/bindings/core/v8/v8_dom_configuration.h"
+#include "third_party/blink/renderer/core/execution_context/execution_context.h"
+#include "third_party/blink/renderer/platform/bindings/exception_messages.h"
+#include "third_party/blink/renderer/platform/bindings/exception_state.h"
+#include "third_party/blink/renderer/platform/bindings/runtime_call_stats.h"
+#include "third_party/blink/renderer/platform/bindings/v8_object_constructor.h"
+#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
+#include "third_party/blink/renderer/platform/scheduler/public/cooperative_scheduling_manager.h"
+#include "third_party/blink/renderer/platform/wtf/get_ptr.h"
+
+namespace blink {
+
+// Suppress warning: global constructors, because struct WrapperTypeInfo is trivial
+// and does not depend on another global objects.
+#if defined(COMPONENT_BUILD) && defined(WIN32) && defined(__clang__)
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wglobal-constructors"
+#endif
+const WrapperTypeInfo v8_test_interface_direct_socket_enabled_wrapper_type_info = {
+    gin::kEmbedderBlink,
+    V8TestInterfaceDirectSocketEnabled::DomTemplate,
+    V8TestInterfaceDirectSocketEnabled::InstallConditionalFeatures,
+    "TestInterfaceDirectSocketEnabled",
+    nullptr,
+    WrapperTypeInfo::kWrapperTypeObjectPrototype,
+    WrapperTypeInfo::kObjectClassId,
+    WrapperTypeInfo::kNotInheritFromActiveScriptWrappable,
+};
+#if defined(COMPONENT_BUILD) && defined(WIN32) && defined(__clang__)
+#pragma clang diagnostic pop
+#endif
+
+// This static member must be declared by DEFINE_WRAPPERTYPEINFO in TestInterfaceDirectSocketEnabled.h.
+// For details, see the comment of DEFINE_WRAPPERTYPEINFO in
+// platform/bindings/ScriptWrappable.h.
+const WrapperTypeInfo& TestInterfaceDirectSocketEnabled::wrapper_type_info_ = v8_test_interface_direct_socket_enabled_wrapper_type_info;
+
+// not [ActiveScriptWrappable]
+static_assert(
+    !std::is_base_of<ActiveScriptWrappableBase, TestInterfaceDirectSocketEnabled>::value,
+    "TestInterfaceDirectSocketEnabled inherits from ActiveScriptWrappable<>, but is not specifying "
+    "[ActiveScriptWrappable] extended attribute in the IDL file.  "
+    "Be consistent.");
+static_assert(
+    std::is_same<decltype(&TestInterfaceDirectSocketEnabled::HasPendingActivity),
+                 decltype(&ScriptWrappable::HasPendingActivity)>::value,
+    "TestInterfaceDirectSocketEnabled is overriding hasPendingActivity(), but is not specifying "
+    "[ActiveScriptWrappable] extended attribute in the IDL file.  "
+    "Be consistent.");
+
+namespace test_interface_direct_socket_enabled_v8_internal {
+
+static void DirectSocketEnabledAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  v8::Local<v8::Object> holder = info.Holder();
+
+  TestInterfaceDirectSocketEnabled* impl = V8TestInterfaceDirectSocketEnabled::ToImpl(holder);
+
+  V8SetReturnValueBool(info, impl->directSocketEnabledAttribute());
+}
+
+static void DirectSocketEnabledAttributeAttributeSetter(
+    v8::Local<v8::Value> v8_value, const v8::FunctionCallbackInfo<v8::Value>& info) {
+  v8::Isolate* isolate = info.GetIsolate();
+  ALLOW_UNUSED_LOCAL(isolate);
+
+  v8::Local<v8::Object> holder = info.Holder();
+  ALLOW_UNUSED_LOCAL(holder);
+
+  TestInterfaceDirectSocketEnabled* impl = V8TestInterfaceDirectSocketEnabled::ToImpl(holder);
+
+  ExceptionState exception_state(isolate, ExceptionState::kSetterContext, "TestInterfaceDirectSocketEnabled", "directSocketEnabledAttribute");
+
+  // Prepare the value to be set.
+  bool cpp_value{ NativeValueTraits<IDLBoolean>::NativeValue(info.GetIsolate(), v8_value, exception_state) };
+  if (exception_state.HadException())
+    return;
+
+  impl->setDirectSocketEnabledAttribute(cpp_value);
+}
+
+static void DirectSocketEnabledRuntimeEnabledAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  v8::Local<v8::Object> holder = info.Holder();
+
+  TestInterfaceDirectSocketEnabled* impl = V8TestInterfaceDirectSocketEnabled::ToImpl(holder);
+
+  V8SetReturnValueBool(info, impl->directSocketEnabledRuntimeEnabledAttribute());
+}
+
+static void DirectSocketEnabledRuntimeEnabledAttributeAttributeSetter(
+    v8::Local<v8::Value> v8_value, const v8::FunctionCallbackInfo<v8::Value>& info) {
+  v8::Isolate* isolate = info.GetIsolate();
+  ALLOW_UNUSED_LOCAL(isolate);
+
+  v8::Local<v8::Object> holder = info.Holder();
+  ALLOW_UNUSED_LOCAL(holder);
+
+  TestInterfaceDirectSocketEnabled* impl = V8TestInterfaceDirectSocketEnabled::ToImpl(holder);
+
+  ExceptionState exception_state(isolate, ExceptionState::kSetterContext, "TestInterfaceDirectSocketEnabled", "directSocketEnabledRuntimeEnabledAttribute");
+
+  // Prepare the value to be set.
+  bool cpp_value{ NativeValueTraits<IDLBoolean>::NativeValue(info.GetIsolate(), v8_value, exception_state) };
+  if (exception_state.HadException())
+    return;
+
+  impl->setDirectSocketEnabledRuntimeEnabledAttribute(cpp_value);
+}
+
+static void DirectSocketEnabledWindowExposedAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  v8::Local<v8::Object> holder = info.Holder();
+
+  TestInterfaceDirectSocketEnabled* impl = V8TestInterfaceDirectSocketEnabled::ToImpl(holder);
+
+  V8SetReturnValueBool(info, impl->directSocketEnabledWindowExposedAttribute());
+}
+
+static void DirectSocketEnabledWindowExposedAttributeAttributeSetter(
+    v8::Local<v8::Value> v8_value, const v8::FunctionCallbackInfo<v8::Value>& info) {
+  v8::Isolate* isolate = info.GetIsolate();
+  ALLOW_UNUSED_LOCAL(isolate);
+
+  v8::Local<v8::Object> holder = info.Holder();
+  ALLOW_UNUSED_LOCAL(holder);
+
+  TestInterfaceDirectSocketEnabled* impl = V8TestInterfaceDirectSocketEnabled::ToImpl(holder);
+
+  ExceptionState exception_state(isolate, ExceptionState::kSetterContext, "TestInterfaceDirectSocketEnabled", "directSocketEnabledWindowExposedAttribute");
+
+  // Prepare the value to be set.
+  bool cpp_value{ NativeValueTraits<IDLBoolean>::NativeValue(info.GetIsolate(), v8_value, exception_state) };
+  if (exception_state.HadException())
+    return;
+
+  impl->setDirectSocketEnabledWindowExposedAttribute(cpp_value);
+}
+
+static void DirectSocketEnabledWorkerExposedAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  v8::Local<v8::Object> holder = info.Holder();
+
+  TestInterfaceDirectSocketEnabled* impl = V8TestInterfaceDirectSocketEnabled::ToImpl(holder);
+
+  V8SetReturnValueBool(info, impl->directSocketEnabledWorkerExposedAttribute());
+}
+
+static void DirectSocketEnabledWorkerExposedAttributeAttributeSetter(
+    v8::Local<v8::Value> v8_value, const v8::FunctionCallbackInfo<v8::Value>& info) {
+  v8::Isolate* isolate = info.GetIsolate();
+  ALLOW_UNUSED_LOCAL(isolate);
+
+  v8::Local<v8::Object> holder = info.Holder();
+  ALLOW_UNUSED_LOCAL(holder);
+
+  TestInterfaceDirectSocketEnabled* impl = V8TestInterfaceDirectSocketEnabled::ToImpl(holder);
+
+  ExceptionState exception_state(isolate, ExceptionState::kSetterContext, "TestInterfaceDirectSocketEnabled", "directSocketEnabledWorkerExposedAttribute");
+
+  // Prepare the value to be set.
+  bool cpp_value{ NativeValueTraits<IDLBoolean>::NativeValue(info.GetIsolate(), v8_value, exception_state) };
+  if (exception_state.HadException())
+    return;
+
+  impl->setDirectSocketEnabledWorkerExposedAttribute(cpp_value);
+}
+
+static void DirectSocketEnabledWindowExposedRuntimeEnabledAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  v8::Local<v8::Object> holder = info.Holder();
+
+  TestInterfaceDirectSocketEnabled* impl = V8TestInterfaceDirectSocketEnabled::ToImpl(holder);
+
+  V8SetReturnValueBool(info, impl->directSocketEnabledWindowExposedRuntimeEnabledAttribute());
+}
+
+static void DirectSocketEnabledWindowExposedRuntimeEnabledAttributeAttributeSetter(
+    v8::Local<v8::Value> v8_value, const v8::FunctionCallbackInfo<v8::Value>& info) {
+  v8::Isolate* isolate = info.GetIsolate();
+  ALLOW_UNUSED_LOCAL(isolate);
+
+  v8::Local<v8::Object> holder = info.Holder();
+  ALLOW_UNUSED_LOCAL(holder);
+
+  TestInterfaceDirectSocketEnabled* impl = V8TestInterfaceDirectSocketEnabled::ToImpl(holder);
+
+  ExceptionState exception_state(isolate, ExceptionState::kSetterContext, "TestInterfaceDirectSocketEnabled", "directSocketEnabledWindowExposedRuntimeEnabledAttribute");
+
+  // Prepare the value to be set.
+  bool cpp_value{ NativeValueTraits<IDLBoolean>::NativeValue(info.GetIsolate(), v8_value, exception_state) };
+  if (exception_state.HadException())
+    return;
+
+  impl->setDirectSocketEnabledWindowExposedRuntimeEnabledAttribute(cpp_value);
+}
+
+static void DirectSocketEnabledWorkerExposedRuntimeEnabledAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  v8::Local<v8::Object> holder = info.Holder();
+
+  TestInterfaceDirectSocketEnabled* impl = V8TestInterfaceDirectSocketEnabled::ToImpl(holder);
+
+  V8SetReturnValueBool(info, impl->directSocketEnabledWorkerExposedRuntimeEnabledAttribute());
+}
+
+static void DirectSocketEnabledWorkerExposedRuntimeEnabledAttributeAttributeSetter(
+    v8::Local<v8::Value> v8_value, const v8::FunctionCallbackInfo<v8::Value>& info) {
+  v8::Isolate* isolate = info.GetIsolate();
+  ALLOW_UNUSED_LOCAL(isolate);
+
+  v8::Local<v8::Object> holder = info.Holder();
+  ALLOW_UNUSED_LOCAL(holder);
+
+  TestInterfaceDirectSocketEnabled* impl = V8TestInterfaceDirectSocketEnabled::ToImpl(holder);
+
+  ExceptionState exception_state(isolate, ExceptionState::kSetterContext, "TestInterfaceDirectSocketEnabled", "directSocketEnabledWorkerExposedRuntimeEnabledAttribute");
+
+  // Prepare the value to be set.
+  bool cpp_value{ NativeValueTraits<IDLBoolean>::NativeValue(info.GetIsolate(), v8_value, exception_state) };
+  if (exception_state.HadException())
+    return;
+
+  impl->setDirectSocketEnabledWorkerExposedRuntimeEnabledAttribute(cpp_value);
+}
+
+static void DirectSocketEnabledMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  TestInterfaceDirectSocketEnabled* impl = V8TestInterfaceDirectSocketEnabled::ToImpl(info.Holder());
+
+  impl->directSocketEnabledMethod();
+}
+
+static void DirectSocketEnabledRuntimeEnabledMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  TestInterfaceDirectSocketEnabled* impl = V8TestInterfaceDirectSocketEnabled::ToImpl(info.Holder());
+
+  impl->directSocketEnabledRuntimeEnabledMethod();
+}
+
+static void DirectSocketEnabledWindowExposedMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  TestInterfaceDirectSocketEnabled* impl = V8TestInterfaceDirectSocketEnabled::ToImpl(info.Holder());
+
+  impl->directSocketEnabledWindowExposedMethod();
+}
+
+static void DirectSocketEnabledWorkerExposedMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  TestInterfaceDirectSocketEnabled* impl = V8TestInterfaceDirectSocketEnabled::ToImpl(info.Holder());
+
+  impl->directSocketEnabledWorkerExposedMethod();
+}
+
+static void DirectSocketEnabledWindowExposedRuntimeEnabledMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  TestInterfaceDirectSocketEnabled* impl = V8TestInterfaceDirectSocketEnabled::ToImpl(info.Holder());
+
+  impl->directSocketEnabledWindowExposedRuntimeEnabledMethod();
+}
+
+static void DirectSocketEnabledWorkerExposedRuntimeEnabledMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  TestInterfaceDirectSocketEnabled* impl = V8TestInterfaceDirectSocketEnabled::ToImpl(info.Holder());
+
+  impl->directSocketEnabledWorkerExposedRuntimeEnabledMethod();
+}
+
+}  // namespace test_interface_direct_socket_enabled_v8_internal
+
+void V8TestInterfaceDirectSocketEnabled::DirectSocketEnabledAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceDirectSocketEnabled_directSocketEnabledAttribute_Getter");
+
+  test_interface_direct_socket_enabled_v8_internal::DirectSocketEnabledAttributeAttributeGetter(info);
+}
+
+void V8TestInterfaceDirectSocketEnabled::DirectSocketEnabledAttributeAttributeSetterCallback(
+    const v8::FunctionCallbackInfo<v8::Value>& info) {
+  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceDirectSocketEnabled_directSocketEnabledAttribute_Setter");
+
+  v8::Local<v8::Value> v8_value = info[0];
+
+  test_interface_direct_socket_enabled_v8_internal::DirectSocketEnabledAttributeAttributeSetter(v8_value, info);
+}
+
+void V8TestInterfaceDirectSocketEnabled::DirectSocketEnabledRuntimeEnabledAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceDirectSocketEnabled_directSocketEnabledRuntimeEnabledAttribute_Getter");
+
+  test_interface_direct_socket_enabled_v8_internal::DirectSocketEnabledRuntimeEnabledAttributeAttributeGetter(info);
+}
+
+void V8TestInterfaceDirectSocketEnabled::DirectSocketEnabledRuntimeEnabledAttributeAttributeSetterCallback(
+    const v8::FunctionCallbackInfo<v8::Value>& info) {
+  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceDirectSocketEnabled_directSocketEnabledRuntimeEnabledAttribute_Setter");
+
+  v8::Local<v8::Value> v8_value = info[0];
+
+  test_interface_direct_socket_enabled_v8_internal::DirectSocketEnabledRuntimeEnabledAttributeAttributeSetter(v8_value, info);
+}
+
+void V8TestInterfaceDirectSocketEnabled::DirectSocketEnabledWindowExposedAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceDirectSocketEnabled_directSocketEnabledWindowExposedAttribute_Getter");
+
+  test_interface_direct_socket_enabled_v8_internal::DirectSocketEnabledWindowExposedAttributeAttributeGetter(info);
+}
+
+void V8TestInterfaceDirectSocketEnabled::DirectSocketEnabledWindowExposedAttributeAttributeSetterCallback(
+    const v8::FunctionCallbackInfo<v8::Value>& info) {
+  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceDirectSocketEnabled_directSocketEnabledWindowExposedAttribute_Setter");
+
+  v8::Local<v8::Value> v8_value = info[0];
+
+  test_interface_direct_socket_enabled_v8_internal::DirectSocketEnabledWindowExposedAttributeAttributeSetter(v8_value, info);
+}
+
+void V8TestInterfaceDirectSocketEnabled::DirectSocketEnabledWorkerExposedAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceDirectSocketEnabled_directSocketEnabledWorkerExposedAttribute_Getter");
+
+  test_interface_direct_socket_enabled_v8_internal::DirectSocketEnabledWorkerExposedAttributeAttributeGetter(info);
+}
+
+void V8TestInterfaceDirectSocketEnabled::DirectSocketEnabledWorkerExposedAttributeAttributeSetterCallback(
+    const v8::FunctionCallbackInfo<v8::Value>& info) {
+  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceDirectSocketEnabled_directSocketEnabledWorkerExposedAttribute_Setter");
+
+  v8::Local<v8::Value> v8_value = info[0];
+
+  test_interface_direct_socket_enabled_v8_internal::DirectSocketEnabledWorkerExposedAttributeAttributeSetter(v8_value, info);
+}
+
+void V8TestInterfaceDirectSocketEnabled::DirectSocketEnabledWindowExposedRuntimeEnabledAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceDirectSocketEnabled_directSocketEnabledWindowExposedRuntimeEnabledAttribute_Getter");
+
+  test_interface_direct_socket_enabled_v8_internal::DirectSocketEnabledWindowExposedRuntimeEnabledAttributeAttributeGetter(info);
+}
+
+void V8TestInterfaceDirectSocketEnabled::DirectSocketEnabledWindowExposedRuntimeEnabledAttributeAttributeSetterCallback(
+    const v8::FunctionCallbackInfo<v8::Value>& info) {
+  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceDirectSocketEnabled_directSocketEnabledWindowExposedRuntimeEnabledAttribute_Setter");
+
+  v8::Local<v8::Value> v8_value = info[0];
+
+  test_interface_direct_socket_enabled_v8_internal::DirectSocketEnabledWindowExposedRuntimeEnabledAttributeAttributeSetter(v8_value, info);
+}
+
+void V8TestInterfaceDirectSocketEnabled::DirectSocketEnabledWorkerExposedRuntimeEnabledAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceDirectSocketEnabled_directSocketEnabledWorkerExposedRuntimeEnabledAttribute_Getter");
+
+  test_interface_direct_socket_enabled_v8_internal::DirectSocketEnabledWorkerExposedRuntimeEnabledAttributeAttributeGetter(info);
+}
+
+void V8TestInterfaceDirectSocketEnabled::DirectSocketEnabledWorkerExposedRuntimeEnabledAttributeAttributeSetterCallback(
+    const v8::FunctionCallbackInfo<v8::Value>& info) {
+  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceDirectSocketEnabled_directSocketEnabledWorkerExposedRuntimeEnabledAttribute_Setter");
+
+  v8::Local<v8::Value> v8_value = info[0];
+
+  test_interface_direct_socket_enabled_v8_internal::DirectSocketEnabledWorkerExposedRuntimeEnabledAttributeAttributeSetter(v8_value, info);
+}
+
+void V8TestInterfaceDirectSocketEnabled::DirectSocketEnabledMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  BLINK_BINDINGS_TRACE_EVENT("TestInterfaceDirectSocketEnabled.directSocketEnabledMethod");
+  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceDirectSocketEnabled_directSocketEnabledMethod");
+
+  test_interface_direct_socket_enabled_v8_internal::DirectSocketEnabledMethodMethod(info);
+}
+
+void V8TestInterfaceDirectSocketEnabled::DirectSocketEnabledRuntimeEnabledMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  BLINK_BINDINGS_TRACE_EVENT("TestInterfaceDirectSocketEnabled.directSocketEnabledRuntimeEnabledMethod");
+  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceDirectSocketEnabled_directSocketEnabledRuntimeEnabledMethod");
+
+  test_interface_direct_socket_enabled_v8_internal::DirectSocketEnabledRuntimeEnabledMethodMethod(info);
+}
+
+void V8TestInterfaceDirectSocketEnabled::DirectSocketEnabledWindowExposedMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  BLINK_BINDINGS_TRACE_EVENT("TestInterfaceDirectSocketEnabled.directSocketEnabledWindowExposedMethod");
+  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceDirectSocketEnabled_directSocketEnabledWindowExposedMethod");
+
+  test_interface_direct_socket_enabled_v8_internal::DirectSocketEnabledWindowExposedMethodMethod(info);
+}
+
+void V8TestInterfaceDirectSocketEnabled::DirectSocketEnabledWorkerExposedMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  BLINK_BINDINGS_TRACE_EVENT("TestInterfaceDirectSocketEnabled.directSocketEnabledWorkerExposedMethod");
+  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceDirectSocketEnabled_directSocketEnabledWorkerExposedMethod");
+
+  test_interface_direct_socket_enabled_v8_internal::DirectSocketEnabledWorkerExposedMethodMethod(info);
+}
+
+void V8TestInterfaceDirectSocketEnabled::DirectSocketEnabledWindowExposedRuntimeEnabledMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  BLINK_BINDINGS_TRACE_EVENT("TestInterfaceDirectSocketEnabled.directSocketEnabledWindowExposedRuntimeEnabledMethod");
+  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceDirectSocketEnabled_directSocketEnabledWindowExposedRuntimeEnabledMethod");
+
+  test_interface_direct_socket_enabled_v8_internal::DirectSocketEnabledWindowExposedRuntimeEnabledMethodMethod(info);
+}
+
+void V8TestInterfaceDirectSocketEnabled::DirectSocketEnabledWorkerExposedRuntimeEnabledMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  BLINK_BINDINGS_TRACE_EVENT("TestInterfaceDirectSocketEnabled.directSocketEnabledWorkerExposedRuntimeEnabledMethod");
+  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceDirectSocketEnabled_directSocketEnabledWorkerExposedRuntimeEnabledMethod");
+
+  test_interface_direct_socket_enabled_v8_internal::DirectSocketEnabledWorkerExposedRuntimeEnabledMethodMethod(info);
+}
+
+static void InstallV8TestInterfaceDirectSocketEnabledTemplate(
+    v8::Isolate* isolate,
+    const DOMWrapperWorld& world,
+    v8::Local<v8::FunctionTemplate> interface_template) {
+  // Initialize the interface object's template.
+  V8DOMConfiguration::InitializeDOMInterfaceTemplate(isolate, interface_template, V8TestInterfaceDirectSocketEnabled::GetWrapperTypeInfo()->interface_name, v8::Local<v8::FunctionTemplate>(), V8TestInterfaceDirectSocketEnabled::kInternalFieldCount);
+
+  v8::Local<v8::Signature> signature = v8::Signature::New(isolate, interface_template);
+  ALLOW_UNUSED_LOCAL(signature);
+  v8::Local<v8::ObjectTemplate> instance_template = interface_template->InstanceTemplate();
+  ALLOW_UNUSED_LOCAL(instance_template);
+  v8::Local<v8::ObjectTemplate> prototype_template = interface_template->PrototypeTemplate();
+  ALLOW_UNUSED_LOCAL(prototype_template);
+
+  // Register IDL constants, attributes and operations.
+
+  // Custom signature
+
+  V8TestInterfaceDirectSocketEnabled::InstallRuntimeEnabledFeaturesOnTemplate(
+      isolate, world, interface_template);
+}
+
+void V8TestInterfaceDirectSocketEnabled::InstallRuntimeEnabledFeaturesOnTemplate(
+    v8::Isolate* isolate,
+    const DOMWrapperWorld& world,
+    v8::Local<v8::FunctionTemplate> interface_template) {
+  v8::Local<v8::Signature> signature = v8::Signature::New(isolate, interface_template);
+  ALLOW_UNUSED_LOCAL(signature);
+  v8::Local<v8::ObjectTemplate> instance_template = interface_template->InstanceTemplate();
+  ALLOW_UNUSED_LOCAL(instance_template);
+  v8::Local<v8::ObjectTemplate> prototype_template = interface_template->PrototypeTemplate();
+  ALLOW_UNUSED_LOCAL(prototype_template);
+
+  // Register IDL constants, attributes and operations.
+
+  // Custom signature
+}
+
+v8::Local<v8::FunctionTemplate> V8TestInterfaceDirectSocketEnabled::DomTemplate(
+    v8::Isolate* isolate, const DOMWrapperWorld& world) {
+  return V8DOMConfiguration::DomClassTemplate(
+      isolate, world, const_cast<WrapperTypeInfo*>(V8TestInterfaceDirectSocketEnabled::GetWrapperTypeInfo()),
+      InstallV8TestInterfaceDirectSocketEnabledTemplate);
+}
+
+bool V8TestInterfaceDirectSocketEnabled::HasInstance(v8::Local<v8::Value> v8_value, v8::Isolate* isolate) {
+  return V8PerIsolateData::From(isolate)->HasInstance(V8TestInterfaceDirectSocketEnabled::GetWrapperTypeInfo(), v8_value);
+}
+
+v8::Local<v8::Object> V8TestInterfaceDirectSocketEnabled::FindInstanceInPrototypeChain(
+    v8::Local<v8::Value> v8_value, v8::Isolate* isolate) {
+  return V8PerIsolateData::From(isolate)->FindInstanceInPrototypeChain(
+      V8TestInterfaceDirectSocketEnabled::GetWrapperTypeInfo(), v8_value);
+}
+
+TestInterfaceDirectSocketEnabled* V8TestInterfaceDirectSocketEnabled::ToImplWithTypeCheck(
+    v8::Isolate* isolate, v8::Local<v8::Value> value) {
+  return HasInstance(value, isolate) ? ToImpl(v8::Local<v8::Object>::Cast(value)) : nullptr;
+}
+
+void V8TestInterfaceDirectSocketEnabled::InstallConditionalFeatures(
+    v8::Local<v8::Context> context,
+    const DOMWrapperWorld& world,
+    v8::Local<v8::Object> instance_object,
+    v8::Local<v8::Object> prototype_object,
+    v8::Local<v8::Function> interface_object,
+    v8::Local<v8::FunctionTemplate> interface_template) {
+  CHECK(!interface_template.IsEmpty());
+  DCHECK((!prototype_object.IsEmpty() && !interface_object.IsEmpty()) ||
+         !instance_object.IsEmpty());
+
+  v8::Isolate* isolate = context->GetIsolate();
+
+  v8::Local<v8::Signature> signature = v8::Signature::New(isolate, interface_template);
+  ExecutionContext* execution_context = ToExecutionContext(context);
+  DCHECK(execution_context);
+  bool is_direct_socket_enabled = (execution_context && execution_context->DirectSocketCapability());
+
+  if (!prototype_object.IsEmpty() || !interface_object.IsEmpty()) {
+    if (execution_context && (is_direct_socket_enabled)) {
+    }
+    if (execution_context && (execution_context->IsWindow())) {
+      if (execution_context && (is_direct_socket_enabled)) {
+      }
+    }
+    if (execution_context && (execution_context->IsWorkerGlobalScope())) {
+      if (execution_context && (is_direct_socket_enabled)) {
+      }
+    }
+    if (execution_context && (is_direct_socket_enabled)) {
+      {
+        // Install directSocketEnabledMethod configuration
+        const V8DOMConfiguration::MethodConfiguration kConfigurations[] = {
+            {"directSocketEnabledMethod", V8TestInterfaceDirectSocketEnabled::DirectSocketEnabledMethodMethodCallback, 0, v8::None, V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kDoNotCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds}
+        };
+        for (const auto& config : kConfigurations) {
+          V8DOMConfiguration::InstallMethod(
+              isolate, world, instance_object, prototype_object,
+              interface_object, signature, config);
+        }
+      }
+    }
+    if (execution_context && (is_direct_socket_enabled)) {
+      if (RuntimeEnabledFeatures::RuntimeFeature2Enabled()) {
+        {
+          // Install directSocketEnabledRuntimeEnabledMethod configuration
+          const V8DOMConfiguration::MethodConfiguration kConfigurations[] = {
+              {"directSocketEnabledRuntimeEnabledMethod", V8TestInterfaceDirectSocketEnabled::DirectSocketEnabledRuntimeEnabledMethodMethodCallback, 0, v8::None, V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kDoNotCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds}
+          };
+          for (const auto& config : kConfigurations) {
+            V8DOMConfiguration::InstallMethod(
+                isolate, world, instance_object, prototype_object,
+                interface_object, signature, config);
+          }
+        }
+      }
+    }
+    if (execution_context && (is_direct_socket_enabled)) {
+      if (execution_context && (execution_context->IsWindow())) {
+        {
+          // Install directSocketEnabledWindowExposedMethod configuration
+          const V8DOMConfiguration::MethodConfiguration kConfigurations[] = {
+              {"directSocketEnabledWindowExposedMethod", V8TestInterfaceDirectSocketEnabled::DirectSocketEnabledWindowExposedMethodMethodCallback, 0, v8::None, V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kDoNotCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds}
+          };
+          for (const auto& config : kConfigurations) {
+            V8DOMConfiguration::InstallMethod(
+                isolate, world, instance_object, prototype_object,
+                interface_object, signature, config);
+          }
+        }
+      }
+    }
+    if (execution_context && (is_direct_socket_enabled)) {
+      if (execution_context && (execution_context->IsWorkerGlobalScope())) {
+        {
+          // Install directSocketEnabledWorkerExposedMethod configuration
+          const V8DOMConfiguration::MethodConfiguration kConfigurations[] = {
+              {"directSocketEnabledWorkerExposedMethod", V8TestInterfaceDirectSocketEnabled::DirectSocketEnabledWorkerExposedMethodMethodCallback, 0, v8::None, V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kDoNotCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds}
+          };
+          for (const auto& config : kConfigurations) {
+            V8DOMConfiguration::InstallMethod(
+                isolate, world, instance_object, prototype_object,
+                interface_object, signature, config);
+          }
+        }
+      }
+    }
+    if (execution_context && (is_direct_socket_enabled)) {
+      if (execution_context && (execution_context->IsWindow())) {
+        if (RuntimeEnabledFeatures::RuntimeFeature2Enabled()) {
+          {
+            // Install directSocketEnabledWindowExposedRuntimeEnabledMethod configuration
+            const V8DOMConfiguration::MethodConfiguration kConfigurations[] = {
+                {"directSocketEnabledWindowExposedRuntimeEnabledMethod", V8TestInterfaceDirectSocketEnabled::DirectSocketEnabledWindowExposedRuntimeEnabledMethodMethodCallback, 0, v8::None, V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kDoNotCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds}
+            };
+            for (const auto& config : kConfigurations) {
+              V8DOMConfiguration::InstallMethod(
+                  isolate, world, instance_object, prototype_object,
+                  interface_object, signature, config);
+            }
+          }
+        }
+      }
+    }
+    if (execution_context && (is_direct_socket_enabled)) {
+      if (execution_context && (execution_context->IsWorkerGlobalScope())) {
+        if (RuntimeEnabledFeatures::RuntimeFeature2Enabled()) {
+          {
+            // Install directSocketEnabledWorkerExposedRuntimeEnabledMethod configuration
+            const V8DOMConfiguration::MethodConfiguration kConfigurations[] = {
+                {"directSocketEnabledWorkerExposedRuntimeEnabledMethod", V8TestInterfaceDirectSocketEnabled::DirectSocketEnabledWorkerExposedRuntimeEnabledMethodMethodCallback, 0, v8::None, V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kDoNotCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds}
+            };
+            for (const auto& config : kConfigurations) {
+              V8DOMConfiguration::InstallMethod(
+                  isolate, world, instance_object, prototype_object,
+                  interface_object, signature, config);
+            }
+          }
+        }
+      }
+    }
+  }
+}
+
+}  // namespace blink
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_direct_socket_enabled.h b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_direct_socket_enabled.h
new file mode 100644
index 0000000..1d22b63
--- /dev/null
+++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_direct_socket_enabled.h
@@ -0,0 +1,89 @@
+// 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.
+
+// This file has been auto-generated from the Jinja2 template
+// third_party/blink/renderer/bindings/templates/interface.h.tmpl
+// by the script code_generator_v8.py.
+// DO NOT MODIFY!
+
+// clang-format off
+#ifndef THIRD_PARTY_BLINK_RENDERER_BINDINGS_TESTS_RESULTS_CORE_V8_TEST_INTERFACE_DIRECT_SOCKET_ENABLED_H_
+#define THIRD_PARTY_BLINK_RENDERER_BINDINGS_TESTS_RESULTS_CORE_V8_TEST_INTERFACE_DIRECT_SOCKET_ENABLED_H_
+
+#include "third_party/blink/renderer/bindings/core/v8/generated_code_helper.h"
+#include "third_party/blink/renderer/bindings/core/v8/native_value_traits.h"
+#include "third_party/blink/renderer/bindings/core/v8/to_v8_for_core.h"
+#include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_core.h"
+#include "third_party/blink/renderer/bindings/tests/idls/core/test_interface_direct_socket_enabled.h"
+#include "third_party/blink/renderer/core/core_export.h"
+#include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
+#include "third_party/blink/renderer/platform/bindings/v8_dom_wrapper.h"
+#include "third_party/blink/renderer/platform/bindings/wrapper_type_info.h"
+#include "third_party/blink/renderer/platform/heap/handle.h"
+
+namespace blink {
+
+CORE_EXPORT extern const WrapperTypeInfo v8_test_interface_direct_socket_enabled_wrapper_type_info;
+
+class V8TestInterfaceDirectSocketEnabled {
+  STATIC_ONLY(V8TestInterfaceDirectSocketEnabled);
+ public:
+  CORE_EXPORT static bool HasInstance(v8::Local<v8::Value>, v8::Isolate*);
+  static v8::Local<v8::Object> FindInstanceInPrototypeChain(v8::Local<v8::Value>, v8::Isolate*);
+  CORE_EXPORT static v8::Local<v8::FunctionTemplate> DomTemplate(v8::Isolate*, const DOMWrapperWorld&);
+  static TestInterfaceDirectSocketEnabled* ToImpl(v8::Local<v8::Object> object) {
+    return ToScriptWrappable(object)->ToImpl<TestInterfaceDirectSocketEnabled>();
+  }
+  CORE_EXPORT static TestInterfaceDirectSocketEnabled* ToImplWithTypeCheck(v8::Isolate*, v8::Local<v8::Value>);
+
+  CORE_EXPORT static constexpr const WrapperTypeInfo* GetWrapperTypeInfo() {
+    return &v8_test_interface_direct_socket_enabled_wrapper_type_info;
+  }
+
+  static constexpr int kInternalFieldCount = kV8DefaultWrapperInternalFieldCount;
+
+  CORE_EXPORT static void InstallConditionalFeatures(
+      v8::Local<v8::Context>,
+      const DOMWrapperWorld&,
+      v8::Local<v8::Object> instance_object,
+      v8::Local<v8::Object> prototype_object,
+      v8::Local<v8::Function> interface_object,
+      v8::Local<v8::FunctionTemplate> interface_template);
+
+  // Callback functions
+
+  CORE_EXPORT static void DirectSocketEnabledAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
+  CORE_EXPORT static void DirectSocketEnabledAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
+  CORE_EXPORT static void DirectSocketEnabledRuntimeEnabledAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
+  CORE_EXPORT static void DirectSocketEnabledRuntimeEnabledAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
+  CORE_EXPORT static void DirectSocketEnabledWindowExposedAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
+  CORE_EXPORT static void DirectSocketEnabledWindowExposedAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
+  CORE_EXPORT static void DirectSocketEnabledWorkerExposedAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
+  CORE_EXPORT static void DirectSocketEnabledWorkerExposedAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
+  CORE_EXPORT static void DirectSocketEnabledWindowExposedRuntimeEnabledAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
+  CORE_EXPORT static void DirectSocketEnabledWindowExposedRuntimeEnabledAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
+  CORE_EXPORT static void DirectSocketEnabledWorkerExposedRuntimeEnabledAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
+  CORE_EXPORT static void DirectSocketEnabledWorkerExposedRuntimeEnabledAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
+
+  CORE_EXPORT static void DirectSocketEnabledMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>&);
+  CORE_EXPORT static void DirectSocketEnabledRuntimeEnabledMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>&);
+  CORE_EXPORT static void DirectSocketEnabledWindowExposedMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>&);
+  CORE_EXPORT static void DirectSocketEnabledWorkerExposedMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>&);
+  CORE_EXPORT static void DirectSocketEnabledWindowExposedRuntimeEnabledMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>&);
+  CORE_EXPORT static void DirectSocketEnabledWorkerExposedRuntimeEnabledMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>&);
+
+  static void InstallRuntimeEnabledFeaturesOnTemplate(
+      v8::Isolate*,
+      const DOMWrapperWorld&,
+      v8::Local<v8::FunctionTemplate> interface_template);
+};
+
+template <>
+struct V8TypeOf<TestInterfaceDirectSocketEnabled> {
+  typedef V8TestInterfaceDirectSocketEnabled Type;
+};
+
+}  // namespace blink
+
+#endif  // THIRD_PARTY_BLINK_RENDERER_BINDINGS_TESTS_RESULTS_CORE_V8_TEST_INTERFACE_DIRECT_SOCKET_ENABLED_H_
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_secure_context.cc b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_secure_context.cc
index fc62074..4c96d17 100644
--- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_secure_context.cc
+++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_secure_context.cc
@@ -484,72 +484,9 @@
   bool is_secure_context = (execution_context && execution_context->IsSecureContext());
 
   if (!prototype_object.IsEmpty() || !interface_object.IsEmpty()) {
-    if (is_secure_context) {
-      static constexpr V8DOMConfiguration::AccessorConfiguration
-      kAccessorConfigurations[] = {
-          { "secureContextAttribute", V8TestInterfaceSecureContext::SecureContextAttributeAttributeGetterCallback, V8TestInterfaceSecureContext::SecureContextAttributeAttributeSetterCallback, static_cast<unsigned>(V8PrivateProperty::CachedAccessor::kNone), static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds },
-      };
-      V8DOMConfiguration::InstallAccessors(
-          isolate, world, instance_object, prototype_object, interface_object,
-          signature, kAccessorConfigurations,
-          base::size(kAccessorConfigurations));
-
-      if (RuntimeEnabledFeatures::SecureFeatureEnabled()) {
-        static constexpr V8DOMConfiguration::AccessorConfiguration
-        kAccessorConfigurations[] = {
-            { "secureContextRuntimeEnabledAttribute", V8TestInterfaceSecureContext::SecureContextRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterfaceSecureContext::SecureContextRuntimeEnabledAttributeAttributeSetterCallback, static_cast<unsigned>(V8PrivateProperty::CachedAccessor::kNone), static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds },
-        };
-        V8DOMConfiguration::InstallAccessors(
-            isolate, world, instance_object, prototype_object, interface_object,
-            signature, kAccessorConfigurations,
-            base::size(kAccessorConfigurations));
-      }
-    }
     if (execution_context && (execution_context->IsWindow())) {
-      if (is_secure_context) {
-        static constexpr V8DOMConfiguration::AccessorConfiguration
-        kAccessorConfigurations[] = {
-            { "secureContextWindowExposedAttribute", V8TestInterfaceSecureContext::SecureContextWindowExposedAttributeAttributeGetterCallback, V8TestInterfaceSecureContext::SecureContextWindowExposedAttributeAttributeSetterCallback, static_cast<unsigned>(V8PrivateProperty::CachedAccessor::kNone), static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds },
-        };
-        V8DOMConfiguration::InstallAccessors(
-            isolate, world, instance_object, prototype_object, interface_object,
-            signature, kAccessorConfigurations,
-            base::size(kAccessorConfigurations));
-
-        if (RuntimeEnabledFeatures::SecureFeatureEnabled()) {
-          static constexpr V8DOMConfiguration::AccessorConfiguration
-          kAccessorConfigurations[] = {
-              { "secureContextWindowExposedRuntimeEnabledAttribute", V8TestInterfaceSecureContext::SecureContextWindowExposedRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterfaceSecureContext::SecureContextWindowExposedRuntimeEnabledAttributeAttributeSetterCallback, static_cast<unsigned>(V8PrivateProperty::CachedAccessor::kNone), static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds },
-          };
-          V8DOMConfiguration::InstallAccessors(
-              isolate, world, instance_object, prototype_object, interface_object,
-              signature, kAccessorConfigurations,
-              base::size(kAccessorConfigurations));
-        }
-      }
     }
     if (execution_context && (execution_context->IsWorkerGlobalScope())) {
-      if (is_secure_context) {
-        static constexpr V8DOMConfiguration::AccessorConfiguration
-        kAccessorConfigurations[] = {
-            { "secureContextWorkerExposedAttribute", V8TestInterfaceSecureContext::SecureContextWorkerExposedAttributeAttributeGetterCallback, V8TestInterfaceSecureContext::SecureContextWorkerExposedAttributeAttributeSetterCallback, static_cast<unsigned>(V8PrivateProperty::CachedAccessor::kNone), static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds },
-        };
-        V8DOMConfiguration::InstallAccessors(
-            isolate, world, instance_object, prototype_object, interface_object,
-            signature, kAccessorConfigurations,
-            base::size(kAccessorConfigurations));
-
-        if (RuntimeEnabledFeatures::SecureFeatureEnabled()) {
-          static constexpr V8DOMConfiguration::AccessorConfiguration
-          kAccessorConfigurations[] = {
-              { "secureContextWorkerExposedRuntimeEnabledAttribute", V8TestInterfaceSecureContext::SecureContextWorkerExposedRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterfaceSecureContext::SecureContextWorkerExposedRuntimeEnabledAttributeAttributeSetterCallback, static_cast<unsigned>(V8PrivateProperty::CachedAccessor::kNone), static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds },
-          };
-          V8DOMConfiguration::InstallAccessors(
-              isolate, world, instance_object, prototype_object, interface_object,
-              signature, kAccessorConfigurations,
-              base::size(kAccessorConfigurations));
-        }
-      }
     }
     if (is_secure_context) {
       {
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_object.cc b/third_party/blink/renderer/bindings/tests/results/core/v8_test_object.cc
index 3d65bb0b..fa97a8a1 100644
--- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_object.cc
+++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_object.cc
@@ -13569,6 +13569,14 @@
   V8DOMConfiguration::InstallAttributes(
       isolate, world, instance, prototype,
       kAttributeConfigurations, base::size(kAttributeConfigurations));
+  static constexpr V8DOMConfiguration::AttributeConfiguration
+  kAttributeConfigurations[] = {
+      { "originTrialEnabledLongAttribute", V8TestObject::OriginTrialEnabledLongAttributeAttributeGetterCallback, V8TestObject::OriginTrialEnabledLongAttributeAttributeSetterCallback, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds },
+      { "unscopableOriginTrialEnabledLongAttribute", V8TestObject::UnscopableOriginTrialEnabledLongAttributeAttributeGetterCallback, V8TestObject::UnscopableOriginTrialEnabledLongAttributeAttributeSetterCallback, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds },
+  };
+  V8DOMConfiguration::InstallAttributes(
+      isolate, world, instance, prototype,
+      kAttributeConfigurations, base::size(kAttributeConfigurations));
   static constexpr V8DOMConfiguration::AccessorConfiguration
   kAccessorConfigurations[] = {
       { "originTrialEnabledLongAttribute", V8TestObject::OriginTrialEnabledLongAttributeAttributeGetterCallback, V8TestObject::OriginTrialEnabledLongAttributeAttributeSetterCallback, static_cast<unsigned>(V8PrivateProperty::CachedAccessor::kNone), static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds },
diff --git a/third_party/blink/renderer/bindings/tests/results/modules/v8_test_interface_5.cc b/third_party/blink/renderer/bindings/tests/results/modules/v8_test_interface_5.cc
index ed85c01..0d93b5d 100644
--- a/third_party/blink/renderer/bindings/tests/results/modules/v8_test_interface_5.cc
+++ b/third_party/blink/renderer/bindings/tests/results/modules/v8_test_interface_5.cc
@@ -1133,24 +1133,8 @@
 
   if (!prototype_object.IsEmpty() || !interface_object.IsEmpty()) {
     if (execution_context && (execution_context->IsWindow())) {
-      static constexpr V8DOMConfiguration::AccessorConfiguration
-      kAccessorConfigurations[] = {
-          { "windowExposedAttribute", V8TestInterface5::WindowExposedAttributeAttributeGetterCallback, V8TestInterface5::WindowExposedAttributeAttributeSetterCallback, static_cast<unsigned>(V8PrivateProperty::CachedAccessor::kNone), static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds },
-      };
-      V8DOMConfiguration::InstallAccessors(
-          isolate, world, instance_object, prototype_object, interface_object,
-          signature, kAccessorConfigurations,
-          base::size(kAccessorConfigurations));
     }
     if (execution_context && (execution_context->IsWorkerGlobalScope())) {
-      static constexpr V8DOMConfiguration::AccessorConfiguration
-      kAccessorConfigurations[] = {
-          { "workerExposedAttribute", V8TestInterface5::WorkerExposedAttributeAttributeGetterCallback, V8TestInterface5::WorkerExposedAttributeAttributeSetterCallback, static_cast<unsigned>(V8PrivateProperty::CachedAccessor::kNone), static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds },
-      };
-      V8DOMConfiguration::InstallAccessors(
-          isolate, world, instance_object, prototype_object, interface_object,
-          signature, kAccessorConfigurations,
-          base::size(kAccessorConfigurations));
     }
     if (execution_context && (execution_context->IsWorkerGlobalScope())) {
       {
diff --git a/third_party/blink/renderer/bindings/tests/results/modules/v8_test_interface_partial.cc b/third_party/blink/renderer/bindings/tests/results/modules/v8_test_interface_partial.cc
index 4a62084..60ac44132 100644
--- a/third_party/blink/renderer/bindings/tests/results/modules/v8_test_interface_partial.cc
+++ b/third_party/blink/renderer/bindings/tests/results/modules/v8_test_interface_partial.cc
@@ -544,6 +544,14 @@
   V8DOMConfiguration::InstallAttributes(
       isolate, world, instance, prototype,
       kAttributeConfigurations, base::size(kAttributeConfigurations));
+  static constexpr V8DOMConfiguration::AttributeConfiguration
+  kAttributeConfigurations[] = {
+      { "partial4LongAttribute", V8TestInterfacePartial::Partial4LongAttributeAttributeGetterCallback, V8TestInterfacePartial::Partial4LongAttributeAttributeSetterCallback, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds },
+      { "partial4StaticLongAttribute", V8TestInterfacePartial::Partial4StaticLongAttributeAttributeGetterCallback, V8TestInterfacePartial::Partial4StaticLongAttributeAttributeSetterCallback, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds },
+  };
+  V8DOMConfiguration::InstallAttributes(
+      isolate, world, instance, prototype,
+      kAttributeConfigurations, base::size(kAttributeConfigurations));
   if (is_secure_context) {
     static constexpr V8DOMConfiguration::AccessorConfiguration
     kAccessorConfigurations[] = {
diff --git a/third_party/blink/renderer/core/animation/effect_model.cc b/third_party/blink/renderer/core/animation/effect_model.cc
index a876304..7f17c4f 100644
--- a/third_party/blink/renderer/core/animation/effect_model.cc
+++ b/third_party/blink/renderer/core/animation/effect_model.cc
@@ -6,7 +6,6 @@
 
 #include "third_party/blink/renderer/bindings/core/v8/v8_keyframe_effect_options.h"
 #include "third_party/blink/renderer/platform/bindings/exception_state.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 
 namespace blink {
 base::Optional<EffectModel::CompositeOperation>
diff --git a/third_party/blink/renderer/core/animation/transition_interpolation.cc b/third_party/blink/renderer/core/animation/transition_interpolation.cc
index caf0b90..a7e3ce47 100644
--- a/third_party/blink/renderer/core/animation/transition_interpolation.cc
+++ b/third_party/blink/renderer/core/animation/transition_interpolation.cc
@@ -8,7 +8,6 @@
 #include "third_party/blink/renderer/core/animation/interpolation_environment.h"
 #include "third_party/blink/renderer/core/animation/interpolation_type.h"
 #include "third_party/blink/renderer/core/css/resolver/style_resolver_state.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 
 namespace blink {
 
diff --git a/third_party/blink/renderer/core/css/css_font_face_src_value.cc b/third_party/blink/renderer/core/css/css_font_face_src_value.cc
index 3c91fe8..df689dac 100644
--- a/third_party/blink/renderer/core/css/css_font_face_src_value.cc
+++ b/third_party/blink/renderer/core/css/css_font_face_src_value.cc
@@ -43,7 +43,6 @@
 #include "third_party/blink/renderer/platform/loader/fetch/fetch_parameters.h"
 #include "third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h"
 #include "third_party/blink/renderer/platform/loader/fetch/resource_loader_options.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/wtf/text/string_builder.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/core/css/css_math_function_value.cc b/third_party/blink/renderer/core/css/css_math_function_value.cc
index c37a58a..04ea98af5 100644
--- a/third_party/blink/renderer/core/css/css_math_function_value.cc
+++ b/third_party/blink/renderer/core/css/css_math_function_value.cc
@@ -8,7 +8,6 @@
 #include "third_party/blink/renderer/core/css/css_value_clamping_utils.h"
 #include "third_party/blink/renderer/platform/geometry/calculation_expression_node.h"
 #include "third_party/blink/renderer/platform/geometry/length.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/wtf/size_assertions.h"
 #include "third_party/blink/renderer/platform/wtf/text/string_builder.h"
 
diff --git a/third_party/blink/renderer/core/css/css_selector_list.cc b/third_party/blink/renderer/core/css/css_selector_list.cc
index 28640e8..93fa501 100644
--- a/third_party/blink/renderer/core/css/css_selector_list.cc
+++ b/third_party/blink/renderer/core/css/css_selector_list.cc
@@ -28,7 +28,6 @@
 
 #include <memory>
 #include "third_party/blink/renderer/core/css/parser/css_parser_selector.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/wtf/allocator/partitions.h"
 #include "third_party/blink/renderer/platform/wtf/text/string_builder.h"
 #include "third_party/blink/renderer/platform/wtf/vector.h"
diff --git a/third_party/blink/renderer/core/css/css_syntax_definition.cc b/third_party/blink/renderer/core/css/css_syntax_definition.cc
index 9a09c65e..686042c 100644
--- a/third_party/blink/renderer/core/css/css_syntax_definition.cc
+++ b/third_party/blink/renderer/core/css/css_syntax_definition.cc
@@ -14,7 +14,6 @@
 #include "third_party/blink/renderer/core/css/parser/css_variable_parser.h"
 #include "third_party/blink/renderer/core/css/properties/css_parsing_utils.h"
 #include "third_party/blink/renderer/core/html/parser/html_parser_idioms.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 
 namespace blink {
 namespace {
diff --git a/third_party/blink/renderer/core/css/css_timing_function_value.h b/third_party/blink/renderer/core/css/css_timing_function_value.h
index 597cdeb..bfbbf8e 100644
--- a/third_party/blink/renderer/core/css/css_timing_function_value.h
+++ b/third_party/blink/renderer/core/css/css_timing_function_value.h
@@ -29,7 +29,6 @@
 #include "base/memory/scoped_refptr.h"
 #include "third_party/blink/renderer/core/css/css_value.h"
 #include "third_party/blink/renderer/platform/animation/timing_function.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/wtf/casting.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/core/css/parser/css_parser_context.cc b/third_party/blink/renderer/core/css/parser/css_parser_context.cc
index ee23eb1..ad3afab 100644
--- a/third_party/blink/renderer/core/css/parser/css_parser_context.cc
+++ b/third_party/blink/renderer/core/css/parser/css_parser_context.cc
@@ -18,7 +18,6 @@
 #include "third_party/blink/renderer/core/loader/document_loader.h"
 #include "third_party/blink/renderer/core/page/page.h"
 #include "third_party/blink/renderer/core/permissions_policy/layout_animations_policy.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 
 namespace blink {
 
diff --git a/third_party/blink/renderer/core/css/parser/css_variable_parser.cc b/third_party/blink/renderer/core/css/parser/css_variable_parser.cc
index cc37c3b..9b998e8 100644
--- a/third_party/blink/renderer/core/css/parser/css_variable_parser.cc
+++ b/third_party/blink/renderer/core/css/parser/css_variable_parser.cc
@@ -8,7 +8,6 @@
 #include "third_party/blink/renderer/core/css/css_variable_reference_value.h"
 #include "third_party/blink/renderer/core/css/parser/css_parser_token_range.h"
 #include "third_party/blink/renderer/core/css/properties/css_parsing_utils.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 
 namespace blink {
 
diff --git a/third_party/blink/renderer/core/css/parser/sizes_math_function_parser.cc b/third_party/blink/renderer/core/css/parser/sizes_math_function_parser.cc
index 7dd70a11..89affb85 100644
--- a/third_party/blink/renderer/core/css/parser/sizes_math_function_parser.cc
+++ b/third_party/blink/renderer/core/css/parser/sizes_math_function_parser.cc
@@ -7,7 +7,6 @@
 #include "third_party/blink/renderer/core/css/media_values.h"
 #include "third_party/blink/renderer/core/css/parser/css_parser_token.h"
 #include "third_party/blink/renderer/core/css_value_keywords.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 
 namespace blink {
 
diff --git a/third_party/blink/renderer/core/css/properties/longhands/custom_property.cc b/third_party/blink/renderer/core/css/properties/longhands/custom_property.cc
index 37280bc..af51b0a 100644
--- a/third_party/blink/renderer/core/css/properties/longhands/custom_property.cc
+++ b/third_party/blink/renderer/core/css/properties/longhands/custom_property.cc
@@ -12,7 +12,6 @@
 #include "third_party/blink/renderer/core/css/property_registry.h"
 #include "third_party/blink/renderer/core/css/resolver/style_builder_converter.h"
 #include "third_party/blink/renderer/core/style/computed_style.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 
 namespace blink {
 
diff --git a/third_party/blink/renderer/core/css/resolver/matched_properties_cache.cc b/third_party/blink/renderer/core/css/resolver/matched_properties_cache.cc
index d9af473..51c2ffc0 100644
--- a/third_party/blink/renderer/core/css/resolver/matched_properties_cache.cc
+++ b/third_party/blink/renderer/core/css/resolver/matched_properties_cache.cc
@@ -34,7 +34,6 @@
 #include "third_party/blink/renderer/core/css/properties/css_property_ref.h"
 #include "third_party/blink/renderer/core/css/resolver/style_resolver_state.h"
 #include "third_party/blink/renderer/core/style/computed_style.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/wtf/text/string_hasher.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/core/css/resolver/style_resolver_state.cc b/third_party/blink/renderer/core/css/resolver/style_resolver_state.cc
index bb0c01a..220f234 100644
--- a/third_party/blink/renderer/core/css/resolver/style_resolver_state.cc
+++ b/third_party/blink/renderer/core/css/resolver/style_resolver_state.cc
@@ -30,7 +30,6 @@
 #include "third_party/blink/renderer/core/dom/node_computed_style.h"
 #include "third_party/blink/renderer/core/dom/pseudo_element.h"
 #include "third_party/blink/renderer/core/style/computed_style.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 
 namespace blink {
 
diff --git a/third_party/blink/renderer/core/css/rule_feature_set.cc b/third_party/blink/renderer/core/css/rule_feature_set.cc
index 700d59c0..3f3a4238 100644
--- a/third_party/blink/renderer/core/css/rule_feature_set.cc
+++ b/third_party/blink/renderer/core/css/rule_feature_set.cc
@@ -46,7 +46,6 @@
 #include "third_party/blink/renderer/core/dom/node.h"
 #include "third_party/blink/renderer/core/inspector/inspector_trace_events.h"
 #include "third_party/blink/renderer/core/style/data_equivalency.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/wtf/text/string_builder.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/core/css/ua_counter_style_map.cc b/third_party/blink/renderer/core/css/ua_counter_style_map.cc
index 3cc66d3..74f78f77 100644
--- a/third_party/blink/renderer/core/css/ua_counter_style_map.cc
+++ b/third_party/blink/renderer/core/css/ua_counter_style_map.cc
@@ -6,7 +6,6 @@
 
 #include "third_party/blink/renderer/core/css/css_default_style_sheets.h"
 #include "third_party/blink/renderer/core/css/style_sheet_contents.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/wtf/text/string_builder.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/core/dom/events/registered_event_listener.cc b/third_party/blink/renderer/core/dom/events/registered_event_listener.cc
index 9bbc3b8..9f5ab9b 100644
--- a/third_party/blink/renderer/core/dom/events/registered_event_listener.cc
+++ b/third_party/blink/renderer/core/dom/events/registered_event_listener.cc
@@ -27,7 +27,6 @@
 #include "third_party/blink/renderer/core/dom/events/add_event_listener_options_resolved.h"
 #include "third_party/blink/renderer/core/dom/events/event.h"
 #include "third_party/blink/renderer/core/dom/events/event_listener.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 
 namespace blink {
 
diff --git a/third_party/blink/renderer/core/dom/flat_tree_traversal_test.cc b/third_party/blink/renderer/core/dom/flat_tree_traversal_test.cc
index c490bd80..fb71728 100644
--- a/third_party/blink/renderer/core/dom/flat_tree_traversal_test.cc
+++ b/third_party/blink/renderer/core/dom/flat_tree_traversal_test.cc
@@ -16,7 +16,6 @@
 #include "third_party/blink/renderer/core/testing/page_test_base.h"
 #include "third_party/blink/renderer/platform/bindings/exception_state.h"
 #include "third_party/blink/renderer/platform/geometry/int_size.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/testing/runtime_enabled_features_test_helpers.h"
 #include "third_party/blink/renderer/platform/wtf/std_lib_extras.h"
 #include "third_party/blink/renderer/platform/wtf/vector.h"
diff --git a/third_party/blink/renderer/core/dom/range.cc b/third_party/blink/renderer/core/dom/range.cc
index 52460df..031a9b6e 100644
--- a/third_party/blink/renderer/core/dom/range.cc
+++ b/third_party/blink/renderer/core/dom/range.cc
@@ -58,7 +58,6 @@
 #include "third_party/blink/renderer/platform/bindings/exception_state.h"
 #include "third_party/blink/renderer/platform/geometry/float_quad.h"
 #include "third_party/blink/renderer/platform/heap/heap.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/wtf/text/string_builder.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/core/editing/inline_box_position_test.cc b/third_party/blink/renderer/core/editing/inline_box_position_test.cc
index e546537..e86a5bd7 100644
--- a/third_party/blink/renderer/core/editing/inline_box_position_test.cc
+++ b/third_party/blink/renderer/core/editing/inline_box_position_test.cc
@@ -82,42 +82,4 @@
   EXPECT_EQ(1, box_position.offset_in_box);
 }
 
-TEST_F(InlineBoxPositionTest, DownstreamBeforeLineBreakLTR) {
-  // This test is for a bidi caret afinity specific behavior.
-  ScopedBidiCaretAffinityForTest scoped_bidi_affinity(true);
-
-  SetBodyContent("<div id=div>&#x05D0;&#x05D1;&#x05D2<br>ABC</div>");
-  const Element* const div = GetElementById("div");
-  const Node* const rtl_text = div->firstChild();
-  const PositionWithAffinity before_br(Position(rtl_text, 3),
-                                       TextAffinity::kDownstream);
-
-  const Element* const br = GetDocument().QuerySelector("br");
-  const InlineBox* const box =
-      To<LayoutText>(br->GetLayoutObject())->FirstTextBox();
-
-  const InlineBoxPosition box_position = ComputeInlineBoxPosition(before_br);
-  EXPECT_EQ(box, box_position.inline_box);
-  EXPECT_EQ(0, box_position.offset_in_box);
-}
-
-TEST_F(InlineBoxPositionTest, DownstreamBeforeLineBreakRTL) {
-  // This test is for a bidi caret afinity specific behavior.
-  ScopedBidiCaretAffinityForTest scoped_bidi_affinity(true);
-
-  SetBodyContent("<div id=div dir=rtl>ABC<br>&#x05D0;&#x05D1;&#x05D2;</div>");
-  const Element* const div = GetElementById("div");
-  const Node* const rtl_text = div->firstChild();
-  const PositionWithAffinity before_br(Position(rtl_text, 3),
-                                       TextAffinity::kDownstream);
-
-  const Element* const br = GetDocument().QuerySelector("br");
-  const InlineBox* const box =
-      To<LayoutText>(br->GetLayoutObject())->FirstTextBox();
-
-  const InlineBoxPosition box_position = ComputeInlineBoxPosition(before_br);
-  EXPECT_EQ(box, box_position.inline_box);
-  EXPECT_EQ(0, box_position.offset_in_box);
-}
-
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/execution_context/execution_context.h b/third_party/blink/renderer/core/execution_context/execution_context.h
index c5a7f40..89c20aa 100644
--- a/third_party/blink/renderer/core/execution_context/execution_context.h
+++ b/third_party/blink/renderer/core/execution_context/execution_context.h
@@ -362,6 +362,11 @@
   // https://html.spec.whatwg.org/C/webappapis.html#concept-settings-object-cross-origin-isolated-capability
   virtual bool CrossOriginIsolatedCapability() const = 0;
 
+  // Reflects the context's potential ability to use Direct Socket APIs.
+  //
+  // TODO(mkwst): We need a specification for the necessary restrictions.
+  virtual bool DirectSocketCapability() const = 0;
+
   // Returns true if SharedArrayBuffers can be transferred via PostMessage,
   // false otherwise. SharedArrayBuffer allows pages to craft high-precision
   // timers useful for Spectre-style side channel attacks, so are restricted
diff --git a/third_party/blink/renderer/core/execution_context/remote_security_context.cc b/third_party/blink/renderer/core/execution_context/remote_security_context.cc
index 80ca6a6..005580c 100644
--- a/third_party/blink/renderer/core/execution_context/remote_security_context.cc
+++ b/third_party/blink/renderer/core/execution_context/remote_security_context.cc
@@ -6,7 +6,6 @@
 
 #include "services/network/public/mojom/web_sandbox_flags.mojom-blink.h"
 #include "third_party/blink/renderer/core/frame/csp/content_security_policy.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/weborigin/security_origin.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/core/execution_context/security_context.cc b/third_party/blink/renderer/core/execution_context/security_context.cc
index d39b261..828202c 100644
--- a/third_party/blink/renderer/core/execution_context/security_context.cc
+++ b/third_party/blink/renderer/core/execution_context/security_context.cc
@@ -36,7 +36,6 @@
 #include "third_party/blink/public/mojom/security_context/insecure_request_policy.mojom-blink.h"
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/renderer/core/execution_context/execution_context.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/weborigin/scheme_registry.h"
 #include "third_party/blink/renderer/platform/weborigin/security_origin.h"
 
diff --git a/third_party/blink/renderer/core/fileapi/public_url_manager.cc b/third_party/blink/renderer/core/fileapi/public_url_manager.cc
index 40e1196..10cf001 100644
--- a/third_party/blink/renderer/core/fileapi/public_url_manager.cc
+++ b/third_party/blink/renderer/core/fileapi/public_url_manager.cc
@@ -35,7 +35,6 @@
 #include "third_party/blink/renderer/platform/blob/blob_data.h"
 #include "third_party/blink/renderer/platform/blob/blob_url.h"
 #include "third_party/blink/renderer/platform/blob/blob_url_null_origin_map.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/scheduler/main_thread/task_type_names.h"
 #include "third_party/blink/renderer/platform/weborigin/kurl.h"
 #include "third_party/blink/renderer/platform/weborigin/security_origin.h"
diff --git a/third_party/blink/renderer/core/frame/csp/content_security_policy_test.cc b/third_party/blink/renderer/core/frame/csp/content_security_policy_test.cc
index a987ecf0..48cd4d3 100644
--- a/third_party/blink/renderer/core/frame/csp/content_security_policy_test.cc
+++ b/third_party/blink/renderer/core/frame/csp/content_security_policy_test.cc
@@ -24,7 +24,6 @@
 #include "third_party/blink/renderer/platform/loader/fetch/resource_request.h"
 #include "third_party/blink/renderer/platform/loader/fetch/resource_response.h"
 #include "third_party/blink/renderer/platform/network/content_security_policy_parsers.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/testing/runtime_enabled_features_test_helpers.h"
 #include "third_party/blink/renderer/platform/weborigin/kurl.h"
 #include "third_party/blink/renderer/platform/weborigin/scheme_registry.h"
diff --git a/third_party/blink/renderer/core/frame/csp/execution_context_csp_delegate.cc b/third_party/blink/renderer/core/frame/csp/execution_context_csp_delegate.cc
index ca5ec22d..9797e80 100644
--- a/third_party/blink/renderer/core/frame/csp/execution_context_csp_delegate.cc
+++ b/third_party/blink/renderer/core/frame/csp/execution_context_csp_delegate.cc
@@ -26,7 +26,6 @@
 #include "third_party/blink/renderer/core/workers/worker_global_scope.h"
 #include "third_party/blink/renderer/platform/instrumentation/use_counter.h"
 #include "third_party/blink/renderer/platform/network/encoded_form_data.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/weborigin/security_origin.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/core/frame/deprecation.cc b/third_party/blink/renderer/core/frame/deprecation.cc
index d34271f..3870b1c 100644
--- a/third_party/blink/renderer/core/frame/deprecation.cc
+++ b/third_party/blink/renderer/core/frame/deprecation.cc
@@ -23,7 +23,6 @@
 #include "third_party/blink/renderer/core/page/page.h"
 #include "third_party/blink/renderer/core/workers/worker_or_worklet_global_scope.h"
 #include "third_party/blink/renderer/platform/heap/heap.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/wtf/date_math.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/core/frame/frame_test_helpers.h b/third_party/blink/renderer/core/frame/frame_test_helpers.h
index c8314c9..ab4a228 100644
--- a/third_party/blink/renderer/core/frame/frame_test_helpers.h
+++ b/third_party/blink/renderer/core/frame/frame_test_helpers.h
@@ -69,7 +69,6 @@
 #include "third_party/blink/renderer/core/scroll/scrollbar_theme.h"
 #include "third_party/blink/renderer/core/testing/scoped_mock_overlay_scrollbars.h"
 #include "third_party/blink/renderer/platform/loader/testing/web_url_loader_factory_with_mock.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
 #include "third_party/blink/renderer/platform/wtf/vector.h"
 
diff --git a/third_party/blink/renderer/core/frame/local_dom_window.cc b/third_party/blink/renderer/core/frame/local_dom_window.cc
index af30ea2..ed8efd8f 100644
--- a/third_party/blink/renderer/core/frame/local_dom_window.cc
+++ b/third_party/blink/renderer/core/frame/local_dom_window.cc
@@ -2095,6 +2095,12 @@
              mojom::blink::PermissionsPolicyFeature::kCrossOriginIsolated);
 }
 
+bool LocalDOMWindow::DirectSocketCapability() const {
+  return Agent::IsDirectSocketEnabled() &&
+         IsFeatureEnabled(
+             mojom::blink::PermissionsPolicyFeature::kDirectSockets);
+}
+
 ukm::UkmRecorder* LocalDOMWindow::UkmRecorder() {
   DCHECK(document_);
   return document_->UkmRecorder();
diff --git a/third_party/blink/renderer/core/frame/local_dom_window.h b/third_party/blink/renderer/core/frame/local_dom_window.h
index 3e7444e..5804da0 100644
--- a/third_party/blink/renderer/core/frame/local_dom_window.h
+++ b/third_party/blink/renderer/core/frame/local_dom_window.h
@@ -425,6 +425,7 @@
   void ClearIsolatedWorldCSPForTesting(int32_t world_id);
 
   bool CrossOriginIsolatedCapability() const override;
+  bool DirectSocketCapability() const override;
 
   // These delegate to the document_.
   ukm::UkmRecorder* UkmRecorder() override;
diff --git a/third_party/blink/renderer/core/frame/local_frame_view_test.cc b/third_party/blink/renderer/core/frame/local_frame_view_test.cc
index bd225910..5bfd280c 100644
--- a/third_party/blink/renderer/core/frame/local_frame_view_test.cc
+++ b/third_party/blink/renderer/core/frame/local_frame_view_test.cc
@@ -21,7 +21,6 @@
 #include "third_party/blink/renderer/core/testing/sim/sim_test.h"
 #include "third_party/blink/renderer/platform/geometry/int_size.h"
 #include "third_party/blink/renderer/platform/graphics/paint/paint_artifact.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/testing/unit_test_helpers.h"
 
 using blink::test::RunPendingTasks;
diff --git a/third_party/blink/renderer/core/html/custom/custom_element.cc b/third_party/blink/renderer/core/html/custom/custom_element.cc
index a80dd58..0a13fbd 100644
--- a/third_party/blink/renderer/core/html/custom/custom_element.cc
+++ b/third_party/blink/renderer/core/html/custom/custom_element.cc
@@ -17,7 +17,6 @@
 #include "third_party/blink/renderer/core/html_element_factory.h"
 #include "third_party/blink/renderer/core/html_element_type_helpers.h"
 #include "third_party/blink/renderer/platform/heap/heap.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/wtf/text/atomic_string_hash.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/core/html/forms/html_field_set_element.cc b/third_party/blink/renderer/core/html/forms/html_field_set_element.cc
index 53c4cfb..93ab4d0 100644
--- a/third_party/blink/renderer/core/html/forms/html_field_set_element.cc
+++ b/third_party/blink/renderer/core/html/forms/html_field_set_element.cc
@@ -33,7 +33,6 @@
 #include "third_party/blink/renderer/core/html_names.h"
 #include "third_party/blink/renderer/core/layout/layout_block.h"
 #include "third_party/blink/renderer/core/layout/layout_object_factory.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/wtf/std_lib_extras.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/core/html/html_html_element.cc b/third_party/blink/renderer/core/html/html_html_element.cc
index fcbcbcbb..eae0d41 100644
--- a/third_party/blink/renderer/core/html/html_html_element.cc
+++ b/third_party/blink/renderer/core/html/html_html_element.cc
@@ -37,7 +37,6 @@
 #include "third_party/blink/renderer/core/loader/frame_loader.h"
 #include "third_party/blink/renderer/core/style/computed_style.h"
 #include "third_party/blink/renderer/platform/heap/heap.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 
 namespace blink {
 
diff --git a/third_party/blink/renderer/core/html/html_meta_element_test.cc b/third_party/blink/renderer/core/html/html_meta_element_test.cc
index d44d3f14..e7e8bb3 100644
--- a/third_party/blink/renderer/core/html/html_meta_element_test.cc
+++ b/third_party/blink/renderer/core/html/html_meta_element_test.cc
@@ -24,7 +24,6 @@
 #include "third_party/blink/renderer/core/testing/sim/sim_request.h"
 #include "third_party/blink/renderer/core/testing/sim/sim_test.h"
 #include "third_party/blink/renderer/platform/heap/heap.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/testing/runtime_enabled_features_test_helpers.h"
 #include "third_party/blink/renderer/platform/testing/unit_test_helpers.h"
 
diff --git a/third_party/blink/renderer/core/html/link_rel_attribute.cc b/third_party/blink/renderer/core/html/link_rel_attribute.cc
index 614bed8..d994998 100644
--- a/third_party/blink/renderer/core/html/link_rel_attribute.cc
+++ b/third_party/blink/renderer/core/html/link_rel_attribute.cc
@@ -31,7 +31,6 @@
 
 #include "third_party/blink/renderer/core/html/link_rel_attribute.h"
 
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 
 namespace blink {
 
diff --git a/third_party/blink/renderer/core/input/event_handling_util.cc b/third_party/blink/renderer/core/input/event_handling_util.cc
index cc0c9cf4..84ee89c 100644
--- a/third_party/blink/renderer/core/input/event_handling_util.cc
+++ b/third_party/blink/renderer/core/input/event_handling_util.cc
@@ -13,7 +13,6 @@
 #include "third_party/blink/renderer/core/paint/paint_layer.h"
 #include "third_party/blink/renderer/core/paint/paint_layer_scrollable_area.h"
 #include "third_party/blink/renderer/core/scroll/scrollable_area.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 
 namespace blink {
 namespace event_handling_util {
diff --git a/third_party/blink/renderer/core/input/touch_event_manager.cc b/third_party/blink/renderer/core/input/touch_event_manager.cc
index 1f3a46d..8e849ce 100644
--- a/third_party/blink/renderer/core/input/touch_event_manager.cc
+++ b/third_party/blink/renderer/core/input/touch_event_manager.cc
@@ -24,7 +24,6 @@
 #include "third_party/blink/renderer/core/page/chrome_client.h"
 #include "third_party/blink/renderer/core/page/page.h"
 #include "third_party/blink/renderer/platform/instrumentation/histogram.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 
 namespace blink {
 
diff --git a/third_party/blink/renderer/core/inspector/worker_inspector_controller.cc b/third_party/blink/renderer/core/inspector/worker_inspector_controller.cc
index d91ab760..379dbd54 100644
--- a/third_party/blink/renderer/core/inspector/worker_inspector_controller.cc
+++ b/third_party/blink/renderer/core/inspector/worker_inspector_controller.cc
@@ -47,7 +47,6 @@
 #include "third_party/blink/renderer/core/workers/worker_backing_thread.h"
 #include "third_party/blink/renderer/core/workers/worker_global_scope.h"
 #include "third_party/blink/renderer/core/workers/worker_thread.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 
 namespace blink {
 
diff --git a/third_party/blink/renderer/core/layout/flexible_box_algorithm.cc b/third_party/blink/renderer/core/layout/flexible_box_algorithm.cc
index b58e7ccc..83977c6 100644
--- a/third_party/blink/renderer/core/layout/flexible_box_algorithm.cc
+++ b/third_party/blink/renderer/core/layout/flexible_box_algorithm.cc
@@ -34,7 +34,6 @@
 #include "third_party/blink/renderer/core/layout/layout_flexible_box.h"
 #include "third_party/blink/renderer/core/layout/min_max_sizes.h"
 #include "third_party/blink/renderer/core/layout/ng/ng_box_fragment.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 
 namespace blink {
 namespace {
diff --git a/third_party/blink/renderer/core/layout/layout_fieldset.cc b/third_party/blink/renderer/core/layout/layout_fieldset.cc
index c48da94..f7ec645 100644
--- a/third_party/blink/renderer/core/layout/layout_fieldset.cc
+++ b/third_party/blink/renderer/core/layout/layout_fieldset.cc
@@ -26,7 +26,6 @@
 #include "third_party/blink/renderer/core/css/css_property_names.h"
 #include "third_party/blink/renderer/core/html/forms/html_legend_element.h"
 #include "third_party/blink/renderer/core/paint/fieldset_painter.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 
 namespace blink {
 
diff --git a/third_party/blink/renderer/core/layout/layout_flexible_box.cc b/third_party/blink/renderer/core/layout/layout_flexible_box.cc
index db3eb4e..aebfd153 100644
--- a/third_party/blink/renderer/core/layout/layout_flexible_box.cc
+++ b/third_party/blink/renderer/core/layout/layout_flexible_box.cc
@@ -51,7 +51,6 @@
 #include "third_party/blink/renderer/core/style/computed_style.h"
 #include "third_party/blink/renderer/platform/geometry/length_functions.h"
 #include "third_party/blink/renderer/platform/instrumentation/use_counter.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/wtf/math_extras.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/core/layout/layout_list_marker_test.cc b/third_party/blink/renderer/core/layout/layout_list_marker_test.cc
index 716031f..9f117257 100644
--- a/third_party/blink/renderer/core/layout/layout_list_marker_test.cc
+++ b/third_party/blink/renderer/core/layout/layout_list_marker_test.cc
@@ -6,7 +6,6 @@
 
 #include "third_party/blink/renderer/core/layout/layout_list_item.h"
 #include "third_party/blink/renderer/core/testing/core_unit_test_helper.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/testing/runtime_enabled_features_test_helpers.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/core/layout/layout_replaced.cc b/third_party/blink/renderer/core/layout/layout_replaced.cc
index cfefa626..8f9f6f4 100644
--- a/third_party/blink/renderer/core/layout/layout_replaced.cc
+++ b/third_party/blink/renderer/core/layout/layout_replaced.cc
@@ -41,7 +41,6 @@
 #include "third_party/blink/renderer/core/paint/paint_layer.h"
 #include "third_party/blink/renderer/core/paint/replaced_painter.h"
 #include "third_party/blink/renderer/platform/geometry/length_functions.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 
 namespace blink {
 
diff --git a/third_party/blink/renderer/core/layout/layout_shift_tracker.cc b/third_party/blink/renderer/core/layout/layout_shift_tracker.cc
index b8ac07c..fe1ec96d 100644
--- a/third_party/blink/renderer/core/layout/layout_shift_tracker.cc
+++ b/third_party/blink/renderer/core/layout/layout_shift_tracker.cc
@@ -26,7 +26,6 @@
 #include "third_party/blink/renderer/platform/graphics/graphics_layer.h"
 #include "third_party/blink/renderer/platform/graphics/paint/geometry_mapper.h"
 #include "third_party/blink/renderer/platform/graphics/paint/property_tree_state.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "ui/gfx/geometry/rect.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/core/layout/layout_theme_win.cc b/third_party/blink/renderer/core/layout/layout_theme_win.cc
index cddc7d1c..cb9d18c 100644
--- a/third_party/blink/renderer/core/layout/layout_theme_win.cc
+++ b/third_party/blink/renderer/core/layout/layout_theme_win.cc
@@ -7,7 +7,6 @@
 #include <windows.h>
 
 #include "third_party/blink/public/platform/platform.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/web_test_support.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/core/layout/ng/custom/layout_worklet_global_scope_proxy.cc b/third_party/blink/renderer/core/layout/ng/custom/layout_worklet_global_scope_proxy.cc
index fc56661..9924b19 100644
--- a/third_party/blink/renderer/core/layout/ng/custom/layout_worklet_global_scope_proxy.cc
+++ b/third_party/blink/renderer/core/layout/ng/custom/layout_worklet_global_scope_proxy.cc
@@ -54,7 +54,8 @@
       BeginFrameProviderParams(), nullptr /* parent_permissions_policy */,
       window->GetAgentClusterID(), ukm::kInvalidSourceId,
       window->GetExecutionContextToken(),
-      window->CrossOriginIsolatedCapability());
+      window->CrossOriginIsolatedCapability(),
+      window->DirectSocketCapability());
   global_scope_ = LayoutWorkletGlobalScope::Create(
       frame, std::move(creation_params), *reporting_proxy_,
       pending_layout_registry);
diff --git a/third_party/blink/renderer/core/layout/ng/ng_fragment_child_iterator.cc b/third_party/blink/renderer/core/layout/ng/ng_fragment_child_iterator.cc
index a84447d..cfbdc310 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_fragment_child_iterator.cc
+++ b/third_party/blink/renderer/core/layout/ng/ng_fragment_child_iterator.cc
@@ -8,7 +8,6 @@
 #include "third_party/blink/renderer/core/layout/ng/ng_block_break_token.h"
 #include "third_party/blink/renderer/core/layout/ng/ng_fragmentation_utils.h"
 #include "third_party/blink/renderer/core/layout/ng/ng_layout_input_node.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 
 namespace blink {
 
diff --git a/third_party/blink/renderer/core/loader/link_loader_test.cc b/third_party/blink/renderer/core/loader/link_loader_test.cc
index 0797429..b96aa29 100644
--- a/third_party/blink/renderer/core/loader/link_loader_test.cc
+++ b/third_party/blink/renderer/core/loader/link_loader_test.cc
@@ -31,7 +31,6 @@
 #include "third_party/blink/renderer/platform/loader/fetch/memory_cache.h"
 #include "third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h"
 #include "third_party/blink/renderer/platform/loader/fetch/resource_load_priority.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/testing/testing_platform_support.h"
 #include "third_party/blink/renderer/platform/testing/url_test_helpers.h"
 
diff --git a/third_party/blink/renderer/core/loader/prefetched_signed_exchange_manager.cc b/third_party/blink/renderer/core/loader/prefetched_signed_exchange_manager.cc
index fccba8e..dbf56e1 100644
--- a/third_party/blink/renderer/core/loader/prefetched_signed_exchange_manager.cc
+++ b/third_party/blink/renderer/core/loader/prefetched_signed_exchange_manager.cc
@@ -29,7 +29,6 @@
 #include "third_party/blink/renderer/core/loader/alternate_signed_exchange_resource_info.h"
 #include "third_party/blink/renderer/platform/heap/heap.h"
 #include "third_party/blink/renderer/platform/loader/link_header.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/scheduler/public/frame_scheduler.h"
 #include "third_party/blink/renderer/platform/weborigin/kurl.h"
 #include "third_party/blink/renderer/platform/weborigin/kurl_hash.h"
diff --git a/third_party/blink/renderer/core/loader/resource/css_style_sheet_resource.cc b/third_party/blink/renderer/core/loader/resource/css_style_sheet_resource.cc
index 4184294c..81f1b1b 100644
--- a/third_party/blink/renderer/core/loader/resource/css_style_sheet_resource.cc
+++ b/third_party/blink/renderer/core/loader/resource/css_style_sheet_resource.cc
@@ -37,7 +37,6 @@
 #include "third_party/blink/renderer/platform/loader/fetch/text_resource_decoder_options.h"
 #include "third_party/blink/renderer/platform/network/http_names.h"
 #include "third_party/blink/renderer/platform/network/mime/mime_type_registry.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/weborigin/security_policy.h"
 #include "third_party/blink/renderer/platform/wtf/text/text_encoding.h"
 
diff --git a/third_party/blink/renderer/core/loader/resource/font_resource_test.cc b/third_party/blink/renderer/core/loader/resource/font_resource_test.cc
index e466c0b1..035b707 100644
--- a/third_party/blink/renderer/core/loader/resource/font_resource_test.cc
+++ b/third_party/blink/renderer/core/loader/resource/font_resource_test.cc
@@ -25,7 +25,6 @@
 #include "third_party/blink/renderer/platform/loader/testing/mock_resource_client.h"
 #include "third_party/blink/renderer/platform/loader/testing/test_loader_factory.h"
 #include "third_party/blink/renderer/platform/loader/testing/test_resource_fetcher_properties.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/testing/mock_context_lifecycle_notifier.h"
 #include "third_party/blink/renderer/platform/testing/url_test_helpers.h"
 #include "third_party/blink/renderer/platform/weborigin/kurl.h"
diff --git a/third_party/blink/renderer/core/loader/resource/image_resource.cc b/third_party/blink/renderer/core/loader/resource/image_resource.cc
index afa8076..573cef2 100644
--- a/third_party/blink/renderer/core/loader/resource/image_resource.cc
+++ b/third_party/blink/renderer/core/loader/resource/image_resource.cc
@@ -48,7 +48,6 @@
 #include "third_party/blink/renderer/platform/loader/fetch/unique_identifier.h"
 #include "third_party/blink/renderer/platform/network/http_parsers.h"
 #include "third_party/blink/renderer/platform/network/network_utils.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/weborigin/kurl.h"
 #include "third_party/blink/renderer/platform/weborigin/reporting_disposition.h"
 #include "third_party/blink/renderer/platform/wtf/functional.h"
diff --git a/third_party/blink/renderer/core/loader/resource/script_resource.cc b/third_party/blink/renderer/core/loader/resource/script_resource.cc
index 5ef4891..80238ec 100644
--- a/third_party/blink/renderer/core/loader/resource/script_resource.cc
+++ b/third_party/blink/renderer/core/loader/resource/script_resource.cc
@@ -48,7 +48,6 @@
 #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/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/wtf/functional.h"
 #include "third_party/blink/renderer/platform/wtf/shared_buffer.h"
 
diff --git a/third_party/blink/renderer/core/origin_trials/origin_trials_test.cc b/third_party/blink/renderer/core/origin_trials/origin_trials_test.cc
index bcba30e3..805430d 100644
--- a/third_party/blink/renderer/core/origin_trials/origin_trials_test.cc
+++ b/third_party/blink/renderer/core/origin_trials/origin_trials_test.cc
@@ -5,7 +5,6 @@
 #include "third_party/blink/renderer/core/origin_trials/origin_trials.h"
 
 #include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 
 namespace blink {
 namespace {
diff --git a/third_party/blink/renderer/core/page/drag_image.cc b/third_party/blink/renderer/core/page/drag_image.cc
index be32e88..150b113 100644
--- a/third_party/blink/renderer/core/page/drag_image.cc
+++ b/third_party/blink/renderer/core/page/drag_image.cc
@@ -47,7 +47,6 @@
 #include "third_party/blink/renderer/platform/graphics/graphics_context.h"
 #include "third_party/blink/renderer/platform/graphics/paint/drawing_recorder.h"
 #include "third_party/blink/renderer/platform/graphics/static_bitmap_image.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/text/bidi_text_run.h"
 #include "third_party/blink/renderer/platform/text/text_run.h"
 #include "third_party/blink/renderer/platform/transforms/affine_transform.h"
diff --git a/third_party/blink/renderer/core/page/page_widget_delegate.cc b/third_party/blink/renderer/core/page/page_widget_delegate.cc
index 7276be98..02d9fcf 100644
--- a/third_party/blink/renderer/core/page/page_widget_delegate.cc
+++ b/third_party/blink/renderer/core/page/page_widget_delegate.cc
@@ -41,7 +41,6 @@
 #include "third_party/blink/renderer/core/page/autoscroll_controller.h"
 #include "third_party/blink/renderer/core/page/page.h"
 #include "third_party/blink/renderer/core/page/validation_message_client.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 
 namespace blink {
 
diff --git a/third_party/blink/renderer/core/page/scrolling/scrolling_coordinator.cc b/third_party/blink/renderer/core/page/scrolling/scrolling_coordinator.cc
index b4bb407..f902184 100644
--- a/third_party/blink/renderer/core/page/scrolling/scrolling_coordinator.cc
+++ b/third_party/blink/renderer/core/page/scrolling/scrolling_coordinator.cc
@@ -55,7 +55,6 @@
 #include "third_party/blink/renderer/platform/graphics/graphics_layer.h"
 #include "third_party/blink/renderer/platform/instrumentation/histogram.h"
 #include "third_party/blink/renderer/platform/instrumentation/tracing/trace_event.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 
 namespace blink {
 
diff --git a/third_party/blink/renderer/core/paint/image_element_timing.cc b/third_party/blink/renderer/core/paint/image_element_timing.cc
index 51157ba..04abdbb 100644
--- a/third_party/blink/renderer/core/paint/image_element_timing.cc
+++ b/third_party/blink/renderer/core/paint/image_element_timing.cc
@@ -13,7 +13,6 @@
 #include "third_party/blink/renderer/core/timing/dom_window_performance.h"
 #include "third_party/blink/renderer/core/timing/window_performance.h"
 #include "third_party/blink/renderer/platform/graphics/paint/property_tree_state.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/weborigin/security_origin.h"
 #include "third_party/blink/renderer/platform/wtf/cross_thread_functional.h"
 #include "third_party/blink/renderer/platform/wtf/text/atomic_string.h"
diff --git a/third_party/blink/renderer/core/paint/ng/ng_fragment_painter.cc b/third_party/blink/renderer/core/paint/ng/ng_fragment_painter.cc
index b8aa544b..dd8d402d 100644
--- a/third_party/blink/renderer/core/paint/ng/ng_fragment_painter.cc
+++ b/third_party/blink/renderer/core/paint/ng/ng_fragment_painter.cc
@@ -9,7 +9,6 @@
 #include "third_party/blink/renderer/core/style/computed_style.h"
 #include "third_party/blink/renderer/platform/graphics/graphics_context_state_saver.h"
 #include "third_party/blink/renderer/platform/graphics/paint/drawing_recorder.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 
 namespace blink {
 
diff --git a/third_party/blink/renderer/core/paint/object_painter.h b/third_party/blink/renderer/core/paint/object_painter.h
index 48310eeb..25a0c8b 100644
--- a/third_party/blink/renderer/core/paint/object_painter.h
+++ b/third_party/blink/renderer/core/paint/object_painter.h
@@ -7,7 +7,6 @@
 
 #include "third_party/blink/renderer/core/paint/object_painter_base.h"
 #include "third_party/blink/renderer/core/style/computed_style_constants.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/core/paint/svg_image_painter.cc b/third_party/blink/renderer/core/paint/svg_image_painter.cc
index 7de95a3..0f1f5c9 100644
--- a/third_party/blink/renderer/core/paint/svg_image_painter.cc
+++ b/third_party/blink/renderer/core/paint/svg_image_painter.cc
@@ -21,7 +21,6 @@
 #include "third_party/blink/renderer/platform/graphics/graphics_context.h"
 #include "third_party/blink/renderer/platform/graphics/paint/drawing_recorder.h"
 #include "third_party/blink/renderer/platform/graphics/scoped_interpolation_quality.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 
 namespace blink {
 
diff --git a/third_party/blink/renderer/core/paint/text_element_timing.cc b/third_party/blink/renderer/core/paint/text_element_timing.cc
index b96461d..233a412 100644
--- a/third_party/blink/renderer/core/paint/text_element_timing.cc
+++ b/third_party/blink/renderer/core/paint/text_element_timing.cc
@@ -14,7 +14,6 @@
 #include "third_party/blink/renderer/platform/geometry/int_rect.h"
 #include "third_party/blink/renderer/platform/graphics/paint/float_clip_rect.h"
 #include "third_party/blink/renderer/platform/graphics/paint/geometry_mapper.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 
 namespace blink {
 
diff --git a/third_party/blink/renderer/core/paint/text_paint_timing_detector.h b/third_party/blink/renderer/core/paint/text_paint_timing_detector.h
index 36387eb..46ff815 100644
--- a/third_party/blink/renderer/core/paint/text_paint_timing_detector.h
+++ b/third_party/blink/renderer/core/paint/text_paint_timing_detector.h
@@ -12,7 +12,6 @@
 #include "third_party/blink/renderer/core/dom/dom_node_ids.h"
 #include "third_party/blink/renderer/core/paint/paint_timing_detector.h"
 #include "third_party/blink/renderer/core/paint/text_element_timing.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/wtf/hash_set.h"
 #include "third_party/blink/renderer/platform/wtf/vector.h"
 
diff --git a/third_party/blink/renderer/core/permissions_policy/permissions_policy_features.json5 b/third_party/blink/renderer/core/permissions_policy/permissions_policy_features.json5
index d324424f..2b387180 100644
--- a/third_party/blink/renderer/core/permissions_policy/permissions_policy_features.json5
+++ b/third_party/blink/renderer/core/permissions_policy/permissions_policy_features.json5
@@ -147,6 +147,11 @@
       depends_on: ["CrossOriginIsolation"],
     },
     {
+      name: "DirectSockets",
+      permissions_policy_name: "direct-sockets",
+      depends_on: ["DirectSockets"],
+    },
+    {
       name: "DisplayCapture",
       permissions_policy_name: "display-capture",
       depends_on: ["GetCurrentBrowsingContextMedia"],
diff --git a/third_party/blink/renderer/core/permissions_policy/permissions_policy_parser.cc b/third_party/blink/renderer/core/permissions_policy/permissions_policy_parser.cc
index 99ee153..7199468 100644
--- a/third_party/blink/renderer/core/permissions_policy/permissions_policy_parser.cc
+++ b/third_party/blink/renderer/core/permissions_policy/permissions_policy_parser.cc
@@ -17,7 +17,6 @@
 #include "third_party/blink/renderer/platform/instrumentation/use_counter.h"
 #include "third_party/blink/renderer/platform/json/json_values.h"
 #include "third_party/blink/renderer/platform/network/http_parsers.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/weborigin/security_origin.h"
 #include "third_party/blink/renderer/platform/wtf/hash_set.h"
 #include "third_party/blink/renderer/platform/wtf/text/string_utf8_adaptor.h"
diff --git a/third_party/blink/renderer/core/resize_observer/resize_observer_entry.cc b/third_party/blink/renderer/core/resize_observer/resize_observer_entry.cc
index fac588a7..6cc6ecea 100644
--- a/third_party/blink/renderer/core/resize_observer/resize_observer_entry.cc
+++ b/third_party/blink/renderer/core/resize_observer/resize_observer_entry.cc
@@ -17,7 +17,6 @@
 #include "third_party/blink/renderer/platform/geometry/layout_rect.h"
 #include "third_party/blink/renderer/platform/geometry/layout_size.h"
 #include "third_party/blink/renderer/platform/geometry/layout_unit.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 
 namespace blink {
 
diff --git a/third_party/blink/renderer/core/script/import_map.cc b/third_party/blink/renderer/core/script/import_map.cc
index 1e1a78b6..ef6e0a5 100644
--- a/third_party/blink/renderer/core/script/import_map.cc
+++ b/third_party/blink/renderer/core/script/import_map.cc
@@ -13,7 +13,6 @@
 #include "third_party/blink/renderer/platform/json/json_parser.h"
 #include "third_party/blink/renderer/platform/json/json_values.h"
 #include "third_party/blink/renderer/platform/loader/fetch/console_logger.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/weborigin/scheme_registry.h"
 #include "third_party/blink/renderer/platform/wtf/text/string_builder.h"
 
diff --git a/third_party/blink/renderer/core/script/worker_modulator_impl.cc b/third_party/blink/renderer/core/script/worker_modulator_impl.cc
index 0ea151a..56e1adbd 100644
--- a/third_party/blink/renderer/core/script/worker_modulator_impl.cc
+++ b/third_party/blink/renderer/core/script/worker_modulator_impl.cc
@@ -8,7 +8,6 @@
 #include "third_party/blink/renderer/core/loader/modulescript/installed_service_worker_module_script_fetcher.h"
 #include "third_party/blink/renderer/core/loader/modulescript/worker_module_script_fetcher.h"
 #include "third_party/blink/renderer/core/workers/worker_global_scope.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 
 namespace blink {
 
diff --git a/third_party/blink/renderer/core/scroll/scrollbar_theme.cc b/third_party/blink/renderer/core/scroll/scrollbar_theme.cc
index c0de6f95..b1f67d0 100644
--- a/third_party/blink/renderer/core/scroll/scrollbar_theme.cc
+++ b/third_party/blink/renderer/core/scroll/scrollbar_theme.cc
@@ -39,7 +39,6 @@
 #include "third_party/blink/renderer/platform/graphics/paint/drawing_display_item.h"
 #include "third_party/blink/renderer/platform/graphics/paint/drawing_recorder.h"
 #include "third_party/blink/renderer/platform/graphics/paint/paint_controller.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 
 #if !defined(OS_MAC)
 #include "third_party/blink/public/platform/web_theme_engine.h"
diff --git a/third_party/blink/renderer/core/scroll/scrollbar_theme_aura.cc b/third_party/blink/renderer/core/scroll/scrollbar_theme_aura.cc
index 1ab3595..cf70539a 100644
--- a/third_party/blink/renderer/core/scroll/scrollbar_theme_aura.cc
+++ b/third_party/blink/renderer/core/scroll/scrollbar_theme_aura.cc
@@ -43,7 +43,6 @@
 #include "third_party/blink/renderer/platform/geometry/int_rect_outsets.h"
 #include "third_party/blink/renderer/platform/graphics/graphics_context.h"
 #include "third_party/blink/renderer/platform/graphics/paint/drawing_recorder.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/web_test_support.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/core/testing/null_execution_context.h b/third_party/blink/renderer/core/testing/null_execution_context.h
index ec4aec0..b9e8f84 100644
--- a/third_party/blink/renderer/core/testing/null_execution_context.h
+++ b/third_party/blink/renderer/core/testing/null_execution_context.h
@@ -49,6 +49,7 @@
 
   ResourceFetcher* Fetcher() const override { return nullptr; }
   bool CrossOriginIsolatedCapability() const override { return false; }
+  bool DirectSocketCapability() const override { return false; }
   FrameOrWorkerScheduler* GetScheduler() override;
   scoped_refptr<base::SingleThreadTaskRunner> GetTaskRunner(TaskType) override;
 
diff --git a/third_party/blink/renderer/core/timing/performance_long_task_timing.cc b/third_party/blink/renderer/core/timing/performance_long_task_timing.cc
index a901c81b..2110404 100644
--- a/third_party/blink/renderer/core/timing/performance_long_task_timing.cc
+++ b/third_party/blink/renderer/core/timing/performance_long_task_timing.cc
@@ -9,7 +9,6 @@
 #include "third_party/blink/renderer/core/performance_entry_names.h"
 #include "third_party/blink/renderer/core/timing/task_attribution_timing.h"
 #include "third_party/blink/renderer/platform/heap/heap.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 
 namespace blink {
 
diff --git a/third_party/blink/renderer/core/trustedtypes/trusted_type_policy.cc b/third_party/blink/renderer/core/trustedtypes/trusted_type_policy.cc
index b21e05d..456f9fd 100644
--- a/third_party/blink/renderer/core/trustedtypes/trusted_type_policy.cc
+++ b/third_party/blink/renderer/core/trustedtypes/trusted_type_policy.cc
@@ -12,7 +12,6 @@
 #include "third_party/blink/renderer/core/trustedtypes/trusted_script_url.h"
 #include "third_party/blink/renderer/platform/bindings/exception_state.h"
 #include "third_party/blink/renderer/platform/bindings/to_v8.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 
 namespace blink {
 
diff --git a/third_party/blink/renderer/core/workers/dedicated_worker.cc b/third_party/blink/renderer/core/workers/dedicated_worker.cc
index 0e6112a..e1d7e15 100644
--- a/third_party/blink/renderer/core/workers/dedicated_worker.cc
+++ b/third_party/blink/renderer/core/workers/dedicated_worker.cc
@@ -453,7 +453,8 @@
       GetExecutionContext()->GetAgentClusterID(),
       GetExecutionContext()->UkmSourceID(),
       GetExecutionContext()->GetExecutionContextToken(),
-      GetExecutionContext()->CrossOriginIsolatedCapability());
+      GetExecutionContext()->CrossOriginIsolatedCapability(),
+      GetExecutionContext()->DirectSocketCapability());
 }
 
 scoped_refptr<WebWorkerFetchContext>
diff --git a/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.cc b/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.cc
index bcd8d6e..0db1af8 100644
--- a/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.cc
+++ b/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.cc
@@ -79,11 +79,13 @@
       creation_params->response_address_space;
   const bool parent_cross_origin_isolated_capability =
       creation_params->parent_cross_origin_isolated_capability;
+  const bool parent_direct_socket_capability =
+      creation_params->parent_direct_socket_capability;
 
   auto* global_scope = MakeGarbageCollected<DedicatedWorkerGlobalScope>(
       std::move(creation_params), thread, time_origin,
       std::move(outside_origin_trial_tokens), begin_frame_provider_params,
-      parent_cross_origin_isolated_capability,
+      parent_cross_origin_isolated_capability, parent_direct_socket_capability,
       std::move(dedicated_worker_host));
 
   if (global_scope->IsOffMainThreadScriptFetchDisabled()) {
@@ -130,6 +132,7 @@
     std::unique_ptr<Vector<String>> outside_origin_trial_tokens,
     const BeginFrameProviderParams& begin_frame_provider_params,
     bool parent_cross_origin_isolated_capability,
+    bool parent_direct_socket_capability,
     mojo::PendingRemote<mojom::blink::DedicatedWorkerHost>
         dedicated_worker_host)
     : DedicatedWorkerGlobalScope(
@@ -139,6 +142,7 @@
           std::move(outside_origin_trial_tokens),
           begin_frame_provider_params,
           parent_cross_origin_isolated_capability,
+          parent_direct_socket_capability,
           std::move(dedicated_worker_host)) {}
 
 DedicatedWorkerGlobalScope::DedicatedWorkerGlobalScope(
@@ -148,6 +152,7 @@
     std::unique_ptr<Vector<String>> outside_origin_trial_tokens,
     const BeginFrameProviderParams& begin_frame_provider_params,
     bool parent_cross_origin_isolated_capability,
+    bool parent_direct_socket_capability,
     mojo::PendingRemote<mojom::blink::DedicatedWorkerHost>
         dedicated_worker_host)
     : WorkerGlobalScope(std::move(parsed_creation_params.creation_params),
@@ -156,6 +161,7 @@
       token_(thread->WorkerObjectProxy().token()),
       parent_token_(parsed_creation_params.parent_context_token),
       cross_origin_isolated_capability_(Agent::IsCrossOriginIsolated()),
+      direct_socket_capability_(Agent::IsDirectSocketEnabled()),
       animation_frame_provider_(
           MakeGarbageCollected<WorkerAnimationFrameProvider>(
               this,
@@ -167,6 +173,12 @@
   if (!parent_cross_origin_isolated_capability) {
     cross_origin_isolated_capability_ = false;
   }
+
+  // TODO(mkwst): This needs a specification.
+  if (!parent_direct_socket_capability) {
+    direct_socket_capability_ = false;
+  }
+
   // Dedicated workers don't need to pause after script fetch.
   ReadyToRunWorkerScript();
   // Inherit the outside's origin trial tokens.
@@ -228,6 +240,9 @@
   // then set worker global scope's cross-origin isolated capability to false."
   if (response_url.ProtocolIsData()) {
     cross_origin_isolated_capability_ = false;
+
+    // TODO(mkwst): This needs a spec.
+    direct_socket_capability_ = false;
   }
 }
 
diff --git a/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.h b/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.h
index 703b1a7f0..be66494f4 100644
--- a/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.h
+++ b/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.h
@@ -72,6 +72,7 @@
       std::unique_ptr<Vector<String>> outside_origin_trial_tokens,
       const BeginFrameProviderParams& begin_frame_provider_params,
       bool parent_cross_origin_isolated_capability,
+      bool direct_socket_isolated_capability,
       mojo::PendingRemote<mojom::blink::DedicatedWorkerHost>
           dedicated_worker_host);
 
@@ -143,6 +144,9 @@
   bool CrossOriginIsolatedCapability() const final {
     return cross_origin_isolated_capability_;
   }
+  bool DirectSocketCapability() const final {
+    return direct_socket_capability_;
+  }
   ExecutionContextToken GetExecutionContextToken() const final {
     return token_;
   }
@@ -175,6 +179,7 @@
       std::unique_ptr<Vector<String>> outside_origin_trial_tokens,
       const BeginFrameProviderParams& begin_frame_provider_params,
       bool parent_cross_origin_isolated_capability,
+      bool direct_socket_capability,
       mojo::PendingRemote<mojom::blink::DedicatedWorkerHost>
           dedicated_worker_host);
 
@@ -190,6 +195,7 @@
   // The ID of the parent context that owns this worker.
   const ExecutionContextToken parent_token_;
   bool cross_origin_isolated_capability_;
+  bool direct_socket_capability_;
   Member<WorkerAnimationFrameProvider> animation_frame_provider_;
   RejectCoepUnsafeNone reject_coep_unsafe_none_ = RejectCoepUnsafeNone(false);
 
diff --git a/third_party/blink/renderer/core/workers/global_scope_creation_params.cc b/third_party/blink/renderer/core/workers/global_scope_creation_params.cc
index 6f9c1f1f..19632f85 100644
--- a/third_party/blink/renderer/core/workers/global_scope_creation_params.cc
+++ b/third_party/blink/renderer/core/workers/global_scope_creation_params.cc
@@ -41,7 +41,8 @@
     base::UnguessableToken agent_cluster_id,
     ukm::SourceId ukm_source_id,
     const base::Optional<ExecutionContextToken>& parent_context_token,
-    bool parent_cross_origin_isolated_capability)
+    bool parent_cross_origin_isolated_capability,
+    bool parent_direct_socket_capability)
     : script_url(script_url.Copy()),
       script_type(script_type),
       global_scope_name(global_scope_name.IsolatedCopy()),
@@ -73,7 +74,8 @@
       ukm_source_id(ukm_source_id),
       parent_context_token(parent_context_token),
       parent_cross_origin_isolated_capability(
-          parent_cross_origin_isolated_capability) {
+          parent_cross_origin_isolated_capability),
+      parent_direct_socket_capability(parent_direct_socket_capability) {
   this->origin_trial_tokens = std::make_unique<Vector<String>>();
   if (origin_trial_tokens) {
     for (const String& token : *origin_trial_tokens)
diff --git a/third_party/blink/renderer/core/workers/global_scope_creation_params.h b/third_party/blink/renderer/core/workers/global_scope_creation_params.h
index 92612eb4..ea31e87f 100644
--- a/third_party/blink/renderer/core/workers/global_scope_creation_params.h
+++ b/third_party/blink/renderer/core/workers/global_scope_creation_params.h
@@ -70,7 +70,8 @@
       ukm::SourceId ukm_source_id = ukm::kInvalidSourceId,
       const base::Optional<ExecutionContextToken>& parent_context_token =
           base::nullopt,
-      bool parent_cross_origin_isolated_capability = false);
+      bool parent_cross_origin_isolated_capability = false,
+      bool parent_direct_socket_capability = false);
 
   ~GlobalScopeCreationParams() = default;
 
@@ -180,6 +181,12 @@
   // Used by dedicated workers, and set to false when there is no parent.
   const bool parent_cross_origin_isolated_capability;
 
+  // Governs whether Direct Sockets are available in a worker context, false
+  // when no parent exists.
+  //
+  // TODO(mkwst): We need a specification for this capability.
+  const bool parent_direct_socket_capability;
+
   DISALLOW_COPY_AND_ASSIGN(GlobalScopeCreationParams);
 };
 
diff --git a/third_party/blink/renderer/core/workers/shared_worker_global_scope.cc b/third_party/blink/renderer/core/workers/shared_worker_global_scope.cc
index 361d984..2453b5e 100644
--- a/third_party/blink/renderer/core/workers/shared_worker_global_scope.cc
+++ b/third_party/blink/renderer/core/workers/shared_worker_global_scope.cc
@@ -287,4 +287,8 @@
   return Agent::IsCrossOriginIsolated();
 }
 
+bool SharedWorkerGlobalScope::DirectSocketCapability() const {
+  return Agent::IsDirectSocketEnabled();
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/workers/shared_worker_global_scope.h b/third_party/blink/renderer/core/workers/shared_worker_global_scope.h
index 2975046..52396ca2 100644
--- a/third_party/blink/renderer/core/workers/shared_worker_global_scope.h
+++ b/third_party/blink/renderer/core/workers/shared_worker_global_scope.h
@@ -101,6 +101,7 @@
   const SharedWorkerToken& GetSharedWorkerToken() const { return token_; }
   WorkerToken GetWorkerToken() const final { return token_; }
   bool CrossOriginIsolatedCapability() const final;
+  bool DirectSocketCapability() const final;
   ExecutionContextToken GetExecutionContextToken() const final {
     return token_;
   }
diff --git a/third_party/blink/renderer/core/workers/threaded_worklet_messaging_proxy.cc b/third_party/blink/renderer/core/workers/threaded_worklet_messaging_proxy.cc
index 8814fb4c..6f4f8a4e 100644
--- a/third_party/blink/renderer/core/workers/threaded_worklet_messaging_proxy.cc
+++ b/third_party/blink/renderer/core/workers/threaded_worklet_messaging_proxy.cc
@@ -77,7 +77,8 @@
           BeginFrameProviderParams(), nullptr /* parent_permissions_policy */,
           window->GetAgentClusterID(), ukm::kInvalidSourceId,
           window->GetExecutionContextToken(),
-          window->CrossOriginIsolatedCapability());
+          window->CrossOriginIsolatedCapability(),
+          window->DirectSocketCapability());
 
   // Worklets share the pre-initialized backing thread so that we don't have to
   // specify the backing thread startup data.
diff --git a/third_party/blink/renderer/core/workers/worker_classic_script_loader.cc b/third_party/blink/renderer/core/workers/worker_classic_script_loader.cc
index ac6db8f..405467d 100644
--- a/third_party/blink/renderer/core/workers/worker_classic_script_loader.cc
+++ b/third_party/blink/renderer/core/workers/worker_classic_script_loader.cc
@@ -50,7 +50,6 @@
 #include "third_party/blink/renderer/platform/network/content_security_policy_response_headers.h"
 #include "third_party/blink/renderer/platform/network/http_names.h"
 #include "third_party/blink/renderer/platform/network/network_utils.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/weborigin/referrer.h"
 #include "third_party/blink/renderer/platform/weborigin/security_origin.h"
 
diff --git a/third_party/blink/renderer/core/workers/worker_thread.cc b/third_party/blink/renderer/core/workers/worker_thread.cc
index 0ac53dd..78b7355 100644
--- a/third_party/blink/renderer/core/workers/worker_thread.cc
+++ b/third_party/blink/renderer/core/workers/worker_thread.cc
@@ -57,7 +57,6 @@
 #include "third_party/blink/renderer/platform/instrumentation/tracing/trace_event.h"
 #include "third_party/blink/renderer/platform/loader/fetch/fetch_client_settings_object_snapshot.h"
 #include "third_party/blink/renderer/platform/loader/fetch/worker_resource_timing_notifier.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/scheduler/public/event_loop.h"
 #include "third_party/blink/renderer/platform/scheduler/public/worker_scheduler.h"
 #include "third_party/blink/renderer/platform/scheduler/worker/worker_thread.h"
diff --git a/third_party/blink/renderer/core/workers/worker_thread_test_helper.h b/third_party/blink/renderer/core/workers/worker_thread_test_helper.h
index b5da6ef..0924cdd2 100644
--- a/third_party/blink/renderer/core/workers/worker_thread_test_helper.h
+++ b/third_party/blink/renderer/core/workers/worker_thread_test_helper.h
@@ -110,6 +110,7 @@
   // Returns a token uniquely identifying this fake worker.
   WorkerToken GetWorkerToken() const final { return token_; }
   bool CrossOriginIsolatedCapability() const final { return false; }
+  bool DirectSocketCapability() const final { return false; }
   ExecutionContextToken GetExecutionContextToken() const final {
     return token_;
   }
diff --git a/third_party/blink/renderer/core/workers/worklet_global_scope.cc b/third_party/blink/renderer/core/workers/worklet_global_scope.cc
index bbbf732d..b3a72cb6 100644
--- a/third_party/blink/renderer/core/workers/worklet_global_scope.cc
+++ b/third_party/blink/renderer/core/workers/worklet_global_scope.cc
@@ -103,7 +103,9 @@
       frame_token_(
           creation_params->parent_context_token->GetAs<LocalFrameToken>()),
       parent_cross_origin_isolated_capability_(
-          creation_params->parent_cross_origin_isolated_capability) {
+          creation_params->parent_cross_origin_isolated_capability),
+      parent_direct_socket_capability_(
+          creation_params->parent_direct_socket_capability) {
   DCHECK((thread_type_ == ThreadType::kMainThread && frame_) ||
          (thread_type_ == ThreadType::kOffMainThread && worker_thread_));
 
@@ -295,6 +297,10 @@
   return parent_cross_origin_isolated_capability_;
 }
 
+bool WorkletGlobalScope::DirectSocketCapability() const {
+  return parent_direct_socket_capability_;
+}
+
 ukm::UkmRecorder* WorkletGlobalScope::UkmRecorder() {
   if (ukm_recorder_)
     return ukm_recorder_.get();
diff --git a/third_party/blink/renderer/core/workers/worklet_global_scope.h b/third_party/blink/renderer/core/workers/worklet_global_scope.h
index 69ed239..f5da0f3a 100644
--- a/third_party/blink/renderer/core/workers/worklet_global_scope.h
+++ b/third_party/blink/renderer/core/workers/worklet_global_scope.h
@@ -66,6 +66,7 @@
   scoped_refptr<base::SingleThreadTaskRunner> GetTaskRunner(TaskType) final;
   FrameOrWorkerScheduler* GetScheduler() final;
   bool CrossOriginIsolatedCapability() const final;
+  bool DirectSocketCapability() const final;
   ukm::UkmRecorder* UkmRecorder() final;
 
   // WorkerOrWorkletGlobalScope
@@ -190,6 +191,12 @@
   // restricted API between the document and the worklet (e.g.
   // SharedArrayBuffer passing via postMessage).
   const bool parent_cross_origin_isolated_capability_;
+
+  // This is inherited at construction to ensure it's possible to use APIs
+  // like Direct Sockets if they're made available in Worklets.
+  //
+  // TODO(mkwst): We need a spec for this capability.
+  const bool parent_direct_socket_capability_;
 };
 
 template <>
diff --git a/third_party/blink/renderer/core/xml/dom_parser.cc b/third_party/blink/renderer/core/xml/dom_parser.cc
index faf389e..3d3333b 100644
--- a/third_party/blink/renderer/core/xml/dom_parser.cc
+++ b/third_party/blink/renderer/core/xml/dom_parser.cc
@@ -23,7 +23,6 @@
 #include "third_party/blink/renderer/core/dom/document.h"
 #include "third_party/blink/renderer/core/dom/document_init.h"
 #include "third_party/blink/renderer/core/frame/local_dom_window.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/weborigin/security_origin.h"
 #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
 
diff --git a/third_party/blink/renderer/core/xml/xsl_style_sheet.h b/third_party/blink/renderer/core/xml/xsl_style_sheet.h
index de3667e..865803b 100644
--- a/third_party/blink/renderer/core/xml/xsl_style_sheet.h
+++ b/third_party/blink/renderer/core/xml/xsl_style_sheet.h
@@ -28,7 +28,6 @@
 #include "base/memory/scoped_refptr.h"
 #include "third_party/blink/renderer/core/css/style_sheet.h"
 #include "third_party/blink/renderer/core/dom/processing_instruction.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/wtf/casting.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc b/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc
index 23158cb2..6aa5a583 100644
--- a/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc
+++ b/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc
@@ -94,7 +94,6 @@
 #include "third_party/blink/renderer/modules/accessibility/ax_virtual_object.h"
 #include "third_party/blink/renderer/modules/permissions/permission_utils.h"
 #include "third_party/blink/renderer/platform/instrumentation/tracing/trace_event.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "ui/accessibility/ax_enums.mojom-blink.h"
 #include "ui/accessibility/ax_event.h"
 #include "ui/accessibility/ax_role_properties.h"
@@ -1725,7 +1724,7 @@
   }
 
   // Refresh the focusable state and State::kIgnored on the exposed object.
-  MarkAXObjectDirty(obj, false);
+  MarkAXObjectDirtyWithCleanLayout(obj, false);
 }
 
 void AXObjectCacheImpl::DocumentTitleChanged() {
diff --git a/third_party/blink/renderer/modules/ad_auction/navigator_auction.cc b/third_party/blink/renderer/modules/ad_auction/navigator_auction.cc
index 9560cc5..46ada49 100644
--- a/third_party/blink/renderer/modules/ad_auction/navigator_auction.cc
+++ b/third_party/blink/renderer/modules/ad_auction/navigator_auction.cc
@@ -9,7 +9,6 @@
 #include "third_party/blink/renderer/bindings/modules/v8/v8_auction_ad.h"
 #include "third_party/blink/renderer/bindings/modules/v8/v8_auction_ad_config.h"
 #include "third_party/blink/renderer/bindings/modules/v8/v8_auction_ad_interest_group.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/weborigin/security_origin_hash.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/modules/beacon/navigator_beacon.cc b/third_party/blink/renderer/modules/beacon/navigator_beacon.cc
index 25a39d8..c95048d 100644
--- a/third_party/blink/renderer/modules/beacon/navigator_beacon.cc
+++ b/third_party/blink/renderer/modules/beacon/navigator_beacon.cc
@@ -18,7 +18,6 @@
 #include "third_party/blink/renderer/platform/bindings/script_state.h"
 #include "third_party/blink/renderer/platform/instrumentation/use_counter.h"
 #include "third_party/blink/renderer/platform/loader/cors/cors.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 
 namespace blink {
 
diff --git a/third_party/blink/renderer/modules/crypto/subtle_crypto.cc b/third_party/blink/renderer/modules/crypto/subtle_crypto.cc
index 11c6b295..8726bd39 100644
--- a/third_party/blink/renderer/modules/crypto/subtle_crypto.cc
+++ b/third_party/blink/renderer/modules/crypto/subtle_crypto.cc
@@ -50,7 +50,6 @@
 #include "third_party/blink/renderer/modules/crypto/crypto_utilities.h"
 #include "third_party/blink/renderer/modules/crypto/normalize_algorithm.h"
 #include "third_party/blink/renderer/platform/json/json_values.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 
 namespace blink {
 
diff --git a/third_party/blink/renderer/modules/csspaint/paint_worklet_global_scope_proxy.cc b/third_party/blink/renderer/modules/csspaint/paint_worklet_global_scope_proxy.cc
index 30da277..82c8a04 100644
--- a/third_party/blink/renderer/modules/csspaint/paint_worklet_global_scope_proxy.cc
+++ b/third_party/blink/renderer/modules/csspaint/paint_worklet_global_scope_proxy.cc
@@ -53,7 +53,8 @@
       BeginFrameProviderParams(), nullptr /* parent_permissions_policy */,
       window->GetAgentClusterID(), ukm::kInvalidSourceId,
       window->GetExecutionContextToken(),
-      window->CrossOriginIsolatedCapability());
+      window->CrossOriginIsolatedCapability(),
+      window->DirectSocketCapability());
   global_scope_ = PaintWorkletGlobalScope::Create(
       frame, std::move(creation_params), *reporting_proxy_);
 }
diff --git a/third_party/blink/renderer/modules/device_orientation/device_motion_controller.cc b/third_party/blink/renderer/modules/device_orientation/device_motion_controller.cc
index 98f6dfe7..1cba017 100644
--- a/third_party/blink/renderer/modules/device_orientation/device_motion_controller.cc
+++ b/third_party/blink/renderer/modules/device_orientation/device_motion_controller.cc
@@ -14,7 +14,6 @@
 #include "third_party/blink/renderer/modules/device_orientation/device_motion_event_pump.h"
 #include "third_party/blink/renderer/modules/device_orientation/device_orientation_controller.h"
 #include "third_party/blink/renderer/modules/event_modules.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/weborigin/security_origin.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/modules/device_orientation/device_orientation_absolute_controller.cc b/third_party/blink/renderer/modules/device_orientation/device_orientation_absolute_controller.cc
index a39cb76..4b9fcda3 100644
--- a/third_party/blink/renderer/modules/device_orientation/device_orientation_absolute_controller.cc
+++ b/third_party/blink/renderer/modules/device_orientation/device_orientation_absolute_controller.cc
@@ -8,7 +8,6 @@
 #include "third_party/blink/public/mojom/web_feature/web_feature.mojom-blink.h"
 #include "third_party/blink/renderer/core/frame/settings.h"
 #include "third_party/blink/renderer/modules/device_orientation/device_orientation_event_pump.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 
 namespace blink {
 
diff --git a/third_party/blink/renderer/modules/device_orientation/device_orientation_controller.cc b/third_party/blink/renderer/modules/device_orientation/device_orientation_controller.cc
index 4a163d2..a244596a 100644
--- a/third_party/blink/renderer/modules/device_orientation/device_orientation_controller.cc
+++ b/third_party/blink/renderer/modules/device_orientation/device_orientation_controller.cc
@@ -16,7 +16,6 @@
 #include "third_party/blink/renderer/modules/device_orientation/device_orientation_event_pump.h"
 #include "third_party/blink/renderer/modules/event_modules.h"
 #include "third_party/blink/renderer/platform/heap/heap.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/weborigin/security_origin.h"
 #include "third_party/blink/renderer/platform/wtf/assertions.h"
 
diff --git a/third_party/blink/renderer/modules/direct_sockets/navigator_socket.idl b/third_party/blink/renderer/modules/direct_sockets/navigator_socket.idl
index 767d2e3..d91c7fd 100644
--- a/third_party/blink/renderer/modules/direct_sockets/navigator_socket.idl
+++ b/third_party/blink/renderer/modules/direct_sockets/navigator_socket.idl
@@ -7,7 +7,8 @@
 
 [
   ImplementedAs=NavigatorSocket,
-  RuntimeEnabled=DirectSockets
+  RuntimeEnabled=DirectSockets,
+  DirectSocketEnabled
 ] partial interface Navigator {
   [SecureContext, RaisesException, CallWith=ScriptState, Measure]
   Promise<TCPSocket> openTCPSocket(optional SocketOptions options = {});
diff --git a/third_party/blink/renderer/modules/direct_sockets/tcp_socket.idl b/third_party/blink/renderer/modules/direct_sockets/tcp_socket.idl
index 2003fae..c464d26 100644
--- a/third_party/blink/renderer/modules/direct_sockets/tcp_socket.idl
+++ b/third_party/blink/renderer/modules/direct_sockets/tcp_socket.idl
@@ -7,7 +7,7 @@
 [
     Exposed=Window,
     RuntimeEnabled=DirectSockets,
-    SecureContext
+    DirectSocketEnabled
 ] interface TCPSocket {
   [RaisesException, CallWith=ScriptState, Measure]
   Promise<void> close();
diff --git a/third_party/blink/renderer/modules/direct_sockets/udp_socket.idl b/third_party/blink/renderer/modules/direct_sockets/udp_socket.idl
index 6bb263d..ca0fc46 100644
--- a/third_party/blink/renderer/modules/direct_sockets/udp_socket.idl
+++ b/third_party/blink/renderer/modules/direct_sockets/udp_socket.idl
@@ -7,7 +7,7 @@
 [
     Exposed=Window,
     RuntimeEnabled=DirectSockets,
-    SecureContext
+    DirectSocketEnabled
 ] interface UDPSocket {
   // TODO(crbug.com/1119620): Add support for sending, receiving
   // TODO(crbug.com/1119620): Add measurement
diff --git a/third_party/blink/renderer/modules/encryptedmedia/encrypted_media_utils.cc b/third_party/blink/renderer/modules/encryptedmedia/encrypted_media_utils.cc
index 237ad68..9fbaa009 100644
--- a/third_party/blink/renderer/modules/encryptedmedia/encrypted_media_utils.cc
+++ b/third_party/blink/renderer/modules/encryptedmedia/encrypted_media_utils.cc
@@ -5,7 +5,6 @@
 #include "third_party/blink/renderer/modules/encryptedmedia/encrypted_media_utils.h"
 
 #include "media/base/eme_constants.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 
 namespace blink {
 
diff --git a/third_party/blink/renderer/modules/encryptedmedia/media_keys.cc b/third_party/blink/renderer/modules/encryptedmedia/media_keys.cc
index c015ebf..c93277e4 100644
--- a/third_party/blink/renderer/modules/encryptedmedia/media_keys.cc
+++ b/third_party/blink/renderer/modules/encryptedmedia/media_keys.cc
@@ -44,7 +44,6 @@
 #include "third_party/blink/renderer/platform/bindings/script_state.h"
 #include "third_party/blink/renderer/platform/bindings/v8_throw_exception.h"
 #include "third_party/blink/renderer/platform/instrumentation/instance_counters.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/timer.h"
 
 #define MEDIA_KEYS_LOG_LEVEL 3
diff --git a/third_party/blink/renderer/modules/encryptedmedia/navigator_request_media_key_system_access.cc b/third_party/blink/renderer/modules/encryptedmedia/navigator_request_media_key_system_access.cc
index 6780654..54e2e7d3 100644
--- a/third_party/blink/renderer/modules/encryptedmedia/navigator_request_media_key_system_access.cc
+++ b/third_party/blink/renderer/modules/encryptedmedia/navigator_request_media_key_system_access.cc
@@ -34,7 +34,6 @@
 #include "third_party/blink/renderer/platform/heap/heap.h"
 #include "third_party/blink/renderer/platform/network/mime/content_type.h"
 #include "third_party/blink/renderer/platform/network/parsed_content_type.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
 #include "third_party/blink/renderer/platform/wtf/vector.h"
 
diff --git a/third_party/blink/renderer/modules/indexeddb/docs/idb_data_path.md b/third_party/blink/renderer/modules/indexeddb/docs/idb_data_path.md
index 9cf85889..ba27b9e 100644
--- a/third_party/blink/renderer/modules/indexeddb/docs/idb_data_path.md
+++ b/third_party/blink/renderer/modules/indexeddb/docs/idb_data_path.md
@@ -25,7 +25,7 @@
 The backing store implementation is built on top of two storage systems:
 
 * [Blobs](https://developer.mozilla.org/en-US/docs/Web/API/Blob), managed by
-  [the Blob system](https://chromium.googlesource.com/chromium/src/+/master/storage/browser/blob/README.md),
+  [the Blob system](https://chromium.googlesource.com/chromium/src/+/main/storage/browser/blob/README.md),
   are stored as individual files in a per-origin directory. Blobs are
   specifically designed for storing large amounts of data.
 * [LevelDB](https://github.com/google/leveldb) is a key-value store optimized
@@ -105,13 +105,13 @@
 
 All IndexedDB requests, including read/write operations, are translated by the
 Blink side into lower-level requests, then sent via
-[Mojo](https://chromium.googlesource.com/chromium/src/+/master/mojo/README.md)
+[Mojo](https://chromium.googlesource.com/chromium/src/+/main/mojo/README.md)
 IPC to the browser process, where they are executed by the backing store. Most
 of the data associated with an IndexedDB write operation is transferred from the
 renderer to the browser using one Mojo call, and is therefore subject to the
 Mojo message limit. Blobs are an exception, as they are transferred to the
 browser process by the [Blob
-subsystem](https://chromium.googlesource.com/chromium/src/+/master/storage/browser/blob/README.md).
+subsystem](https://chromium.googlesource.com/chromium/src/+/main/storage/browser/blob/README.md).
 
 ![IDB Write Path](./idb_data_flow_write.svg)
 
@@ -276,7 +276,7 @@
    [readAsArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/API/FileReader/readAsArrayBuffer).
    Blink's `FileReader` implementation uses a `FileReaderLoader` to retrieve the
    Blob's content from
-   [the Blob system](https://chromium.googlesource.com/chromium/src/+/master/storage/browser/blob/README.md)
+   [the Blob system](https://chromium.googlesource.com/chromium/src/+/main/storage/browser/blob/README.md)
    in the browser process.
 3. When the Blob's contents is completely transferred to the renderer process,
    FileReaderLoader's `DidFinishLoading` is called, which eventually causes the
diff --git a/third_party/blink/renderer/modules/media_controls/elements/media_control_display_cutout_fullscreen_button_element_test.cc b/third_party/blink/renderer/modules/media_controls/elements/media_control_display_cutout_fullscreen_button_element_test.cc
index 5b53154..3b7cd8c 100644
--- a/third_party/blink/renderer/modules/media_controls/elements/media_control_display_cutout_fullscreen_button_element_test.cc
+++ b/third_party/blink/renderer/modules/media_controls/elements/media_control_display_cutout_fullscreen_button_element_test.cc
@@ -17,7 +17,6 @@
 #include "third_party/blink/renderer/core/testing/page_test_base.h"
 #include "third_party/blink/renderer/modules/media_controls/media_controls_impl.h"
 #include "third_party/blink/renderer/platform/heap/heap.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/testing/runtime_enabled_features_test_helpers.h"
 #include "third_party/blink/renderer/platform/testing/unit_test_helpers.h"
 #include "third_party/blink/renderer/platform/text/platform_locale.h"
diff --git a/third_party/blink/renderer/modules/media_controls/elements/media_control_input_element.cc b/third_party/blink/renderer/modules/media_controls/elements/media_control_input_element.cc
index 149375b..e07adf7 100644
--- a/third_party/blink/renderer/modules/media_controls/elements/media_control_input_element.cc
+++ b/third_party/blink/renderer/modules/media_controls/elements/media_control_input_element.cc
@@ -19,7 +19,6 @@
 #include "third_party/blink/renderer/modules/media_controls/elements/media_control_elements_helper.h"
 #include "third_party/blink/renderer/modules/media_controls/media_controls_impl.h"
 #include "third_party/blink/renderer/platform/heap/heap.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/text/platform_locale.h"
 #include "ui/gfx/geometry/size.h"
 
diff --git a/third_party/blink/renderer/modules/media_controls/elements/media_control_overlay_play_button_element.cc b/third_party/blink/renderer/modules/media_controls/elements/media_control_overlay_play_button_element.cc
index 4edc9e4..41b3263 100644
--- a/third_party/blink/renderer/modules/media_controls/elements/media_control_overlay_play_button_element.cc
+++ b/third_party/blink/renderer/modules/media_controls/elements/media_control_overlay_play_button_element.cc
@@ -12,7 +12,6 @@
 #include "third_party/blink/renderer/core/input_type_names.h"
 #include "third_party/blink/renderer/modules/media_controls/elements/media_control_elements_helper.h"
 #include "third_party/blink/renderer/modules/media_controls/media_controls_impl.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/text/platform_locale.h"
 #include "ui/gfx/geometry/size.h"
 
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 c033f9c1..b67f051 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
@@ -30,7 +30,6 @@
 #include "third_party/blink/renderer/modules/media_controls/media_controls_impl.h"
 #include "third_party/blink/renderer/modules/media_controls/media_controls_shared_helper.h"
 #include "third_party/blink/renderer/platform/heap/heap.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/text/platform_locale.h"
 
 namespace {
diff --git a/third_party/blink/renderer/modules/notifications/service_worker_registration_notifications.cc b/third_party/blink/renderer/modules/notifications/service_worker_registration_notifications.cc
index a5311bdc..77958f28 100644
--- a/third_party/blink/renderer/modules/notifications/service_worker_registration_notifications.cc
+++ b/third_party/blink/renderer/modules/notifications/service_worker_registration_notifications.cc
@@ -20,7 +20,6 @@
 #include "third_party/blink/renderer/modules/service_worker/service_worker_registration.h"
 #include "third_party/blink/renderer/platform/bindings/exception_state.h"
 #include "third_party/blink/renderer/platform/heap/handle.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 
 namespace blink {
 
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_ice_transport.cc b/third_party/blink/renderer/modules/peerconnection/rtc_ice_transport.cc
index c8a127df..fff8eca 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_ice_transport.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_ice_transport.cc
@@ -23,7 +23,6 @@
 #include "third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.h"
 #include "third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_ice_event.h"
 #include "third_party/blink/renderer/platform/heap/heap.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/scheduler/public/thread.h"
 #include "third_party/webrtc/api/ice_transport_factory.h"
 #include "third_party/webrtc/api/ice_transport_interface.h"
diff --git a/third_party/blink/renderer/modules/permissions/permissions.cc b/third_party/blink/renderer/modules/permissions/permissions.cc
index 1876367..798a522 100644
--- a/third_party/blink/renderer/modules/permissions/permissions.cc
+++ b/third_party/blink/renderer/modules/permissions/permissions.cc
@@ -21,7 +21,6 @@
 #include "third_party/blink/renderer/core/origin_trials/origin_trials.h"
 #include "third_party/blink/renderer/modules/permissions/permission_status.h"
 #include "third_party/blink/renderer/modules/permissions/permission_utils.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/wtf/functional.h"
 #include "third_party/blink/renderer/platform/wtf/vector.h"
 #include "third_party/blink/renderer/platform/wtf/wtf_size_t.h"
diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc
index 2fa1178..823383a6 100644
--- a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc
+++ b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc
@@ -824,6 +824,11 @@
   return false;
 }
 
+bool ServiceWorkerGlobalScope::DirectSocketCapability() const {
+  // TODO(mkwst): Make a decision here, and spec it.
+  return false;
+}
+
 void ServiceWorkerGlobalScope::importScripts(const Vector<String>& urls) {
   for (const String& string_url : urls) {
     KURL completed_url = CompleteURL(string_url);
diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.h b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.h
index 524866a..8ba7a10 100644
--- a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.h
+++ b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.h
@@ -316,6 +316,7 @@
   const ServiceWorkerToken& GetServiceWorkerToken() const { return token_; }
   WorkerToken GetWorkerToken() const final { return token_; }
   bool CrossOriginIsolatedCapability() const final;
+  bool DirectSocketCapability() const final;
   ExecutionContextToken GetExecutionContextToken() const final {
     return token_;
   }
diff --git a/third_party/blink/renderer/modules/service_worker/web_embedded_worker_impl_test.cc b/third_party/blink/renderer/modules/service_worker/web_embedded_worker_impl_test.cc
index 9f1dd03..af72e1a 100644
--- a/third_party/blink/renderer/modules/service_worker/web_embedded_worker_impl_test.cc
+++ b/third_party/blink/renderer/modules/service_worker/web_embedded_worker_impl_test.cc
@@ -30,7 +30,6 @@
 #include "third_party/blink/public/web/modules/service_worker/web_service_worker_context_proxy.h"
 #include "third_party/blink/public/web/web_embedded_worker_start_data.h"
 #include "third_party/blink/renderer/platform/loader/fetch/resource_error.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/scheduler/public/thread.h"
 #include "third_party/blink/renderer/platform/scheduler/test/fake_task_runner.h"
 #include "third_party/blink/renderer/platform/testing/testing_platform_support.h"
diff --git a/third_party/blink/renderer/platform/animation/timing_function.h b/third_party/blink/renderer/platform/animation/timing_function.h
index 9d811fa..8eb520b2 100644
--- a/third_party/blink/renderer/platform/animation/timing_function.h
+++ b/third_party/blink/renderer/platform/animation/timing_function.h
@@ -28,7 +28,6 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/notreached.h"
 #include "third_party/blink/renderer/platform/platform_export.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/wtf/casting.h"
 #include "third_party/blink/renderer/platform/wtf/std_lib_extras.h"
 #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
diff --git a/third_party/blink/renderer/platform/fonts/font_cache.cc b/third_party/blink/renderer/platform/fonts/font_cache.cc
index 6c8bfdf3..fa1829a 100644
--- a/third_party/blink/renderer/platform/fonts/font_cache.cc
+++ b/third_party/blink/renderer/platform/fonts/font_cache.cc
@@ -56,7 +56,6 @@
 #include "third_party/blink/renderer/platform/instrumentation/histogram.h"
 #include "third_party/blink/renderer/platform/instrumentation/tracing/web_memory_allocator_dump.h"
 #include "third_party/blink/renderer/platform/instrumentation/tracing/web_process_memory_dump.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/text/layout_locale.h"
 #include "third_party/blink/renderer/platform/wtf/hash_map.h"
 #include "third_party/blink/renderer/platform/wtf/std_lib_extras.h"
diff --git a/third_party/blink/renderer/platform/fonts/font_fallback_list.h b/third_party/blink/renderer/platform/fonts/font_fallback_list.h
index 40fdbd64..91a444c 100644
--- a/third_party/blink/renderer/platform/fonts/font_fallback_list.h
+++ b/third_party/blink/renderer/platform/fonts/font_fallback_list.h
@@ -28,7 +28,6 @@
 #include "third_party/blink/renderer/platform/fonts/shaping/shape_cache.h"
 #include "third_party/blink/renderer/platform/fonts/simple_font_data.h"
 #include "third_party/blink/renderer/platform/heap/persistent.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
 #include "third_party/blink/renderer/platform/wtf/forward.h"
 #include "third_party/blink/renderer/platform/wtf/ref_counted.h"
diff --git a/third_party/blink/renderer/platform/graphics/bitmap_image.cc b/third_party/blink/renderer/platform/graphics/bitmap_image.cc
index c9b3006..1e810d0 100644
--- a/third_party/blink/renderer/platform/graphics/bitmap_image.cc
+++ b/third_party/blink/renderer/platform/graphics/bitmap_image.cc
@@ -42,7 +42,6 @@
 #include "third_party/blink/renderer/platform/graphics/skia/skia_utils.h"
 #include "third_party/blink/renderer/platform/graphics/static_bitmap_image.h"
 #include "third_party/blink/renderer/platform/instrumentation/tracing/trace_event.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/scheduler/public/thread_scheduler.h"
 #include "third_party/blink/renderer/platform/timer.h"
 #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
diff --git a/third_party/blink/renderer/platform/graphics/canvas_color_params.cc b/third_party/blink/renderer/platform/graphics/canvas_color_params.cc
index 8fd5a50..628c6bc 100644
--- a/third_party/blink/renderer/platform/graphics/canvas_color_params.cc
+++ b/third_party/blink/renderer/platform/graphics/canvas_color_params.cc
@@ -7,7 +7,6 @@
 #include "cc/paint/skia_paint_canvas.h"
 #include "components/viz/common/resources/resource_format_utils.h"
 #include "third_party/blink/renderer/platform/graphics/canvas_resource_params.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
 #include "third_party/khronos/GLES2/gl2.h"
 #include "third_party/khronos/GLES2/gl2ext.h"
diff --git a/third_party/blink/renderer/platform/graphics/canvas_resource_params.cc b/third_party/blink/renderer/platform/graphics/canvas_resource_params.cc
index adcdc2e8..5e67058 100644
--- a/third_party/blink/renderer/platform/graphics/canvas_resource_params.cc
+++ b/third_party/blink/renderer/platform/graphics/canvas_resource_params.cc
@@ -7,7 +7,6 @@
 #include "cc/paint/skia_paint_canvas.h"
 #include "components/viz/common/resources/resource_format_utils.h"
 #include "skia/ext/legacy_display_globals.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
 #include "third_party/khronos/GLES2/gl2.h"
 #include "third_party/khronos/GLES2/gl2ext.h"
diff --git a/third_party/blink/renderer/platform/graphics/canvas_resource_provider.cc b/third_party/blink/renderer/platform/graphics/canvas_resource_provider.cc
index c5d329a..b9267d0 100644
--- a/third_party/blink/renderer/platform/graphics/canvas_resource_provider.cc
+++ b/third_party/blink/renderer/platform/graphics/canvas_resource_provider.cc
@@ -28,7 +28,6 @@
 #include "third_party/blink/renderer/platform/graphics/memory_managed_paint_recorder.h"
 #include "third_party/blink/renderer/platform/graphics/unaccelerated_static_bitmap_image.h"
 #include "third_party/blink/renderer/platform/instrumentation/canvas_memory_dump_provider.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/skia/include/core/SkSurface.h"
 #include "third_party/skia/include/gpu/GrDirectContext.h"
 
diff --git a/third_party/blink/renderer/platform/graphics/color_correction_test_utils.h b/third_party/blink/renderer/platform/graphics/color_correction_test_utils.h
index 8a63135..f935655d 100644
--- a/third_party/blink/renderer/platform/graphics/color_correction_test_utils.h
+++ b/third_party/blink/renderer/platform/graphics/color_correction_test_utils.h
@@ -8,7 +8,6 @@
 #include "third_party/blink/renderer/platform/graphics/canvas_color_params.h"
 
 #include "third_party/blink/renderer/platform/graphics/graphics_types.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
 #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
 #include "third_party/skia/include/core/SkImage.h"
diff --git a/third_party/blink/renderer/platform/graphics/compositor_filter_operations.cc b/third_party/blink/renderer/platform/graphics/compositor_filter_operations.cc
index 220c595..e4f3d18b 100644
--- a/third_party/blink/renderer/platform/graphics/compositor_filter_operations.cc
+++ b/third_party/blink/renderer/platform/graphics/compositor_filter_operations.cc
@@ -5,7 +5,6 @@
 #include "third_party/blink/renderer/platform/graphics/compositor_filter_operations.h"
 
 #include "third_party/blink/renderer/platform/geometry/int_rect.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "ui/gfx/geometry/rect.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/platform/graphics/gpu/drawing_buffer_test_helpers.h b/third_party/blink/renderer/platform/graphics/gpu/drawing_buffer_test_helpers.h
index fe9b606..4095cf1 100644
--- a/third_party/blink/renderer/platform/graphics/gpu/drawing_buffer_test_helpers.h
+++ b/third_party/blink/renderer/platform/graphics/gpu/drawing_buffer_test_helpers.h
@@ -17,7 +17,6 @@
 #include "third_party/blink/renderer/platform/graphics/canvas_color_params.h"
 #include "third_party/blink/renderer/platform/graphics/gpu/drawing_buffer.h"
 #include "third_party/blink/renderer/platform/graphics/gpu/extensions_3d_util.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "ui/gl/gpu_preference.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/platform/graphics/paint/display_item.h b/third_party/blink/renderer/platform/graphics/paint/display_item.h
index 93583ae..e59f820 100644
--- a/third_party/blink/renderer/platform/graphics/paint/display_item.h
+++ b/third_party/blink/renderer/platform/graphics/paint/display_item.h
@@ -9,7 +9,6 @@
 #include "third_party/blink/renderer/platform/geometry/int_rect.h"
 #include "third_party/blink/renderer/platform/graphics/paint/display_item_client.h"
 #include "third_party/blink/renderer/platform/platform_export.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
 #include "third_party/blink/renderer/platform/wtf/assertions.h"
 
diff --git a/third_party/blink/renderer/platform/graphics/paint_invalidation_reason.cc b/third_party/blink/renderer/platform/graphics/paint_invalidation_reason.cc
index 92c9f86..65ba5b6 100644
--- a/third_party/blink/renderer/platform/graphics/paint_invalidation_reason.cc
+++ b/third_party/blink/renderer/platform/graphics/paint_invalidation_reason.cc
@@ -4,6 +4,8 @@
 
 #include "third_party/blink/renderer/platform/graphics/paint_invalidation_reason.h"
 
+#include <ostream>
+
 #include "base/notreached.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/platform/graphics/paint_invalidation_reason.h b/third_party/blink/renderer/platform/graphics/paint_invalidation_reason.h
index 9e54e65c..9336570 100644
--- a/third_party/blink/renderer/platform/graphics/paint_invalidation_reason.h
+++ b/third_party/blink/renderer/platform/graphics/paint_invalidation_reason.h
@@ -5,9 +5,11 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_GRAPHICS_PAINT_INVALIDATION_REASON_H_
 #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_GRAPHICS_PAINT_INVALIDATION_REASON_H_
 
+#include <stdint.h>
+
 #include <iosfwd>
+
 #include "third_party/blink/renderer/platform/platform_export.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 
 namespace blink {
 
diff --git a/third_party/blink/renderer/platform/heap/impl/heap_compact.cc b/third_party/blink/renderer/platform/heap/impl/heap_compact.cc
index 411ea51..e545551a 100644
--- a/third_party/blink/renderer/platform/heap/impl/heap_compact.cc
+++ b/third_party/blink/renderer/platform/heap/impl/heap_compact.cc
@@ -12,7 +12,6 @@
 #include "third_party/blink/renderer/platform/heap/heap.h"
 #include "third_party/blink/renderer/platform/heap/heap_stats_collector.h"
 #include "third_party/blink/renderer/platform/instrumentation/histogram.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
 #include "third_party/blink/renderer/platform/wtf/hash_map.h"
 
diff --git a/third_party/blink/renderer/platform/heap/impl/unified_heap_controller.cc b/third_party/blink/renderer/platform/heap/impl/unified_heap_controller.cc
index a554849c..23807fd 100644
--- a/third_party/blink/renderer/platform/heap/impl/unified_heap_controller.cc
+++ b/third_party/blink/renderer/platform/heap/impl/unified_heap_controller.cc
@@ -14,7 +14,6 @@
 #include "third_party/blink/renderer/platform/heap/heap_stats_collector.h"
 #include "third_party/blink/renderer/platform/heap/impl/marking_visitor.h"
 #include "third_party/blink/renderer/platform/heap/thread_state.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 
 namespace blink {
 
diff --git a/third_party/blink/renderer/platform/image-decoders/avif/avif_image_decoder.cc b/third_party/blink/renderer/platform/image-decoders/avif/avif_image_decoder.cc
index d533319..8230a0a 100644
--- a/third_party/blink/renderer/platform/image-decoders/avif/avif_image_decoder.cc
+++ b/third_party/blink/renderer/platform/image-decoders/avif/avif_image_decoder.cc
@@ -26,7 +26,6 @@
 #include "third_party/blink/renderer/platform/image-decoders/fast_shared_buffer_reader.h"
 #include "third_party/blink/renderer/platform/image-decoders/image_animation.h"
 #include "third_party/blink/renderer/platform/image-decoders/image_decoder.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/libavif/src/include/avif/avif.h"
 #include "third_party/libyuv/include/libyuv.h"
 #include "ui/gfx/color_space.h"
diff --git a/third_party/blink/renderer/platform/instrumentation/resource_coordinator/renderer_resource_coordinator.cc b/third_party/blink/renderer/platform/instrumentation/resource_coordinator/renderer_resource_coordinator.cc
index 5f00f68a..b8bf1a2 100644
--- a/third_party/blink/renderer/platform/instrumentation/resource_coordinator/renderer_resource_coordinator.cc
+++ b/third_party/blink/renderer/platform/instrumentation/resource_coordinator/renderer_resource_coordinator.cc
@@ -7,7 +7,6 @@
 #include "third_party/blink/public/common/thread_safe_browser_interface_broker_proxy.h"
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/renderer/platform/heap/thread_state.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/wtf/std_lib_extras.h"
 #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
 
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_load_scheduler.cc b/third_party/blink/renderer/platform/loader/fetch/resource_load_scheduler.cc
index 33552b6..c8c881f4 100644
--- a/third_party/blink/renderer/platform/loader/fetch/resource_load_scheduler.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/resource_load_scheduler.cc
@@ -20,7 +20,6 @@
 #include "third_party/blink/renderer/platform/loader/fetch/console_logger.h"
 #include "third_party/blink/renderer/platform/loader/fetch/loading_behavior_observer.h"
 #include "third_party/blink/renderer/platform/loader/fetch/resource_fetcher_properties.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/scheduler/public/aggregated_metric_reporter.h"
 #include "third_party/blink/renderer/platform/scheduler/public/frame_status.h"
 
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_load_scheduler_test.cc b/third_party/blink/renderer/platform/loader/fetch/resource_load_scheduler_test.cc
index d2aa32e7..34a2cee 100644
--- a/third_party/blink/renderer/platform/loader/fetch/resource_load_scheduler_test.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/resource_load_scheduler_test.cc
@@ -14,7 +14,6 @@
 #include "third_party/blink/renderer/platform/loader/fetch/console_logger.h"
 #include "third_party/blink/renderer/platform/loader/fetch/loading_behavior_observer.h"
 #include "third_party/blink/renderer/platform/loader/testing/test_resource_fetcher_properties.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/scheduler/test/fake_frame_scheduler.h"
 #include "third_party/blink/renderer/platform/testing/testing_platform_support.h"
 #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
diff --git a/third_party/blink/renderer/platform/loader/link_header.cc b/third_party/blink/renderer/platform/loader/link_header.cc
index 9a6942e..38da3f37 100644
--- a/third_party/blink/renderer/platform/loader/link_header.cc
+++ b/third_party/blink/renderer/platform/loader/link_header.cc
@@ -7,7 +7,6 @@
 #include "base/strings/string_util.h"
 #include "components/link_header_util/link_header_util.h"
 #include "third_party/blink/public/common/web_package/signed_exchange_consts.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/wtf/text/parsing_utilities.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/platform/scheduler/common/features.cc b/third_party/blink/renderer/platform/scheduler/common/features.cc
index b6853b9..3671d7a 100644
--- a/third_party/blink/renderer/platform/scheduler/common/features.cc
+++ b/third_party/blink/renderer/platform/scheduler/common/features.cc
@@ -7,7 +7,6 @@
 #include "base/command_line.h"
 #include "third_party/blink/public/common/features.h"
 #include "third_party/blink/public/common/switches.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 
 namespace blink {
 namespace scheduler {
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.cc b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.cc
index ab4d63ad..e1a6afba 100644
--- a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.cc
+++ b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.cc
@@ -38,7 +38,6 @@
 #include "third_party/blink/public/platform/scheduler/web_agent_group_scheduler.h"
 #include "third_party/blink/public/platform/scheduler/web_renderer_process_type.h"
 #include "third_party/blink/renderer/platform/instrumentation/resource_coordinator/renderer_resource_coordinator.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/scheduler/common/features.h"
 #include "third_party/blink/renderer/platform/scheduler/common/process_state.h"
 #include "third_party/blink/renderer/platform/scheduler/common/throttling/task_queue_throttler.h"
diff --git a/third_party/blink/renderer/platform/testing/layer_tree_host_embedder.cc b/third_party/blink/renderer/platform/testing/layer_tree_host_embedder.cc
index 4a192d5f..db0bdb7 100644
--- a/third_party/blink/renderer/platform/testing/layer_tree_host_embedder.cc
+++ b/third_party/blink/renderer/platform/testing/layer_tree_host_embedder.cc
@@ -5,7 +5,6 @@
 #include "third_party/blink/renderer/platform/testing/layer_tree_host_embedder.h"
 
 #include "base/threading/thread_task_runner_handle.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 
 namespace blink {
 
diff --git a/third_party/blink/renderer/platform/text/locale_icu.cc b/third_party/blink/renderer/platform/text/locale_icu.cc
index f991b513..e92066e 100644
--- a/third_party/blink/renderer/platform/text/locale_icu.cc
+++ b/third_party/blink/renderer/platform/text/locale_icu.cc
@@ -38,7 +38,6 @@
 
 #include "base/memory/ptr_util.h"
 #include "base/stl_util.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/wtf/date_math.h"
 #include "third_party/blink/renderer/platform/wtf/text/string_buffer.h"
 #include "third_party/blink/renderer/platform/wtf/text/string_builder.h"
diff --git a/third_party/blink/renderer/platform/text/locale_win.cc b/third_party/blink/renderer/platform/text/locale_win.cc
index ed7e012..91b00b7 100644
--- a/third_party/blink/renderer/platform/text/locale_win.cc
+++ b/third_party/blink/renderer/platform/text/locale_win.cc
@@ -37,7 +37,6 @@
 #include "base/stl_util.h"
 #include "base/strings/string_util.h"
 #include "third_party/blink/renderer/platform/language.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/text/date_components.h"
 #include "third_party/blink/renderer/platform/text/date_time_format.h"
 #include "third_party/blink/renderer/platform/web_test_support.h"
diff --git a/third_party/blink/renderer/platform/text/text_run.cc b/third_party/blink/renderer/platform/text/text_run.cc
index 6b4d030..ddf4053 100644
--- a/third_party/blink/renderer/platform/text/text_run.cc
+++ b/third_party/blink/renderer/platform/text/text_run.cc
@@ -25,7 +25,6 @@
 
 #include "third_party/blink/renderer/platform/text/text_run.h"
 
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/text/character.h"
 #include "third_party/blink/renderer/platform/wtf/size_assertions.h"
 #include "third_party/blink/renderer/platform/wtf/text/string_buffer.h"
diff --git a/third_party/blink/renderer/platform/weborigin/security_origin.cc b/third_party/blink/renderer/platform/weborigin/security_origin.cc
index 1fe2d00d..d0483ac 100644
--- a/third_party/blink/renderer/platform/weborigin/security_origin.cc
+++ b/third_party/blink/renderer/platform/weborigin/security_origin.cc
@@ -38,7 +38,6 @@
 #include "services/network/public/cpp/is_potentially_trustworthy.h"
 #include "third_party/blink/renderer/platform/blob/blob_url.h"
 #include "third_party/blink/renderer/platform/blob/blob_url_null_origin_map.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/weborigin/known_ports.h"
 #include "third_party/blink/renderer/platform/weborigin/kurl.h"
 #include "third_party/blink/renderer/platform/weborigin/origin_access_entry.h"
diff --git a/third_party/blink/renderer/platform/weborigin/security_policy.cc b/third_party/blink/renderer/platform/weborigin/security_policy.cc
index 5c8e737..cd783a4 100644
--- a/third_party/blink/renderer/platform/weborigin/security_policy.cc
+++ b/third_party/blink/renderer/platform/weborigin/security_policy.cc
@@ -35,7 +35,6 @@
 #include "services/network/public/mojom/referrer_policy.mojom-blink.h"
 #include "third_party/blink/public/common/loader/referrer_utils.h"
 #include "third_party/blink/public/platform/web_string.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.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/weborigin/security_origin.h"
diff --git a/third_party/blink/renderer/platform/weborigin/security_policy_test.cc b/third_party/blink/renderer/platform/weborigin/security_policy_test.cc
index a7a9b4fc..d0d788f 100644
--- a/third_party/blink/renderer/platform/weborigin/security_policy_test.cc
+++ b/third_party/blink/renderer/platform/weborigin/security_policy_test.cc
@@ -40,7 +40,6 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/public/common/features.h"
 #include "third_party/blink/public/common/loader/referrer_utils.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/testing/runtime_enabled_features_test_helpers.h"
 #include "third_party/blink/renderer/platform/weborigin/kurl.h"
 #include "third_party/blink/renderer/platform/weborigin/scheme_registry.h"
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index 1bfc479c..83bc995 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -2518,9 +2518,6 @@
 # ====== New tests from wpt-importer added here ======
 crbug.com/626703 [ Mac10.15 ] external/wpt/webrtc-encoded-transform/idlharness.https.window.html [ Failure Crash ]
 crbug.com/626703 [ Mac11.0 ] external/wpt/webrtc-encoded-transform/idlharness.https.window.html [ Failure Crash ]
-crbug.com/626703 [ Mac10.13 ] external/wpt/html/syntax/xmldecl/xmldecl-3.html [ Timeout ]
-crbug.com/626703 [ Mac10.14 ] external/wpt/html/syntax/xmldecl/xmldecl-3.html [ Timeout ]
-crbug.com/626703 [ Mac11.0 ] external/wpt/html/syntax/xmldecl/xmldecl-3.html [ Timeout ]
 crbug.com/626703 external/wpt/css/css-will-change/will-change-stacking-context-mask-1.html [ Failure ]
 crbug.com/626703 external/wpt/css/css-will-change/will-change-fixpos-cb-transform-style-1.html [ Failure ]
 crbug.com/626703 external/wpt/css/css-will-change/will-change-fixpos-cb-contain-1.html [ Failure ]
@@ -6821,7 +6818,6 @@
 crbug.com/1205133 [ Mac ] virtual/gpu/fast/canvas/canvas-blending-gradient-over-color.html [ Pass Timeout ]
 crbug.com/1205020 [ Win ] virtual/oopr-canvas2d/fast/canvas/canvas-blend-image.html [ Pass Failure ]
 crbug.com/1205020 [ Linux ] virtual/oopr-canvas2d/fast/canvas/canvas-blend-image.html [ Pass Failure ]
-crbug.com/1161155 [ Mac ] paint/invalidation/image/canvas-composite-repaint-by-all-imagesource.html [ Failure ]
 crbug.com/1205012 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/reporting-observer.html [ Timeout Pass ]
 crbug.com/1197465 [ Linux ] virtual/scroll-unification/fast/events/mouse-cursor-no-mousemove.html [ Pass Failure ]
 crbug.com/1093041 fast/canvas/color-space/canvas-createImageBitmap-rec2020.html [ Pass Failure ]
@@ -6858,3 +6854,7 @@
 crbug.com/1205669 [ Mac10.13 ] external/wpt/storage/idlharness.https.any.worker.html [ Failure ]
 crbug.com/1205669 [ Mac10.13 ] virtual/plz-dedicated-worker/external/wpt/service-workers/service-worker/fetch-event.https.html [ Failure ]
 crbug.com/1205669 [ Mac10.13 ] virtual/threaded/external/wpt/animation-worklet/idlharness.any.worker.html [ Failure ]
+
+# Sheriff 2021-05-07
+crbug.com/1206734 [ Mac10.13 ] external/wpt/websockets/Send-binary-blob.any.worker.html?wpt_flags=h2 [ Timeout ]
+crbug.com/1206772 [ Mac ] external/wpt/html/syntax/xmldecl/xmldecl-3.html [ Timeout ]
diff --git a/third_party/blink/web_tests/external/wpt/custom-elements/reactions/HTMLElement.html b/third_party/blink/web_tests/external/wpt/custom-elements/reactions/HTMLElement.html
index 5fe422c..bd252282 100644
--- a/third_party/blink/web_tests/external/wpt/custom-elements/reactions/HTMLElement.html
+++ b/third_party/blink/web_tests/external/wpt/custom-elements/reactions/HTMLElement.html
@@ -28,12 +28,9 @@
     customElement.parentNode.innerText = '';
 }, 'innerText on HTMLElement');
 
-if ('outerText' in HTMLElement.prototype) {
-    // Not yet to be in the standard but all but Gecko supports this property: https://github.com/whatwg/html/issues/668
-    testNodeDisconnector(function (customElement) {
-        customElement.outerText = '';
-    }, 'outerText on HTMLElement');
-}
+testNodeDisconnector(function (customElement) {
+    customElement.outerText = '';
+}, 'outerText on HTMLElement');
 
 </script>
 </body>
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/credentialless/cache-storage.tentative.https-expected.txt b/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/credentialless/cache-storage.tentative.https-expected.txt
new file mode 100644
index 0000000..2be4b1e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/credentialless/cache-storage.tentative.https-expected.txt
@@ -0,0 +1,51 @@
+This is a testharness.js-based test.
+PASS [document] unsafe-none => unsafe-none
+FAIL [document] unsafe-none => credentialless assert_equals: expected "error" but got "retrieved"
+PASS [document] unsafe-none => credentialless + CORP
+PASS [document] unsafe-none => require-corp
+PASS [document] unsafe-none => require-corp + CORP
+PASS [document] credentialless => unsafe-none
+PASS [document] credentialless => credentialless
+PASS [document] credentialless => require-corp
+PASS [document] credentialless => require-corp + CORP
+PASS [document] require_corp => unsafe-none
+PASS [document] require_corp => credentialless
+PASS [document] require_corp => require-corp
+PASS [dedicated_worker] unsafe-none => unsafe-none
+FAIL [dedicated_worker] unsafe-none => credentialless assert_equals: expected "error" but got "retrieved"
+PASS [dedicated_worker] unsafe-none => credentialless + CORP
+FAIL [dedicated_worker] unsafe-none => require-corp assert_equals: expected "error" but got "retrieved"
+PASS [dedicated_worker] unsafe-none => require-corp + CORP
+PASS [dedicated_worker] credentialless => unsafe-none
+PASS [dedicated_worker] credentialless => credentialless
+FAIL [dedicated_worker] credentialless => require-corp assert_equals: expected "error" but got "retrieved"
+PASS [dedicated_worker] credentialless => require-corp + CORP
+PASS [dedicated_worker] require_corp => unsafe-none
+PASS [dedicated_worker] require_corp => credentialless
+PASS [dedicated_worker] require_corp => require-corp
+PASS [shared_worker] unsafe-none => unsafe-none
+FAIL [shared_worker] unsafe-none => credentialless assert_equals: expected "error" but got "retrieved"
+PASS [shared_worker] unsafe-none => credentialless + CORP
+FAIL [shared_worker] unsafe-none => require-corp assert_equals: expected "error" but got "retrieved"
+PASS [shared_worker] unsafe-none => require-corp + CORP
+PASS [shared_worker] credentialless => unsafe-none
+PASS [shared_worker] credentialless => credentialless
+FAIL [shared_worker] credentialless => require-corp assert_equals: expected "error" but got "retrieved"
+PASS [shared_worker] credentialless => require-corp + CORP
+PASS [shared_worker] require_corp => unsafe-none
+PASS [shared_worker] require_corp => credentialless
+PASS [shared_worker] require_corp => require-corp
+PASS [service_worker] unsafe-none => unsafe-none
+FAIL [service_worker] unsafe-none => credentialless assert_equals: expected "error" but got "retrieved"
+PASS [service_worker] unsafe-none => credentialless + CORP
+PASS [service_worker] unsafe-none => require-corp
+PASS [service_worker] unsafe-none => require-corp + CORP
+PASS [service_worker] credentialless => unsafe-none
+PASS [service_worker] credentialless => credentialless
+PASS [service_worker] credentialless => require-corp
+PASS [service_worker] credentialless => require-corp + CORP
+PASS [service_worker] require_corp => unsafe-none
+PASS [service_worker] require_corp => credentialless
+PASS [service_worker] require_corp => require-corp
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/credentialless/cache-storage.tentative.https.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/credentialless/cache-storage.tentative.https.html
new file mode 100644
index 0000000..00b3696b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/credentialless/cache-storage.tentative.https.html
@@ -0,0 +1,86 @@
+<meta name="timeout" content="long">
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src="/common/get-host-info.sub.js"></script>
+<script src="/common/utils.js"></script>
+<script src="./resources/common.js"></script>
+<script src="./resources/dispatcher.js"></script>
+<script>
+
+// Fetch a resource and store it into CacheStorage from |storer| context. Then
+// check if it can be retrieved via CacheStorage.match from |retriever| context.
+const cacheStorageTest = (
+  description,
+  storer,
+  retriever,
+  resource_headers,
+  expectation
+) => {
+  promise_test_parallel(async test => {
+    const cross_origin = get_host_info().HTTPS_REMOTE_ORIGIN;
+    const url = cross_origin + "/common/square.png?pipe=" + resource_headers +
+      `&${token()}`;
+    const this_token = token();
+
+    // Fetch a request from |stored|. Store the opaque response into
+    // CacheStorage.
+    send(storer, `
+      const cache = await caches.open("v1");
+      const fetch_request = new Request("${url}", {mode: 'no-cors'});
+      const fetch_response = await fetch(fetch_request);
+      await cache.put(fetch_request, fetch_response);
+      send("${this_token}", "stored");
+    `);
+    assert_equals(await receive(this_token), "stored");
+
+    // Retrieved it from |retriever|.
+    send(retriever, `
+      const cache = await caches.open("v1");
+      try {
+        const response = await cache.match("${url}");
+        send("${this_token}", "retrieved");
+      } catch (error) {
+        send("${this_token}", "error");
+      }
+    `);
+    assert_equals(await receive(this_token), expectation);
+  }, description);
+};
+
+// Execute the same set of tests for every type of execution contexts:
+// Documents, DedicatedWorkers, SharedWorkers, and ServiceWorkers. The results
+// should be independent of the context.
+Object.entries(environments).forEach(([name, constructor]) => {
+  const context_none = constructor(coep_none);
+  const context_credentialless = constructor(coep_credentialless);
+  const context_require_corp = constructor(coep_require_corp);
+
+  cacheStorageTest(`[${name}] unsafe-none => unsafe-none`,
+    context_none, context_none, "", "retrieved");
+  cacheStorageTest(`[${name}] unsafe-none => credentialless`,
+    context_none, context_credentialless, "", "error");
+  cacheStorageTest(`[${name}] unsafe-none => credentialless + CORP`,
+    context_none, context_credentialless, corp_cross_origin, "retrieved");
+  cacheStorageTest(`[${name}] unsafe-none => require-corp`,
+    context_none, context_require_corp, "", "error");
+  cacheStorageTest(`[${name}] unsafe-none => require-corp + CORP`,
+    context_none, context_require_corp, corp_cross_origin, "retrieved");
+
+  cacheStorageTest(`[${name}] credentialless => unsafe-none`,
+    context_credentialless, context_none, "", "retrieved");
+  cacheStorageTest(`[${name}] credentialless => credentialless`,
+    context_credentialless, context_credentialless, "", "retrieved");
+  cacheStorageTest(`[${name}] credentialless => require-corp`,
+    context_credentialless, context_require_corp, "", "error");
+  cacheStorageTest(`[${name}] credentialless => require-corp + CORP`,
+    context_credentialless, context_require_corp, corp_cross_origin, "retrieved");
+
+  cacheStorageTest(`[${name}] require_corp => unsafe-none`,
+    context_require_corp, context_none, corp_cross_origin, "retrieved");
+  cacheStorageTest(`[${name}] require_corp => credentialless`,
+    context_require_corp, context_credentialless, corp_cross_origin, "retrieved");
+  cacheStorageTest(`[${name}] require_corp => require-corp`,
+    context_require_corp, context_require_corp, corp_cross_origin, "retrieved");
+})
+
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/credentialless/resources/common.js b/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/credentialless/resources/common.js
index f203a82b..0e7816d3 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/credentialless/resources/common.js
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/credentialless/resources/common.js
@@ -70,7 +70,7 @@
   const main_document_token = token();
   const url = origin + executor_path + coep_credentialless +
     `&uuid=${main_document_token}`;
-  const w = window.open(url);
+  const context = window.open(url);
   add_completion_callback(() => w.close());
   return main_document_token;
 };
@@ -89,3 +89,39 @@
   return sub_document_token;
 };
 
+const environments = {
+  document: headers => {
+    const tok = token();
+    const url = window.origin + executor_path + headers + `&uuid=${tok}`;
+    const context = window.open(url);
+    add_completion_callback(() => context.close());
+    return tok;
+  },
+
+  dedicated_worker: headers => {
+    const tok = token();
+    const url = window.origin + executor_js_path + headers + `&uuid=${tok}`;
+    const context = new Worker(url);
+    return tok;
+  },
+
+  shared_worker: headers => {
+    const tok = token();
+    const url = window.origin + executor_js_path + headers + `&uuid=${tok}`;
+    const context = new SharedWorker(url);
+    return tok;
+  },
+
+  service_worker: headers => {
+    const tok = token();
+    const url = window.origin + executor_js_path + headers + `&uuid=${tok}`;
+    const scope = url; // Generate a one-time scope for service worker.
+    navigator.serviceWorker.register(url, {scope: scope})
+    .then(registration => {
+      add_completion_callback(() => registration.unregister());
+    });
+    return tok;
+  },
+};
+
+
diff --git a/third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-idl-attribute/dynamic-getter.html b/third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-and-outertext-properties/dynamic-getter.html
similarity index 93%
rename from third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-idl-attribute/dynamic-getter.html
rename to third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-and-outertext-properties/dynamic-getter.html
index b3e96f9..e34fcf5a 100644
--- a/third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-idl-attribute/dynamic-getter.html
+++ b/third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-and-outertext-properties/dynamic-getter.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html>
-<title>innerText getter test with dynamic style changes</title>
+<title>innerText/outerText getter test with dynamic style changes</title>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <div id="container"></div>
@@ -19,7 +19,8 @@
     if (!e) {
       e = container.firstChild;
     }
-    assert_equals(e.innerText, expectedPlain);
+    assert_equals(e.innerText, expectedPlain, "innerText");
+    assert_equals(e.outerText, expectedPlain, "outerText");
     container.textContext = '';
   }, msg + ' (' + format_value(html) + ')');
 }
diff --git a/third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-idl-attribute/getter-expected.txt b/third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-and-outertext-properties/getter-expected.txt
similarity index 98%
rename from third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-idl-attribute/getter-expected.txt
rename to third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-and-outertext-properties/getter-expected.txt
index 06087fa..9f3ab36 100644
--- a/third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-idl-attribute/getter-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-and-outertext-properties/getter-expected.txt
@@ -68,7 +68,7 @@
 PASS <br> returned as newline, following space collapsed ("<div style='width:1px; word-break:break-word'>Hello<br> Kitty</div>")
 PASS <br> returned as newline, preceding space collapsed ("<div style='width:1px; word-break:break-word'>Hello <br>Kitty</div>")
 PASS <br> returned as newline, adjacent spaces collapsed across element boundaries ("<div style='width:1px; word-break:break-word'><x>Hello </x> <br> <x> Kitty</x></div>")
-FAIL ::first-line styles applied ("<div class='first-line-uppercase' style='width:0'>abc def") assert_equals: expected "ABC def" but got "abc def"
+FAIL ::first-line styles applied ("<div class='first-line-uppercase' style='width:0'>abc def") assert_equals: innerText expected "ABC def" but got "abc def"
 PASS ::first-letter styles applied ("<div class='first-letter-uppercase' style='width:0'>abc def")
 PASS ::first-letter float ignored ("<div class='first-letter-float' style='width:0'>abc def")
 PASS &nbsp; preserved ("<div>&nbsp;")
@@ -109,7 +109,7 @@
 PASS <iframe> contents ignored ("<iframe>abc")
 PASS <iframe> contents ignored ("<iframe><div id='target'>abc")
 PASS <iframe> subdocument ignored ("<iframe src='data:text/html,abc'>")
-FAIL <audio> contents ignored ("<audio style='display:block'>abc") assert_equals: expected "" but got "abc"
+FAIL <audio> contents ignored ("<audio style='display:block'>abc") assert_equals: innerText expected "" but got "abc"
 PASS <audio> contents ok for element not being rendered ("<audio style='display:block'><source id='target' class='poke' style='display:block'>")
 PASS <audio> contents ok for element not being rendered ("<audio style='display:block'><source id='target' class='poke' style='display:none'>")
 PASS <video> contents ignored ("<video>abc")
@@ -120,7 +120,7 @@
 PASS <img> alt text ignored ("<img alt='abc'>")
 PASS <img> contents ignored ("<img src='about:blank' class='poke'>")
 PASS <svg> text contents preserved ("<div><svg><text>abc</text></svg></div>")
-FAIL <svg><defs> text contents ignored ("<div><svg><defs><text>abc</text></defs></svg></div>") assert_equals: expected "" but got "abc"
+FAIL <svg><defs> text contents ignored ("<div><svg><defs><text>abc</text></defs></svg></div>") assert_equals: innerText expected "" but got "abc"
 PASS <svg> non-rendered text ignored ("<div><svg><stop>abc</stop></svg></div>")
 PASS <foreignObject> contents preserved ("<svg><foreignObject><span id='target'>abc</span></foreignObject></svg>")
 PASS <select size='1'> contents of options preserved ("<select size='1'><option>abc</option><option>def")
@@ -133,7 +133,7 @@
 PASS <select> containing text node child ("<select class='poke'></select>")
 PASS <optgroup> containing <optgroup> ("<select><optgroup class='poke-optgroup'></select>")
 PASS <optgroup> containing <option> ("<select><optgroup><option>abc</select>")
-FAIL <div> in <option> ("<select><option class='poke-div'>123</select>") assert_equals: expected "123\nabc" but got "123abc"
+FAIL <div> in <option> ("<select><option class='poke-div'>123</select>") assert_equals: innerText expected "123\nabc" but got "123abc"
 PASS empty <optgroup> in <div> ("<div>a<optgroup></optgroup>bc")
 PASS <optgroup> in <div> ("<div>a<optgroup>123</optgroup>bc")
 PASS empty <option> in <div> ("<div>a<option></option>bc")
diff --git a/third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-idl-attribute/getter-first-letter-marker-multicol.html b/third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-and-outertext-properties/getter-first-letter-marker-multicol.html
similarity index 69%
rename from third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-idl-attribute/getter-first-letter-marker-multicol.html
rename to third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-and-outertext-properties/getter-first-letter-marker-multicol.html
index 77a815c..3b579dc 100644
--- a/third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-idl-attribute/getter-first-letter-marker-multicol.html
+++ b/third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-and-outertext-properties/getter-first-letter-marker-multicol.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html>
-<title>Test innerText for a combination of a list item with ::first-letter in multicol</title>
+<title>Test innerText/outerText for a combination of a list item with ::first-letter in multicol</title>
 <link rel="help" href="https://html.spec.whatwg.org/multipage/dom.html#dom-innertext">
 <link rel="help" href="https://crbug.com/1174985">
 <script src="/resources/testharness.js"></script>
@@ -12,6 +12,7 @@
 <div id="item" class="col"><div class="col">PASS</div></div>
 <script>
   test(() => {
-    assert_equals(item.innerText, "PASS");
+    assert_equals(item.innerText, "PASS", "innerText");
+    assert_equals(item.outerText, "PASS", "outerText");
   }, "");
 </script>
diff --git a/third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-idl-attribute/getter-tests.js b/third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-and-outertext-properties/getter-tests.js
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-idl-attribute/getter-tests.js
rename to third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-and-outertext-properties/getter-tests.js
diff --git a/third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-idl-attribute/getter.html b/third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-and-outertext-properties/getter.html
similarity index 92%
rename from third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-idl-attribute/getter.html
rename to third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-and-outertext-properties/getter.html
index c84bb04..ffb3d34f 100644
--- a/third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-idl-attribute/getter.html
+++ b/third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-and-outertext-properties/getter.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html>
-<title>innerText getter test</title>
+<title>innerText/outerText getter test</title>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <style>
@@ -55,7 +55,8 @@
     while (e && e.nodeType != Node.ELEMENT_NODE) {
       e = e.nextSibling;
     }
-    assert_equals(e.innerText, expectedPlain);
+    assert_equals(e.innerText, expectedPlain, "innerText");
+    assert_equals(e.outerText, expectedPlain, "outerText");
     cont.textContent = '';
   }, msg + ' (' + format_value(html) + ')');
 }
diff --git a/third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-idl-attribute/setter-tests.js b/third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-and-outertext-properties/innertext-setter-tests.js
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-idl-attribute/setter-tests.js
rename to third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-and-outertext-properties/innertext-setter-tests.js
diff --git a/third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-idl-attribute/setter.html b/third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-and-outertext-properties/innertext-setter.html
similarity index 97%
rename from third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-idl-attribute/setter.html
rename to third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-and-outertext-properties/innertext-setter.html
index 0b8d568..a835a16 100644
--- a/third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-idl-attribute/setter.html
+++ b/third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-and-outertext-properties/innertext-setter.html
@@ -85,4 +85,4 @@
   }, msg + ", detached");
 }
 </script>
-<script src="setter-tests.js"></script>
+<script src="innertext-setter-tests.js"></script>
diff --git a/third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-idl-attribute/multiple-text-nodes.window.js b/third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-and-outertext-properties/multiple-text-nodes.window.js
similarity index 80%
rename from third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-idl-attribute/multiple-text-nodes.window.js
rename to third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-and-outertext-properties/multiple-text-nodes.window.js
index 3d504b6..07c55e9 100644
--- a/third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-idl-attribute/multiple-text-nodes.window.js
+++ b/third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-and-outertext-properties/multiple-text-nodes.window.js
@@ -9,7 +9,8 @@
     t1.data = "X";
     t2.data = " ";
     t3.data = "Y";
-    assert_equals(div.innerText, "X Y");
+    assert_equals(div.innerText, "X Y", "innerText");
+    assert_equals(div.outerText, "X Y", "outerText");
     t.done();
   }, 100);
 }, "Ensure multiple text nodes get rendered properly");
diff --git a/third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-and-outertext-properties/outertext-setter.html b/third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-and-outertext-properties/outertext-setter.html
new file mode 100644
index 0000000..6500931
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-and-outertext-properties/outertext-setter.html
@@ -0,0 +1,140 @@
+<!DOCTYPE html>
+<title>outerText setter test</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<ul>
+  <li>A <span id="testReplacePrevious">B</span></li>
+  <li><span id="testReplaceFollowing">A</span> B</li>
+  <li>A <span id="testReplaceBoth">B</span> C</li>
+  <li><span id="testRemove">Testing</span> removing node using outerText.</li>
+</ul>
+
+<div id="container"></div>
+
+<script>
+"use strict";
+
+test(() => {
+  const node = document.getElementById("testReplacePrevious");
+  const parent = node.parentNode;
+
+  node.outerText = "Replaced";
+
+  assert_equals(parent.innerHTML, "A Replaced");
+  assert_equals(parent.childNodes.length, 1, "It got merged with the previous text node");
+}, "Replacing a node and merging with the previous text node");
+
+test(() => {
+  const node = document.getElementById("testReplaceFollowing");
+  const parent = node.parentNode;
+
+  node.outerText = "Replaced";
+
+  assert_equals(parent.innerHTML, "Replaced B");
+  assert_equals(parent.childNodes.length, 1, "It got merged with the following text node");
+}, "Replacing a node and merging with the following text node");
+
+test(() => {
+  const node = document.getElementById("testReplaceBoth");
+  const parent = node.parentNode;
+
+  node.outerText = "Replaced";
+
+  assert_equals(parent.innerHTML, "A Replaced C");
+  assert_equals(parent.childNodes.length, 1, "It got merged with the previous and following text node");
+}, "Replacing a node and merging with the previous and following text node");
+
+test(t => {
+  const container = document.getElementById("container");
+  t.add_cleanup(() => { container.textContent = ""; });
+
+  container.append("A", "B", document.createElement("span"), "D", "E");
+  assert_equals(container.childNodes.length, 5, "Precondition check: five separate nodes");
+
+  const node = container.childNodes[2];
+  node.outerText = "Replaced";
+
+  assert_equals(container.innerHTML, "ABReplacedDE");
+  assert_equals(container.childNodes.length, 3, "It got merged with the previous and following text node");
+  assert_equals(container.childNodes[0].data, "A");
+  assert_equals(container.childNodes[1].data, "BReplacedD");
+  assert_equals(container.childNodes[2].data, "E");
+}, "Only merges with the previous and following text nodes, does not completely normalize");
+
+test(() => {
+  const node = document.getElementById("testRemove");
+  const parent = node.parentNode;
+
+  node.outerText = "";
+
+  assert_equals(parent.innerHTML, " removing node using outerText.");
+}, "Removing a node");
+
+test(() => {
+  const node = document.createElement("span");
+
+  assert_throws_dom("NoModificationAllowedError", () => { node.outerText = ""; });
+}, "Detached node");
+
+testText("<div>", "abc", "abc", "Simplest possible test");
+testHTML("<div>", "abc\ndef", "abc<br>def", "Newlines convert to <br> in non-white-space:pre elements");
+testHTML("<pre>", "abc\ndef", "abc<br>def", "Newlines convert to <br> in <pre> element");
+testHTML("<textarea>", "abc\ndef", "abc<br>def", "Newlines convert to <br> in <textarea> element");
+testHTML("<div style='white-space:pre'>", "abc\ndef", "abc<br>def", "Newlines convert to <br> in white-space:pre element");
+testHTML("<div>", "abc\rdef", "abc<br>def", "CRs convert to <br> in non-white-space:pre elements");
+testHTML("<pre>", "abc\rdef", "abc<br>def", "CRs convert to <br> in <pre> element");
+testHTML("<div>", "abc\r\ndef", "abc<br>def", "Newline/CR pair converts to <br> in non-white-space:pre element");
+testHTML("<div>", "abc\n\ndef", "abc<br><br>def", "Newline/newline pair converts to two <br>s in non-white-space:pre element");
+testHTML("<div>", "abc\r\rdef", "abc<br><br>def", "CR/CR pair converts to two <br>s in non-white-space:pre element");
+testHTML("<div style='white-space:pre'>", "abc\rdef", "abc<br>def", "CRs convert to <br> in white-space:pre element");
+testText("<div>", "abc<def", "abc<def", "< preserved");
+testText("<div>", "abc>def", "abc>def", "> preserved");
+testText("<div>", "abc&", "abc&", "& preserved");
+testText("<div>", "abc\"def", "abc\"def", "\" preserved");
+testText("<div>", "abc\'def", "abc\'def", "\' preserved");
+testHTML("<svg>", "abc", "<svg></svg>", "outerText not supported on SVG elements");
+testHTML("<math>", "abc", "<math></math>", "outerText not supported on MathML elements");
+testText("<div>", "abc\0def", "abc\0def", "Null characters preserved");
+testText("<div>", "abc\tdef", "abc\tdef", "Tabs preserved");
+testText("<div>", " abc", " abc", "Leading whitespace preserved");
+testText("<div>", "abc ", "abc ", "Trailing whitespace preserved");
+testText("<div>", "abc  def", "abc  def", "Whitespace not compressed");
+testText("<div>abc\n\n", "abc", "abc", "Existing text deleted");
+testText("<div><br>", "abc", "abc", "Existing <br> deleted");
+testHTML("<div>", "", "", "Assigning the empty string");
+testHTML("<div>", null, "", "Assigning null");
+testHTML("<div>", undefined, "undefined", "Assigning undefined");
+testHTML("<div>", "\rabc", "<br>abc", "Start with CR");
+testHTML("<div>", "\nabc", "<br>abc", "Start with LF");
+testHTML("<div>", "\r\nabc", "<br>abc", "Start with CRLF");
+testHTML("<div>", "abc\r", "abc<br>", "End with CR");
+testHTML("<div>", "abc\n", "abc<br>", "End with LF");
+testHTML("<div>", "abc\r\n", "abc<br>", "End with CRLF");
+
+function testText(startingHTML, outerText, expected, description) {
+  test(t => {
+    const container = document.getElementById("container");
+    t.add_cleanup(() => { container.textContent = ""; });
+
+    container.innerHTML = startingHTML;
+    const elementToReplace = container.firstElementChild;
+
+    elementToReplace.outerText = outerText;
+    assert_equals(container.textContent, expected);
+  }, description);
+}
+
+function testHTML(startingHTML, outerText, expected, description) {
+  test(t => {
+    const container = document.getElementById("container");
+    t.add_cleanup(() => { container.textContent = ""; });
+
+    container.innerHTML = startingHTML;
+    const elementToReplace = container.firstElementChild;
+
+    elementToReplace.outerText = outerText;
+    assert_equals(container.innerHTML, expected);
+  }, description);
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/raw-sockets/open-consume-activation.https.html.headers b/third_party/blink/web_tests/external/wpt/raw-sockets/open-consume-activation.https.html.headers
new file mode 100644
index 0000000..63b60e4
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/raw-sockets/open-consume-activation.https.html.headers
@@ -0,0 +1,2 @@
+Cross-Origin-Opener-Policy: same-origin
+Cross-Origin-Embedder-Policy: require-corp
diff --git a/third_party/blink/web_tests/external/wpt/raw-sockets/open-without-user-gesture.https.html.headers b/third_party/blink/web_tests/external/wpt/raw-sockets/open-without-user-gesture.https.html.headers
new file mode 100644
index 0000000..63b60e4
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/raw-sockets/open-without-user-gesture.https.html.headers
@@ -0,0 +1,2 @@
+Cross-Origin-Opener-Policy: same-origin
+Cross-Origin-Embedder-Policy: require-corp
diff --git a/third_party/blink/web_tests/external/wpt/raw-sockets/remotePort-required.https.html.headers b/third_party/blink/web_tests/external/wpt/raw-sockets/remotePort-required.https.html.headers
new file mode 100644
index 0000000..63b60e4
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/raw-sockets/remotePort-required.https.html.headers
@@ -0,0 +1,2 @@
+Cross-Origin-Opener-Policy: same-origin
+Cross-Origin-Embedder-Policy: require-corp
diff --git a/third_party/blink/web_tests/external/wpt/resource-timing/resource-ignore-data-url.html b/third_party/blink/web_tests/external/wpt/resource-timing/resource-ignore-data-url.html
new file mode 100644
index 0000000..a7056a8
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/resource-timing/resource-ignore-data-url.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8" />
+<title>Resource Timing ignores resources with data: URIs</title>
+<link rel="author" title="Google" href="http://www.google.com/" />
+<link rel="help" href="https://www.w3.org/TR/resource-timing-2/#resources-included-in-the-performanceresourcetiming-interface"/>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/resource-loaders.js"></script>
+</head>
+<body>
+<img src="data:image/gif;base64,R0lGODlhAQABAIAAAOTm7AAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=="></img>
+<script>
+  promise_test(async t => {
+    const promise = new Promise(resolve => {
+      new PerformanceObserver(t.step_func(list => {
+        const entries = list.getEntries();
+        const dataEntries = entries.filter(e => e.name.includes('data:'));
+        assert_equals(dataEntries.length, 0, 'There must be no entry for `data: URL`.');
+        const blueEntries = entries.filter(e => e.name.includes('blue.png'));
+        if (blueEntries.length) {
+          // We can finish the test once we see the entry with blue.png.
+          resolve();
+        }
+      })).observe({entryTypes: ['resource']});
+    });
+    // Wait until the document is loaded.
+    await new Promise(resolve => {
+      window.addEventListener('load', resolve);
+    });
+    // Add the blue.png image after document is loaded to ensure we've received
+    // all of the previous Resource Timing entries.
+    load.image('blue.png');
+    return promise;
+  }, 'Resources with data: URIs must not be surfaced in Resource Timing');
+</script>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/resource-timing/resource_ignore_data_url.html b/third_party/blink/web_tests/external/wpt/resource-timing/resource_ignore_data_url.html
deleted file mode 100644
index f8ca2f11..0000000
--- a/third_party/blink/web_tests/external/wpt/resource-timing/resource_ignore_data_url.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<meta charset="utf-8" />
-<title>Resource Timing ignores requests for data: URIs</title>
-<link rel="author" title="Google" href="http://www.google.com/" />
-<link rel="help" href="http://www.w3.org/TR/resource-timing/#dom-performanceresourcetiming-initiatortype"/>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="resources/webperftestharness.js"></script>
-<script src="resources/webperftestharnessextension.js"></script>
-<script>
-let iframe;
-function setup_iframe() {
-    const iframe_content = '<img src="data:image/gif;base64,R0lGODlhAQABAIAAAOTm7AAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=="></img>';
-    iframe = document.getElementById('frameContext');
-    iframe.contentWindow.document.write(iframe_content);
-}
-function onload_test() {
-    const context = new PerformanceContext(iframe.contentWindow.performance);
-    const entries = context.getEntriesByType('resource');
-    test_true(entries.length == 0, "entries.length == 0");
-}
-window.setup_iframe = setup_iframe;
-</script>
-</head>
-<body>
-<h1>Description</h1>
-<p>This test validates that resources with data: URIs aren't present in the Resource Timing buffer.</p>
-<div id="log"></div>
-<iframe id="frameContext" onload="onload_test();" src="resources/inject_resource_test.html"></iframe>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/fast/dom/outerText-no-element-expected.txt b/third_party/blink/web_tests/fast/dom/outerText-no-element-expected.txt
deleted file mode 100644
index 443af493..0000000
--- a/third_party/blink/web_tests/fast/dom/outerText-no-element-expected.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-Expected behavior:
-
-This page will try to set the outerText on an element that is no longer in the DOM tree. You should see a description of an expected error.
-
-this is a big test or something
-Expected error - NoModificationAllowedError: Failed to set the 'outerText' property on 'HTMLElement': The element has no parent.
diff --git a/third_party/blink/web_tests/fast/dom/outerText-no-element.html b/third_party/blink/web_tests/fast/dom/outerText-no-element.html
deleted file mode 100644
index 963a9e5..0000000
--- a/third_party/blink/web_tests/fast/dom/outerText-no-element.html
+++ /dev/null
@@ -1,18 +0,0 @@
-Expected behavior:  
-<p>This page will try to set the outerText on an element that is no longer in the DOM tree.
-You should see a description of an expected error.
-</p>
-<div id="div">this is a <i id="test">test</i> or something</div>
-
-<script>
-if (window.testRunner)
-    testRunner.dumpAsText();
-var test = document.getElementById("test");
-test.outerText = "big test";
-try {
-    test.outerText = "mistake";
-}catch (e)
-{
-    document.write("<div> Expected error - " + e + "</div>");
-}
-</script>
diff --git a/third_party/blink/web_tests/fast/dom/outerText.html b/third_party/blink/web_tests/fast/dom/outerText.html
deleted file mode 100644
index 6fe994d..0000000
--- a/third_party/blink/web_tests/fast/dom/outerText.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<div id="div">this is a <i id="test">test</i> or something</div>
-
-<script>
-var test = document.getElementById("test");
-test.outerText = "mistake";
-</script>
diff --git a/third_party/blink/web_tests/fast/dom/set-outer-text-expected.txt b/third_party/blink/web_tests/fast/dom/set-outer-text-expected.txt
deleted file mode 100644
index 328c367..0000000
--- a/third_party/blink/web_tests/fast/dom/set-outer-text-expected.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-Replaced node using outerText.
-removing node using outerText.
-Testing adding br
-using outerText.
-PASS: replace
-PASS: remove
-PASS: empty text node
-PASS: line break
diff --git a/third_party/blink/web_tests/fast/dom/set-outer-text.html b/third_party/blink/web_tests/fast/dom/set-outer-text.html
deleted file mode 100644
index f1514bd..0000000
--- a/third_party/blink/web_tests/fast/dom/set-outer-text.html
+++ /dev/null
@@ -1,53 +0,0 @@
-<html>
-<head>
-    <style>
-        pre { margin: 0; }
-    </style>
-    <script src="../../resources/dump-as-markup.js"></script>
-    <script>
-    Markup.noAutoDump();
-    
-    function assertMarkup(name, element, expected) {
-      var markup = Markup.get(element);
-      if (markup == expected)
-          log('PASS: ' + name);
-      else
-          log('FAIL: ' + name  + '\nWas:\n' + markup + '\nExpected:\n' + expected);
-    }
-    
-    function log(text) {
-      var el = document.createElement('pre');
-      el.appendChild(document.createTextNode(text));
-      document.getElementById('result').appendChild(el);
-    }
-    
-    function runTest() {
-        if (window.testRunner)
-            testRunner.dumpAsText()
-
-        var items = document.getElementsByTagName('li');
-
-        document.getElementById('testReplace').outerText = 'Replaced';
-        assertMarkup('replace', items[0], '| "Replaced node using outerText."');
-        
-        document.getElementById('testRemove').outerText = '';
-        assertMarkup('remove', items[1], '| " removing node using outerText."');
-
-        document.getElementById('testEmpty').outerText = '';
-        assertMarkup('empty text node', items[2], '| ""');
-        
-        document.getElementById('testAddBr').outerText = 'br\n';
-        assertMarkup('line break', items[3], '| "Testing adding br"\n| <br>\n| " using outerText."');
-    }
-    </script>
-</head>
-<body onload="runTest()">
-    <ul>
-      <li><span id="testReplace">Testing replacing</span> node using outerText.</li>
-      <li><span id="testRemove">Testing</span> removing node using outerText.</li>
-      <li><span id="testEmpty">Test removing entire node</span></li>
-      <li>Testing adding <span id="testAddBr">line break</span> using outerText.</li>
-    </ul>
-    <div id="result"></div>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/platform/linux/fast/dom/outerText-expected.png b/third_party/blink/web_tests/platform/linux/fast/dom/outerText-expected.png
deleted file mode 100644
index 92c6a2e..0000000
--- a/third_party/blink/web_tests/platform/linux/fast/dom/outerText-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt b/third_party/blink/web_tests/platform/mac-mac10.15/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt
deleted file mode 100644
index 1cb82e7..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt
+++ /dev/null
@@ -1,95 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "Scrolling Contents Layer",
-      "bounds": [785, 928],
-      "contentsOpaque": true,
-      "backgroundColor": "#FFFFFF",
-      "invalidations": [
-        [569, 562, 133, 42],
-        [569, 512, 133, 42],
-        [569, 462, 133, 42],
-        [569, 412, 133, 42],
-        [569, 362, 133, 42],
-        [569, 312, 133, 42],
-        [569, 262, 133, 42],
-        [569, 212, 133, 42],
-        [569, 162, 133, 42],
-        [569, 112, 133, 42],
-        [569, 62, 133, 42],
-        [427, 562, 133, 42],
-        [427, 512, 133, 42],
-        [427, 462, 133, 42],
-        [427, 412, 133, 42],
-        [427, 362, 133, 42],
-        [427, 312, 133, 42],
-        [427, 262, 133, 42],
-        [427, 212, 133, 42],
-        [427, 162, 133, 42],
-        [427, 112, 133, 42],
-        [427, 62, 133, 42],
-        [285, 562, 133, 42],
-        [285, 512, 133, 42],
-        [285, 462, 133, 42],
-        [285, 412, 133, 42],
-        [285, 362, 133, 42],
-        [285, 312, 133, 42],
-        [285, 262, 133, 42],
-        [285, 212, 133, 42],
-        [285, 162, 133, 42],
-        [285, 112, 133, 42],
-        [285, 62, 133, 42],
-        [143, 562, 133, 42],
-        [143, 512, 133, 42],
-        [143, 462, 133, 42],
-        [143, 412, 133, 42],
-        [143, 362, 133, 42],
-        [143, 312, 133, 42],
-        [143, 262, 133, 42],
-        [143, 212, 133, 42],
-        [143, 162, 133, 42],
-        [143, 112, 133, 42],
-        [143, 62, 133, 42]
-      ]
-    },
-    {
-      "name": "LayoutVideo VIDEO id='video'",
-      "bounds": [150, 60],
-      "drawsContent": false,
-      "transform": 1
-    },
-    {
-      "name": "ContentsLayer for LayoutVideo VIDEO id='video'",
-      "bounds": [150, 60],
-      "transform": 1
-    },
-    {
-      "name": "LayoutNGFlexibleBox (relative positioned) DIV class='sizing-small phase-ready state-stopped'",
-      "bounds": [150, 60],
-      "transform": 1
-    },
-    {
-      "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV)",
-      "bounds": [150, 60],
-      "transform": 1
-    },
-    {
-      "name": "ContentsLayer for Vertical Scrollbar Layer",
-      "position": [785, 0],
-      "bounds": [15, 600],
-      "contentsOpaque": true
-    }
-  ],
-  "transforms": [
-    {
-      "id": 1,
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [15, 854, 0, 1]
-      ]
-    }
-  ]
-}
-
diff --git a/third_party/blink/web_tests/platform/mac/fast/dom/outerText-expected.png b/third_party/blink/web_tests/platform/mac/fast/dom/outerText-expected.png
deleted file mode 100644
index 9727639..0000000
--- a/third_party/blink/web_tests/platform/mac/fast/dom/outerText-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt b/third_party/blink/web_tests/platform/mac/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt
index 3cccf3e..1cb82e7 100644
--- a/third_party/blink/web_tests/platform/mac/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt
+++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt
@@ -6,50 +6,50 @@
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
       "invalidations": [
-        [570, 513, 81, 40],
-        [570, 413, 81, 40],
-        [570, 313, 81, 40],
-        [570, 163, 81, 40],
-        [570, 113, 81, 40],
-        [428, 513, 81, 40],
-        [428, 413, 81, 40],
-        [428, 313, 81, 40],
-        [428, 163, 81, 40],
-        [428, 113, 81, 40],
-        [286, 513, 81, 40],
-        [286, 413, 81, 40],
-        [286, 313, 81, 40],
-        [286, 163, 81, 40],
-        [286, 113, 81, 40],
-        [144, 513, 81, 40],
-        [144, 413, 81, 40],
-        [144, 313, 81, 40],
-        [144, 163, 81, 40],
-        [144, 113, 81, 40],
-        [600, 563, 51, 40],
-        [600, 463, 51, 40],
-        [600, 363, 51, 40],
-        [600, 263, 51, 40],
-        [600, 213, 51, 40],
-        [600, 63, 51, 40],
-        [458, 563, 51, 40],
-        [458, 463, 51, 40],
-        [458, 363, 51, 40],
-        [458, 263, 51, 40],
-        [458, 213, 51, 40],
-        [458, 63, 51, 40],
-        [316, 563, 51, 40],
-        [316, 463, 51, 40],
-        [316, 363, 51, 40],
-        [316, 263, 51, 40],
-        [316, 213, 51, 40],
-        [316, 63, 51, 40],
-        [174, 563, 51, 40],
-        [174, 463, 51, 40],
-        [174, 363, 51, 40],
-        [174, 263, 51, 40],
-        [174, 213, 51, 40],
-        [174, 63, 51, 40]
+        [569, 562, 133, 42],
+        [569, 512, 133, 42],
+        [569, 462, 133, 42],
+        [569, 412, 133, 42],
+        [569, 362, 133, 42],
+        [569, 312, 133, 42],
+        [569, 262, 133, 42],
+        [569, 212, 133, 42],
+        [569, 162, 133, 42],
+        [569, 112, 133, 42],
+        [569, 62, 133, 42],
+        [427, 562, 133, 42],
+        [427, 512, 133, 42],
+        [427, 462, 133, 42],
+        [427, 412, 133, 42],
+        [427, 362, 133, 42],
+        [427, 312, 133, 42],
+        [427, 262, 133, 42],
+        [427, 212, 133, 42],
+        [427, 162, 133, 42],
+        [427, 112, 133, 42],
+        [427, 62, 133, 42],
+        [285, 562, 133, 42],
+        [285, 512, 133, 42],
+        [285, 462, 133, 42],
+        [285, 412, 133, 42],
+        [285, 362, 133, 42],
+        [285, 312, 133, 42],
+        [285, 262, 133, 42],
+        [285, 212, 133, 42],
+        [285, 162, 133, 42],
+        [285, 112, 133, 42],
+        [285, 62, 133, 42],
+        [143, 562, 133, 42],
+        [143, 512, 133, 42],
+        [143, 462, 133, 42],
+        [143, 412, 133, 42],
+        [143, 362, 133, 42],
+        [143, 312, 133, 42],
+        [143, 262, 133, 42],
+        [143, 212, 133, 42],
+        [143, 162, 133, 42],
+        [143, 112, 133, 42],
+        [143, 62, 133, 42]
       ]
     },
     {
diff --git a/third_party/blink/web_tests/platform/win/fast/dom/outerText-expected.png b/third_party/blink/web_tests/platform/win/fast/dom/outerText-expected.png
deleted file mode 100644
index 6eb530d..0000000
--- a/third_party/blink/web_tests/platform/win/fast/dom/outerText-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/virtual/plz-dedicated-worker/external/wpt/html/cross-origin-embedder-policy/credentialless/cache-storage.tentative.https-expected.txt b/third_party/blink/web_tests/virtual/plz-dedicated-worker/external/wpt/html/cross-origin-embedder-policy/credentialless/cache-storage.tentative.https-expected.txt
new file mode 100644
index 0000000..7c00cef
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/plz-dedicated-worker/external/wpt/html/cross-origin-embedder-policy/credentialless/cache-storage.tentative.https-expected.txt
@@ -0,0 +1,51 @@
+This is a testharness.js-based test.
+PASS [document] unsafe-none => unsafe-none
+FAIL [document] unsafe-none => credentialless assert_equals: expected "error" but got "retrieved"
+PASS [document] unsafe-none => credentialless + CORP
+PASS [document] unsafe-none => require-corp
+PASS [document] unsafe-none => require-corp + CORP
+PASS [document] credentialless => unsafe-none
+PASS [document] credentialless => credentialless
+PASS [document] credentialless => require-corp
+PASS [document] credentialless => require-corp + CORP
+PASS [document] require_corp => unsafe-none
+PASS [document] require_corp => credentialless
+PASS [document] require_corp => require-corp
+PASS [dedicated_worker] unsafe-none => unsafe-none
+FAIL [dedicated_worker] unsafe-none => credentialless assert_equals: expected "error" but got "retrieved"
+PASS [dedicated_worker] unsafe-none => credentialless + CORP
+PASS [dedicated_worker] unsafe-none => require-corp
+PASS [dedicated_worker] unsafe-none => require-corp + CORP
+PASS [dedicated_worker] credentialless => unsafe-none
+PASS [dedicated_worker] credentialless => credentialless
+PASS [dedicated_worker] credentialless => require-corp
+PASS [dedicated_worker] credentialless => require-corp + CORP
+PASS [dedicated_worker] require_corp => unsafe-none
+PASS [dedicated_worker] require_corp => credentialless
+PASS [dedicated_worker] require_corp => require-corp
+PASS [shared_worker] unsafe-none => unsafe-none
+FAIL [shared_worker] unsafe-none => credentialless assert_equals: expected "error" but got "retrieved"
+PASS [shared_worker] unsafe-none => credentialless + CORP
+FAIL [shared_worker] unsafe-none => require-corp assert_equals: expected "error" but got "retrieved"
+PASS [shared_worker] unsafe-none => require-corp + CORP
+PASS [shared_worker] credentialless => unsafe-none
+PASS [shared_worker] credentialless => credentialless
+FAIL [shared_worker] credentialless => require-corp assert_equals: expected "error" but got "retrieved"
+PASS [shared_worker] credentialless => require-corp + CORP
+PASS [shared_worker] require_corp => unsafe-none
+PASS [shared_worker] require_corp => credentialless
+PASS [shared_worker] require_corp => require-corp
+PASS [service_worker] unsafe-none => unsafe-none
+FAIL [service_worker] unsafe-none => credentialless assert_equals: expected "error" but got "retrieved"
+PASS [service_worker] unsafe-none => credentialless + CORP
+PASS [service_worker] unsafe-none => require-corp
+PASS [service_worker] unsafe-none => require-corp + CORP
+PASS [service_worker] credentialless => unsafe-none
+PASS [service_worker] credentialless => credentialless
+PASS [service_worker] credentialless => require-corp
+PASS [service_worker] credentialless => require-corp + CORP
+PASS [service_worker] require_corp => unsafe-none
+PASS [service_worker] require_corp => credentialless
+PASS [service_worker] require_corp => require-corp
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/webexposed/feature-policy-features-expected.txt b/third_party/blink/web_tests/webexposed/feature-policy-features-expected.txt
index cc25526..b57a0e8 100644
--- a/third_party/blink/web_tests/webexposed/feature-policy-features-expected.txt
+++ b/third_party/blink/web_tests/webexposed/feature-policy-features-expected.txt
@@ -24,6 +24,7 @@
 clipboard-write
 conversion-measurement
 cross-origin-isolated
+direct-sockets
 display-capture
 document-domain
 encrypted-media
diff --git a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
index 2210b877..52ab730 100644
--- a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
+++ b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
@@ -5706,8 +5706,6 @@
     method getInstalledRelatedApps
     method getUserMedia
     method javaEnabled
-    method openTCPSocket
-    method openUDPSocket
     method queryHandwritingRecognizerSupport
     method registerProtocolHandler
     method requestMIDIAccess
@@ -8526,14 +8524,6 @@
     method constructor
     method getTags
     method register
-interface TCPSocket
-    attribute @@toStringTag
-    getter readable
-    getter remoteAddress
-    getter remotePort
-    getter writable
-    method close
-    method constructor
 interface TaskAttributionTiming : PerformanceEntry
     attribute @@toStringTag
     getter containerId
@@ -8802,10 +8792,6 @@
     method isScript
     method isScriptURL
     setter onbeforecreatepolicy
-interface UDPSocket
-    attribute @@toStringTag
-    method close
-    method constructor
 interface UIEvent : Event
     attribute @@toStringTag
     getter detail
diff --git a/third_party/crashpad/crashpad/util/net/http_body.h b/third_party/crashpad/crashpad/util/net/http_body.h
index e053d9c..927e4a7 100644
--- a/third_party/crashpad/crashpad/util/net/http_body.h
+++ b/third_party/crashpad/crashpad/util/net/http_body.h
@@ -21,7 +21,6 @@
 #include <string>
 #include <vector>
 
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "util/file/file_io.h"
 #include "util/file/file_reader.h"
diff --git a/third_party/flex/3pp/3pp.pb b/third_party/flex/3pp/3pp.pb
new file mode 100644
index 0000000..f005588b
--- /dev/null
+++ b/third_party/flex/3pp/3pp.pb
@@ -0,0 +1,15 @@
+create {
+  platform_re: "linux-.*|mac-.*"
+  source {
+    url {
+      # Downloading a release tarball removes the autconf and gettext dep.
+      download_url: "https://github.com/westes/flex/releases/download/v2.6.4/flex-2.6.4.tar.gz"
+      version: "2.6.4"
+    }
+    unpack_archive: true
+  }
+
+  build {}
+}
+
+upload { pkg_prefix: "chromium/tools" }
diff --git a/third_party/flex/3pp/install.sh b/third_party/flex/3pp/install.sh
new file mode 100755
index 0000000..83f8fec5
--- /dev/null
+++ b/third_party/flex/3pp/install.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+# 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.
+
+set -euxo pipefail
+
+PREFIX="$1"
+
+./configure --host="$CROSS_TRIPLE" --prefix="$PREFIX"
+make install "-j$(nproc)"
diff --git a/third_party/flex/LICENSE b/third_party/flex/LICENSE
new file mode 100644
index 0000000..684b011
--- /dev/null
+++ b/third_party/flex/LICENSE
@@ -0,0 +1,42 @@
+Flex carries the copyright used for BSD software, slightly modified
+because it originated at the Lawrence Berkeley (not Livermore!) Laboratory,
+which operates under a contract with the Department of Energy:
+
+Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007 The Flex Project.
+
+Copyright (c) 1990, 1997 The Regents of the University of California.
+All rights reserved.
+
+This code is derived from software contributed to Berkeley by
+Vern Paxson.
+
+The United States Government has rights in this work pursuant
+to contract no. DE-AC03-76SF00098 between the United States
+Department of Energy and the University of California.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+Neither the name of the University nor the names of its contributors
+may be used to endorse or promote products derived from this software
+without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.
+
+This basically says "do whatever you please with this software except
+remove this notice or take advantage of the University's (or the flex
+authors') name".
+
+Note that the "flex.skl" scanner skeleton carries no copyright notice.
+You are free to do whatever you please with scanners generated using flex;
+for them, you are not even bound by the above copyright.
diff --git a/third_party/flex/OWNERS b/third_party/flex/OWNERS
new file mode 100644
index 0000000..a3fc32f
--- /dev/null
+++ b/third_party/flex/OWNERS
@@ -0,0 +1,2 @@
+mark@chromium.org
+thakis@chromium.org
diff --git a/third_party/flex/README.chromium b/third_party/flex/README.chromium
new file mode 100644
index 0000000..788b931
--- /dev/null
+++ b/third_party/flex/README.chromium
@@ -0,0 +1,12 @@
+Name: flex
+URL: https://github.com/westes/flex
+Version: v2.6.4
+Revision: ab49343
+License: BSD
+Security Critical: no
+
+Description:
+The Fast Lexical Analyzer - scanner generator for lexing in C and C++
+
+This isn't shipped and isn't even used as part of the build. It exists
+only so that it can be used as a 3pp build dep for third_party/mig.
diff --git a/third_party/freetype/README.chromium b/third_party/freetype/README.chromium
index 5a225c8..477ba43 100644
--- a/third_party/freetype/README.chromium
+++ b/third_party/freetype/README.chromium
@@ -1,7 +1,7 @@
 Name: FreeType
 URL: http://www.freetype.org/
-Version: VER-2-10-4-237-g8150ed0db
-Revision: 8150ed0db23ce7d82c6e145636255fab31b90ecf
+Version: VER-2-10-4-242-g2f62d8e07
+Revision: 2f62d8e075656e6b5fb597e681ba4b2b8296900c
 CPEPrefix: cpe:/a:freetype:freetype:2.10.4
 License: Custom license "inspired by the BSD, Artistic, and IJG (Independent
          JPEG Group) licenses"
diff --git a/third_party/mig/3pp/3pp.pb b/third_party/mig/3pp/3pp.pb
new file mode 100644
index 0000000..cfae07c
--- /dev/null
+++ b/third_party/mig/3pp/3pp.pb
@@ -0,0 +1,16 @@
+create {
+  platform_re: "linux-.*|mac-.*"
+  source {
+    url {
+      download_url: "https://github.com/markmentovai/bootstrap_cmds/archive/1146f2bf0e78b3a4855fb556cc08d83568d28a4a.tar.gz"
+      version: "121"
+    }
+    unpack_archive: true
+  }
+
+  build {
+    tool: "chromium/tools/flex"
+  }
+}
+
+upload { pkg_prefix: "chromium/third_party" }
diff --git a/third_party/mig/3pp/install.sh b/third_party/mig/3pp/install.sh
new file mode 100755
index 0000000..7e16681
--- /dev/null
+++ b/third_party/mig/3pp/install.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+# 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.
+
+set -euxo pipefail
+
+PREFIX="$1"
+
+mkdir -p installdir
+
+autoreconf --install
+./configure --prefix="$PWD/installdir"
+make
+make install
+
+mkdir -p "$PREFIX"
+cp installdir/bin/mig "$PREFIX"
+cp installdir/bin/migcom "$PREFIX"
+strip "$PREFIX/migcom"
diff --git a/third_party/mig/LICENSE b/third_party/mig/LICENSE
new file mode 100644
index 0000000..77ade51
--- /dev/null
+++ b/third_party/mig/LICENSE
@@ -0,0 +1,335 @@
+APPLE PUBLIC SOURCE LICENSE
+Version 2.0 -  August 6, 2003
+
+Please read this License carefully before downloading this software.  By
+downloading or using this software, you are agreeing to be bound by the terms
+of this License.  If you do not or cannot agree to the terms of this License,
+please do not download or use the software.
+
+Apple Note:  In January 2007, Apple changed its corporate name from "Apple
+Computer, Inc." to "Apple Inc."  This change has been reflected below and
+copyright years updated, but no other changes have been made to the APSL 2.0.
+
+1.      General; Definitions.  This License applies to any program or other
+work which Apple Inc. ("Apple") makes publicly available and which contains a
+notice placed by Apple identifying such program or work as "Original Code" and
+stating that it is subject to the terms of this Apple Public Source License
+version 2.0 ("License").  As used in this License:
+
+1.1      "Applicable Patent Rights" mean:  (a) in the case where Apple is the
+grantor of rights, (i) claims of patents that are now or hereafter acquired,
+owned by or assigned to Apple and (ii) that cover subject matter contained in
+the Original Code, but only to the extent necessary to use, reproduce and/or
+distribute the Original Code without infringement; and (b) in the case where
+You are the grantor of rights, (i) claims of patents that are now or hereafter
+acquired, owned by or assigned to You and (ii) that cover subject matter in
+Your Modifications, taken alone or in combination with Original Code.
+
+1.2     "Contributor" means any person or entity that creates or contributes to
+the creation of Modifications.
+
+1.3      "Covered Code" means the Original Code, Modifications, the combination
+of Original Code and any Modifications, and/or any respective portions thereof.
+
+1.4     "Externally Deploy" means: (a) to sublicense, distribute or otherwise
+make Covered Code available, directly or indirectly, to anyone other than You;
+and/or (b) to use Covered Code, alone or as part of a Larger Work, in any way
+to provide a service, including but not limited to delivery of content, through
+electronic communication with a client other than You.
+
+1.5     "Larger Work" means a work which combines Covered Code or portions
+thereof with code not governed by the terms of this License.
+
+1.6     "Modifications" mean any addition to, deletion from, and/or change to,
+the substance and/or structure of the Original Code, any previous
+Modifications, the combination of Original Code and any previous Modifications,
+and/or any respective portions thereof.  When code is released as a series of
+files, a Modification is:  (a) any addition to or deletion from the contents of
+a file containing Covered Code; and/or (b) any new file or other representation
+of computer program statements that contains any part of Covered Code. 
+
+1.7     "Original Code" means (a) the Source Code of a program or other work as
+originally made available by Apple under this License, including the Source
+Code of any updates or upgrades to such programs or works made available by
+Apple under this License, and that has been expressly identified by Apple as
+such in the header file(s) of such work; and (b) the object code compiled from
+such Source Code and originally made available by Apple under this License
+
+1.8     "Source Code" means the human readable form of a program or other work
+that is suitable for making modifications to it, including all modules it
+contains, plus any associated interface definition files, scripts used to
+control compilation and installation of an executable (object code).
+
+1.9     "You" or "Your" means an individual or a legal entity exercising rights
+under this License.  For legal entities, "You" or "Your" includes any entity
+which controls, is controlled by, or is under common control with, You, where
+"control" means (a) the power, direct or indirect, to cause the direction or
+management of such entity, whether by contract or otherwise, or (b) ownership
+of fifty percent (50%) or more of the outstanding shares or beneficial
+ownership of such entity.
+
+2.      Permitted Uses; Conditions & Restrictions.   Subject to the terms and
+conditions of this License, Apple hereby grants You, effective on the date You
+accept this License and download the Original Code, a world-wide, royalty-free,
+non-exclusive license, to the extent of Apple's Applicable Patent Rights and
+copyrights covering the Original Code, to do the following:
+
+2.1     Unmodified Code.  You may use, reproduce, display, perform, internally
+distribute within Your organization, and Externally Deploy verbatim, unmodified
+copies of the Original Code, for commercial or non-commercial purposes,
+provided that in each instance:
+
+(a)     You must retain and reproduce in all copies of Original Code the
+copyright and other proprietary notices and disclaimers of Apple as they appear
+in the Original Code, and keep intact all notices in the Original Code that
+refer to this License; and
+
+(b)     You must include a copy of this License with every copy of Source Code
+of Covered Code and documentation You distribute or Externally Deploy, and You
+may not offer or impose any terms on such Source Code that alter or restrict
+this License or the recipients' rights hereunder, except as permitted under
+Section 6.
+
+2.2     Modified Code.  You may modify Covered Code and use, reproduce,
+display, perform, internally distribute within Your organization, and
+Externally Deploy Your Modifications and Covered Code, for commercial or
+non-commercial purposes, provided that in each instance You also meet all of
+these conditions:
+
+(a)     You must satisfy all the conditions of Section 2.1 with respect to the
+Source Code of the Covered Code; 
+
+(b)     You must duplicate, to the extent it does not already exist, the notice
+in Exhibit A in each file of the Source Code of all Your Modifications, and
+cause the modified files to carry prominent notices stating that You changed
+the files and the date of any change; and
+
+(c)     If You Externally Deploy Your Modifications, You must make Source Code
+of all Your Externally Deployed Modifications either available to those to whom
+You have Externally Deployed Your Modifications, or publicly available.  Source
+Code of Your Externally Deployed Modifications must be released under the terms
+set forth in this License, including the license grants set forth in Section 3
+below, for as long as you Externally Deploy the Covered Code or twelve (12)
+months from the date of initial External Deployment, whichever is longer. You
+should preferably distribute the Source Code of Your Externally Deployed
+Modifications electronically (e.g. download from a web site).
+
+2.3     Distribution of Executable Versions.  In addition, if You Externally
+Deploy Covered Code (Original Code and/or Modifications) in object code,
+executable form only, You must include a prominent notice, in the code itself
+as well as in related documentation, stating that Source Code of the Covered
+Code is available under the terms of this License with information on how and
+where to obtain such Source Code.  
+
+2.4     Third Party Rights.  You expressly acknowledge and agree that although
+Apple and each Contributor grants the licenses to their respective portions of
+the Covered Code set forth herein, no assurances are provided by Apple or any
+Contributor that the Covered Code does not infringe the patent or other
+intellectual property rights of any other entity. Apple and each Contributor
+disclaim any liability to You for claims brought by any other entity based on
+infringement of intellectual property rights or otherwise. As a condition to
+exercising the rights and licenses granted hereunder, You hereby assume sole
+responsibility to secure any other intellectual property rights needed, if any.
+For example, if a third party patent license is required to allow You to
+distribute the Covered Code, it is Your responsibility to acquire that license
+before distributing the Covered Code.
+
+3.      Your Grants.  In consideration of, and as a condition to, the licenses
+granted to You under this License, You hereby grant to any person or entity
+receiving or distributing Covered Code under this License a non-exclusive,
+royalty-free, perpetual, irrevocable license, under Your Applicable Patent
+Rights and other intellectual property rights (other than patent) owned or
+controlled by You, to use, reproduce, display, perform, modify, sublicense,
+distribute and Externally Deploy Your Modifications of the same scope and
+extent as Apple's licenses under Sections 2.1 and 2.2 above.  
+
+4.      Larger Works.  You may create a Larger Work by combining Covered Code
+with other code not governed by the terms of this License and distribute the
+Larger Work as a single product.  In each such instance, You must make sure the
+requirements of this License are fulfilled for the Covered Code or any portion
+thereof. 
+
+5.      Limitations on Patent License.   Except as expressly stated in Section
+2, no other patent rights, express or implied, are granted by Apple herein.
+Modifications and/or Larger Works may require additional patent licenses from
+Apple which Apple may grant in its sole discretion.  
+
+6.      Additional Terms.  You may choose to offer, and to charge a fee for,
+warranty, support, indemnity or liability obligations and/or other rights
+consistent with the scope of the license granted herein ("Additional Terms") to
+one or more recipients of Covered Code. However, You may do so only on Your own
+behalf and as Your sole responsibility, and not on behalf of Apple or any
+Contributor. You must obtain the recipient's agreement that any such Additional
+Terms are offered by You alone, and You hereby agree to indemnify, defend and
+hold Apple and every Contributor harmless for any liability incurred by or
+claims asserted against Apple or such Contributor by reason of any such
+Additional Terms. 
+
+7.      Versions of the License.  Apple may publish revised and/or new versions
+of this License from time to time.  Each version will be given a distinguishing
+version number.  Once Original Code has been published under a particular
+version of this License, You may continue to use it under the terms of that
+version. You may also choose to use such Original Code under the terms of any
+subsequent version of this License published by Apple.  No one other than Apple
+has the right to modify the terms applicable to Covered Code created under this
+License.  
+
+8.      NO WARRANTY OR SUPPORT.  The Covered Code may contain in whole or in
+part pre-release, untested, or not fully tested works.  The Covered Code may
+contain errors that could cause failures or loss of data, and may be incomplete
+or contain inaccuracies.  You expressly acknowledge and agree that use of the
+Covered Code, or any portion thereof, is at Your sole and entire risk.  THE
+COVERED CODE IS PROVIDED "AS IS" AND WITHOUT WARRANTY, UPGRADES OR SUPPORT OF
+ANY KIND AND APPLE AND APPLE'S LICENSOR(S) (COLLECTIVELY REFERRED TO AS "APPLE"
+FOR THE PURPOSES OF SECTIONS 8 AND 9) AND ALL CONTRIBUTORS EXPRESSLY DISCLAIM
+ALL WARRANTIES AND/OR CONDITIONS, EXPRESS OR IMPLIED, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES AND/OR CONDITIONS OF MERCHANTABILITY, OF
+SATISFACTORY QUALITY, OF FITNESS FOR A PARTICULAR PURPOSE, OF ACCURACY, OF
+QUIET ENJOYMENT, AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.  APPLE AND EACH
+CONTRIBUTOR DOES NOT WARRANT AGAINST INTERFERENCE WITH YOUR ENJOYMENT OF THE
+COVERED CODE, THAT THE FUNCTIONS CONTAINED IN THE COVERED CODE WILL MEET YOUR
+REQUIREMENTS, THAT THE OPERATION OF THE COVERED CODE WILL BE UNINTERRUPTED OR
+ERROR-FREE, OR THAT DEFECTS IN THE COVERED CODE WILL BE CORRECTED.  NO ORAL OR
+WRITTEN INFORMATION OR ADVICE GIVEN BY APPLE, AN APPLE AUTHORIZED
+REPRESENTATIVE OR ANY CONTRIBUTOR SHALL CREATE A WARRANTY.  You acknowledge
+that the Covered Code is not intended for use in the operation of nuclear
+facilities, aircraft navigation, communication systems, or air traffic control
+machines in which case the failure of the Covered Code could lead to death,
+personal injury, or severe physical or environmental damage.
+
+9.      LIMITATION OF LIABILITY. TO THE EXTENT NOT PROHIBITED BY LAW, IN NO
+EVENT SHALL APPLE OR ANY CONTRIBUTOR BE LIABLE FOR ANY INCIDENTAL, SPECIAL,
+INDIRECT OR CONSEQUENTIAL DAMAGES ARISING OUT OF OR RELATING TO THIS LICENSE OR
+YOUR USE OR INABILITY TO USE THE COVERED CODE, OR ANY PORTION THEREOF, WHETHER
+UNDER A THEORY OF CONTRACT, WARRANTY, TORT (INCLUDING NEGLIGENCE), PRODUCTS
+LIABILITY OR OTHERWISE, EVEN IF APPLE OR SUCH CONTRIBUTOR HAS BEEN ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES AND NOTWITHSTANDING THE FAILURE OF ESSENTIAL
+PURPOSE OF ANY REMEDY. SOME JURISDICTIONS DO NOT ALLOW THE LIMITATION OF
+LIABILITY OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS LIMITATION MAY NOT
+APPLY TO YOU. In no event shall Apple's total liability to You for all damages
+(other than as may be required by applicable law) under this License exceed the
+amount of fifty dollars ($50.00).
+
+10.     Trademarks.  This License does not grant any rights to use the
+trademarks or trade names  "Apple", "Mac", "Mac OS", "QuickTime", "QuickTime
+Streaming Server" or any other trademarks, service marks, logos or trade names
+belonging to Apple (collectively "Apple Marks") or to any trademark, service
+mark, logo or trade name belonging to any Contributor.  You agree not to use
+any Apple Marks in or as part of the name of products derived from the Original
+Code or to endorse or promote products derived from the Original Code other
+than as expressly permitted by and in strict compliance at all times with
+Apple's third party trademark usage guidelines which are posted at
+http://www.apple.com/legal/guidelinesfor3rdparties.html.  
+
+11.     Ownership. Subject to the licenses granted under this License, each
+Contributor retains all rights, title and interest in and to any Modifications
+made by such Contributor.  Apple retains all rights, title and interest in and
+to the Original Code and any Modifications made by or on behalf of Apple
+("Apple Modifications"), and such Apple Modifications will not be automatically
+subject to this License.  Apple may, at its sole discretion, choose to license
+such Apple Modifications under this License, or on different terms from those
+contained in this License or may choose not to license them at all.  
+
+12.     Termination.  
+
+12.1    Termination.  This License and the rights granted hereunder will
+terminate:
+
+(a)     automatically without notice from Apple if You fail to comply with any
+term(s) of this License and fail to cure such breach within 30 days of becoming
+aware of such breach;
+(b)     immediately in the event of the circumstances described in Section
+13.5(b); or
+(c)     automatically without notice from Apple if You, at any time during the
+term of this License, commence an action for patent infringement against Apple;
+provided that Apple did not first commence an action for patent infringement
+against You in that instance.
+
+12.2    Effect of Termination.  Upon termination, You agree to immediately stop
+any further use, reproduction, modification, sublicensing and distribution of
+the Covered Code.  All sublicenses to the Covered Code which have been properly
+granted prior to termination shall survive any termination of this License.
+Provisions which, by their nature, should remain in effect beyond the
+termination of this License shall survive, including but not limited to
+Sections 3, 5, 8, 9, 10, 11, 12.2 and 13.  No party will be liable to any other
+for compensation, indemnity or damages of any sort solely as a result of
+terminating this License in accordance with its terms, and termination of this
+License will be without prejudice to any other right or remedy of any party.
+
+13.     Miscellaneous.
+
+13.1    Government End Users.   The Covered Code is a "commercial item" as
+defined in FAR 2.101.  Government software and technical data rights in the
+Covered Code include only those rights customarily provided to the public as
+defined in this License. This customary commercial license in technical data
+and software is provided in accordance with FAR 12.211 (Technical Data) and
+12.212 (Computer Software) and, for Department of Defense purchases, DFAR
+252.227-7015 (Technical Data -- Commercial Items) and 227.7202-3 (Rights in
+Commercial Computer Software or Computer Software Documentation).  Accordingly,
+all U.S. Government End Users acquire Covered Code with only those rights set
+forth herein.
+
+13.2    Relationship of Parties.  This License will not be construed as
+creating an agency, partnership, joint venture or any other form of legal
+association between or among You, Apple or any Contributor, and You will not
+represent to the contrary, whether expressly, by implication, appearance or
+otherwise.
+
+13.3    Independent Development.   Nothing in this License will impair Apple's
+right to acquire, license, develop, have others develop for it, market and/or
+distribute technology or products that perform the same or similar functions
+as, or otherwise compete with, Modifications, Larger Works, technology or
+products that You may develop, produce, market or distribute.
+
+13.4    Waiver; Construction.  Failure by Apple or any Contributor to enforce
+any provision of this License will not be deemed a waiver of future enforcement
+of that or any other provision.  Any law or regulation which provides that the
+language of a contract shall be construed against the drafter will not apply to
+this License.
+
+13.5    Severability.  (a) If for any reason a court of competent jurisdiction
+finds any provision of this License, or portion thereof, to be unenforceable,
+that provision of the License will be enforced to the maximum extent
+permissible so as to effect the economic benefits and intent of the parties,
+and the remainder of this License will continue in full force and effect.  (b)
+Notwithstanding the foregoing, if applicable law prohibits or restricts You
+from fully and/or specifically complying with Sections 2 and/or 3 or prevents
+the enforceability of either of those Sections, this License will immediately
+terminate and You must immediately discontinue any use of the Covered Code and
+destroy all copies of it that are in your possession or control.
+
+13.6    Dispute Resolution.  Any litigation or other dispute resolution between
+You and Apple relating to this License shall take place in the Northern
+District of California, and You and Apple hereby consent to the personal
+jurisdiction of, and venue in, the state and federal courts within that
+District with respect to this License. The application of the United Nations
+Convention on Contracts for the International Sale of Goods is expressly
+excluded.
+
+13.7    Entire Agreement; Governing Law.  This License constitutes the entire
+agreement between the parties with respect to the subject matter hereof.  This
+License shall be governed by the laws of the United States and the State of
+California, except that body of California law concerning conflicts of law. 
+
+Where You are located in the province of Quebec, Canada, the following clause
+applies:  The parties hereby confirm that they have requested that this License
+and all related documents be drafted in English. Les parties ont exigé que le
+présent contrat et tous les documents connexes soient rédigés en anglais. 
+
+EXHIBIT A. 
+
+"Portions Copyright (c) 1999-2007 Apple Inc.  All Rights Reserved.
+
+This file contains Original Code and/or Modifications of Original Code as
+defined in and that are subject to the Apple Public Source License Version 2.0
+(the 'License').  You may not use this file except in compliance with the
+License.  Please obtain a copy of the License at
+http://www.opensource.apple.com/apsl/ and read it before using this file.
+
+The Original Code and all software distributed under the License are
+distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS
+OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT
+LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
+PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.  Please see the License for the
+specific language governing rights and limitations under the License." 
+
diff --git a/third_party/mig/OWNERS b/third_party/mig/OWNERS
new file mode 100644
index 0000000..a3fc32f
--- /dev/null
+++ b/third_party/mig/OWNERS
@@ -0,0 +1,2 @@
+mark@chromium.org
+thakis@chromium.org
diff --git a/third_party/mig/README.chromium b/third_party/mig/README.chromium
new file mode 100644
index 0000000..e90e39c
--- /dev/null
+++ b/third_party/mig/README.chromium
@@ -0,0 +1,17 @@
+Name: Cross-Platform Mach Interface Generator (mig)
+URL: https://github.com/markmentovai/bootstrap_cmds
+Version: 121
+Revision: 1146f2bf0e78b3a4855fb556cc08d83568d28a4a
+License: APPLE PUBLIC SOURCE LICENSE
+License File: NOT_SHIPPED
+Security Critical: no
+
+Description:
+mig takes Mach interface descriptions (.defs files) as input, and outputs
+headers (.h files) and implementations (.c files) for both clients and servers
+of the Mach RPC interface described.
+
+This contains a 3pp description used to build a CIPD package of the above code.
+
+Local Modifications:
+none
diff --git a/third_party/tflite-support/BUILD.gn b/third_party/tflite-support/BUILD.gn
index ca9e41d..053e358 100644
--- a/third_party/tflite-support/BUILD.gn
+++ b/third_party/tflite-support/BUILD.gn
@@ -15,8 +15,13 @@
 
 proto_library("tflite-support-proto") {
   proto_in_dir = "src"
-  sources =
-      [ "src/tensorflow_lite_support/cc/task/core/proto/external_file.proto" ]
+  sources = [
+    "src/tensorflow_lite_support/cc/task/core/proto/external_file.proto",
+    "src/tensorflow_lite_support/cc/task/vision/proto/bounding_box.proto",
+    "src/tensorflow_lite_support/cc/task/vision/proto/class.proto",
+    "src/tensorflow_lite_support/cc/task/vision/proto/classifications.proto",
+    "src/tensorflow_lite_support/cc/task/vision/proto/image_classifier_options.proto",
+  ]
   cc_generator_options = "lite=true:"
 }
 
@@ -63,6 +68,24 @@
     "src/tensorflow_lite_support/cc/task/text/nlclassifier/bert_nl_classifier.h",
     "src/tensorflow_lite_support/cc/task/text/nlclassifier/nl_classifier.cc",
     "src/tensorflow_lite_support/cc/task/text/nlclassifier/nl_classifier.h",
+    "src/tensorflow_lite_support/cc/task/vision/core/classification_head.cc",
+    "src/tensorflow_lite_support/cc/task/vision/core/classification_head.h",
+    "src/tensorflow_lite_support/cc/task/vision/core/frame_buffer.cc",
+    "src/tensorflow_lite_support/cc/task/vision/core/frame_buffer.h",
+    "src/tensorflow_lite_support/cc/task/vision/core/label_map_item.cc",
+    "src/tensorflow_lite_support/cc/task/vision/core/label_map_item.h",
+    "src/tensorflow_lite_support/cc/task/vision/image_classifier.cc",
+    "src/tensorflow_lite_support/cc/task/vision/image_classifier.h",
+    "src/tensorflow_lite_support/cc/task/vision/utils/frame_buffer_common_utils.cc",
+    "src/tensorflow_lite_support/cc/task/vision/utils/frame_buffer_common_utils.h",
+    "src/tensorflow_lite_support/cc/task/vision/utils/frame_buffer_utils.cc",
+    "src/tensorflow_lite_support/cc/task/vision/utils/frame_buffer_utils.h",
+    "src/tensorflow_lite_support/cc/task/vision/utils/image_tensor_specs.cc",
+    "src/tensorflow_lite_support/cc/task/vision/utils/image_tensor_specs.h",
+    "src/tensorflow_lite_support/cc/task/vision/utils/libyuv_frame_buffer_utils.cc",
+    "src/tensorflow_lite_support/cc/task/vision/utils/libyuv_frame_buffer_utils.h",
+    "src/tensorflow_lite_support/cc/task/vision/utils/score_calibration.cc",
+    "src/tensorflow_lite_support/cc/task/vision/utils/score_calibration.h",
     "src/tensorflow_lite_support/cc/text/tokenizers/bert_tokenizer.cc",
     "src/tensorflow_lite_support/cc/text/tokenizers/bert_tokenizer.h",
     "src/tensorflow_lite_support/cc/text/tokenizers/regex_tokenizer.cc",
@@ -82,6 +105,7 @@
     "//base",
     "//third_party/abseil-cpp:absl",
     "//third_party/flatbuffers",
+    "//third_party/libyuv",
     "//third_party/libzip",
     "//third_party/smhasher:murmurhash2",
     "//third_party/tensorflow-text",
diff --git a/third_party/tflite-support/patches/0001-Fix-signed-comparison-in-base_vision_task_api.h.patch b/third_party/tflite-support/patches/0001-Fix-signed-comparison-in-base_vision_task_api.h.patch
new file mode 100644
index 0000000..6a56310a
--- /dev/null
+++ b/third_party/tflite-support/patches/0001-Fix-signed-comparison-in-base_vision_task_api.h.patch
@@ -0,0 +1,34 @@
+From c8bdfe3f6b3ce087c36b551d668b97101f620bdc Mon Sep 17 00:00:00 2001
+From: Daniel Rubery <drubery@chromium.org>
+Date: Thu, 6 May 2021 11:45:48 -0700
+Subject: [PATCH] Fix signed comparison in base_vision_task_api.h
+
+---
+ .../cc/task/vision/core/base_vision_task_api.h                | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/third_party/tflite-support/src/tensorflow_lite_support/cc/task/vision/core/base_vision_task_api.h b/third_party/tflite-support/src/tensorflow_lite_support/cc/task/vision/core/base_vision_task_api.h
+index 3d1359685f3f..c787876bec33 100644
+--- a/third_party/tflite-support/src/tensorflow_lite_support/cc/task/vision/core/base_vision_task_api.h
++++ b/third_party/tflite-support/src/tensorflow_lite_support/cc/task/vision/core/base_vision_task_api.h
+@@ -204,7 +204,7 @@ class BaseVisionTaskApi
+         if (normalization_options.num_values == 1) {
+           float mean_value = normalization_options.mean_values[0];
+           float inv_std_value = (1.0f / normalization_options.std_values[0]);
+-          for (int i = 0; i < input_data_byte_size / sizeof(uint8);
++          for (size_t i = 0; i < input_data_byte_size / sizeof(uint8);
+                i++, input_data++, normalized_input_data++) {
+             *normalized_input_data =
+                 inv_std_value * (static_cast<float>(*input_data) - mean_value);
+@@ -214,7 +214,7 @@ class BaseVisionTaskApi
+               1.0f / normalization_options.std_values[0],
+               1.0f / normalization_options.std_values[1],
+               1.0f / normalization_options.std_values[2]};
+-          for (int i = 0; i < input_data_byte_size / sizeof(uint8);
++          for (size_t i = 0; i < input_data_byte_size / sizeof(uint8);
+                i++, input_data++, normalized_input_data++) {
+             *normalized_input_data = inv_std_values[i % 3] *
+                                      (static_cast<float>(*input_data) -
+-- 
+2.31.1.607.g51e8a6a459-goog
+
diff --git a/third_party/tflite-support/patches/0001-Remove-signed-comparison-in-frame_buffer.h.patch b/third_party/tflite-support/patches/0001-Remove-signed-comparison-in-frame_buffer.h.patch
new file mode 100644
index 0000000..757ec2e6
--- /dev/null
+++ b/third_party/tflite-support/patches/0001-Remove-signed-comparison-in-frame_buffer.h.patch
@@ -0,0 +1,25 @@
+From 368b317061ba7deb1f42c52c5443c261bb6c03ea Mon Sep 17 00:00:00 2001
+From: Daniel Rubery <drubery@chromium.org>
+Date: Thu, 6 May 2021 11:40:37 -0700
+Subject: [PATCH] Remove signed comparison in frame_buffer.h
+
+---
+ .../tensorflow_lite_support/cc/task/vision/core/frame_buffer.h  | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/third_party/tflite-support/src/tensorflow_lite_support/cc/task/vision/core/frame_buffer.h b/third_party/tflite-support/src/tensorflow_lite_support/cc/task/vision/core/frame_buffer.h
+index 22f63fc34d36..42ac080c4749 100644
+--- a/third_party/tflite-support/src/tensorflow_lite_support/cc/task/vision/core/frame_buffer.h
++++ b/third_party/tflite-support/src/tensorflow_lite_support/cc/task/vision/core/frame_buffer.h
+@@ -246,7 +246,7 @@ class FrameBuffer {
+ 
+   // Returns plane indexed by the input `index`.
+   const Plane plane(int index) const {
+-    if (index > -1 && index < planes_.size()) {
++    if (index > -1 && static_cast<size_t>(index) < planes_.size()) {
+       return planes_[index];
+     }
+     return {};
+-- 
+2.31.1.607.g51e8a6a459-goog
+
diff --git a/third_party/tflite-support/patches/0001-Remove-unused-qualifiers-in-frame_buffer.h.patch b/third_party/tflite-support/patches/0001-Remove-unused-qualifiers-in-frame_buffer.h.patch
new file mode 100644
index 0000000..d80bdd1
--- /dev/null
+++ b/third_party/tflite-support/patches/0001-Remove-unused-qualifiers-in-frame_buffer.h.patch
@@ -0,0 +1,38 @@
+From b23fcde4753dbf5e4adc325e9ded16800f1d1bc5 Mon Sep 17 00:00:00 2001
+From: Daniel Rubery <drubery@chromium.org>
+Date: Thu, 6 May 2021 11:38:06 -0700
+Subject: [PATCH] Remove unused qualifiers in frame_buffer.h
+
+---
+ .../cc/task/vision/core/frame_buffer.h                      | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/third_party/tflite-support/src/tensorflow_lite_support/cc/task/vision/core/frame_buffer.h b/third_party/tflite-support/src/tensorflow_lite_support/cc/task/vision/core/frame_buffer.h
+index 1556b7dfabef..22f63fc34d36 100644
+--- a/third_party/tflite-support/src/tensorflow_lite_support/cc/task/vision/core/frame_buffer.h
++++ b/third_party/tflite-support/src/tensorflow_lite_support/cc/task/vision/core/frame_buffer.h
+@@ -242,7 +242,7 @@ class FrameBuffer {
+         timestamp_(timestamp) {}
+ 
+   // Returns number of planes.
+-  const int plane_count() const { return planes_.size(); }
++  int plane_count() const { return planes_.size(); }
+ 
+   // Returns plane indexed by the input `index`.
+   const Plane plane(int index) const {
+@@ -256,10 +256,10 @@ class FrameBuffer {
+   const Dimension dimension() const { return dimension_; }
+ 
+   // Returns FrameBuffer format.
+-  const Format format() const { return format_; }
++  Format format() const { return format_; }
+ 
+   // Returns FrameBuffer orientation.
+-  const Orientation orientation() const { return orientation_; }
++  Orientation orientation() const { return orientation_; }
+ 
+   // Returns FrameBuffer timestamp.
+   const absl::Time timestamp() const { return timestamp_; }
+-- 
+2.31.1.607.g51e8a6a459-goog
+
diff --git a/third_party/tflite-support/patches/0001-Remove-use-of-banned-absl-any.patch b/third_party/tflite-support/patches/0001-Remove-use-of-banned-absl-any.patch
new file mode 100644
index 0000000..fdd6997b
--- /dev/null
+++ b/third_party/tflite-support/patches/0001-Remove-use-of-banned-absl-any.patch
@@ -0,0 +1,64 @@
+From 670dfffa386fd0ff28e66cfe1238af43b4e587ce Mon Sep 17 00:00:00 2001
+From: Daniel Rubery <drubery@chromium.org>
+Date: Thu, 6 May 2021 11:22:13 -0700
+Subject: [PATCH] Remove use of banned absl::any
+
+---
+ .../cc/task/vision/core/frame_buffer.h        | 27 -------------------
+ 1 file changed, 27 deletions(-)
+
+diff --git a/third_party/tflite-support/src/tensorflow_lite_support/cc/task/vision/core/frame_buffer.h b/third_party/tflite-support/src/tensorflow_lite_support/cc/task/vision/core/frame_buffer.h
+index 2bea92883c4d..1556b7dfabef 100644
+--- a/third_party/tflite-support/src/tensorflow_lite_support/cc/task/vision/core/frame_buffer.h
++++ b/third_party/tflite-support/src/tensorflow_lite_support/cc/task/vision/core/frame_buffer.h
+@@ -27,7 +27,6 @@ limitations under the License.
+ #include "absl/strings/str_cat.h"
+ #include "absl/time/clock.h"
+ #include "absl/time/time.h"
+-#include "absl/types/any.h"
+ #include "absl/types/optional.h"
+ #include "tensorflow_lite_support/cc/port/integral_types.h"
+ #include "tensorflow_lite_support/cc/port/statusor.h"
+@@ -253,31 +252,6 @@ class FrameBuffer {
+     return {};
+   }
+ 
+-  // Returns the tag associated to the tag_key.
+-  absl::any GetTag(const std::string& tag_key) const {
+-    auto iter = tags_.find(tag_key);
+-    if (iter != tags_.end()) {
+-      return iter->second;
+-    }
+-    return absl::any();
+-  }
+-
+-  // Inserts or updates the tags map with key value pair (tag_key, tag_value).
+-  void InsertOrUpdateTag(const std::string& tag_key, absl::any tag_value) {
+-    tags_[tag_key] = std::move(tag_value);
+-  }
+-
+-  // Inserts the key value pair (tag_key, tag_value) into tags map. If the
+-  // tag_key already exists, an internal error will return.
+-  absl::Status InsertTag(const std::string& tag_key, absl::any tag_value) {
+-    auto iter = tags_.emplace(tag_key, tag_value);
+-    if (iter.second) {
+-      return absl::OkStatus();
+-    }
+-    return absl::InternalError(absl::StrCat(
+-        "tag_key already exists in tags.tag_key was not inserted: ", tag_key));
+-  }
+-
+   // Returns FrameBuffer dimension.
+   const Dimension dimension() const { return dimension_; }
+ 
+@@ -292,7 +266,6 @@ class FrameBuffer {
+ 
+  private:
+   std::vector<Plane> planes_;
+-  std::map<std::string, absl::any> tags_;
+   Dimension dimension_;
+   Format format_;
+   Orientation orientation_;
+-- 
+2.31.1.607.g51e8a6a459-goog
+
diff --git a/third_party/tflite-support/patches/0001-Use-third_party-libyuv.patch b/third_party/tflite-support/patches/0001-Use-third_party-libyuv.patch
new file mode 100644
index 0000000..1210ba8
--- /dev/null
+++ b/third_party/tflite-support/patches/0001-Use-third_party-libyuv.patch
@@ -0,0 +1,30 @@
+From 226d36a5d12ca3080b1d0d9b450be949e418e318 Mon Sep 17 00:00:00 2001
+From: Daniel Rubery <drubery@chromium.org>
+Date: Thu, 6 May 2021 11:26:23 -0700
+Subject: [PATCH] Use third_party/libyuv
+
+---
+ .../cc/task/vision/utils/libyuv_frame_buffer_utils.cc           | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/third_party/tflite-support/src/tensorflow_lite_support/cc/task/vision/utils/libyuv_frame_buffer_utils.cc b/third_party/tflite-support/src/tensorflow_lite_support/cc/task/vision/utils/libyuv_frame_buffer_utils.cc
+index f3cd0c70fe1b..b50b500bb5a4 100644
+--- a/third_party/tflite-support/src/tensorflow_lite_support/cc/task/vision/utils/libyuv_frame_buffer_utils.cc
++++ b/third_party/tflite-support/src/tensorflow_lite_support/cc/task/vision/utils/libyuv_frame_buffer_utils.cc
+@@ -23,12 +23,12 @@ limitations under the License.
+ #include "absl/status/status.h"
+ #include "absl/strings/str_cat.h"
+ #include "absl/strings/str_format.h"
+-#include "include/libyuv.h"
+ #include "tensorflow_lite_support/cc/common.h"
+ #include "tensorflow_lite_support/cc/port/integral_types.h"
+ #include "tensorflow_lite_support/cc/port/status_macros.h"
+ #include "tensorflow_lite_support/cc/port/statusor.h"
+ #include "tensorflow_lite_support/cc/task/vision/utils/frame_buffer_common_utils.h"
++#include "third_party/libyuv/include/libyuv.h"
+ 
+ namespace tflite {
+ namespace task {
+-- 
+2.31.1.607.g51e8a6a459-goog
+
diff --git a/third_party/tflite-support/src/tensorflow_lite_support/cc/task/vision/core/base_vision_task_api.h b/third_party/tflite-support/src/tensorflow_lite_support/cc/task/vision/core/base_vision_task_api.h
index 3d135968..c787876b 100644
--- a/third_party/tflite-support/src/tensorflow_lite_support/cc/task/vision/core/base_vision_task_api.h
+++ b/third_party/tflite-support/src/tensorflow_lite_support/cc/task/vision/core/base_vision_task_api.h
@@ -204,7 +204,7 @@
         if (normalization_options.num_values == 1) {
           float mean_value = normalization_options.mean_values[0];
           float inv_std_value = (1.0f / normalization_options.std_values[0]);
-          for (int i = 0; i < input_data_byte_size / sizeof(uint8);
+          for (size_t i = 0; i < input_data_byte_size / sizeof(uint8);
                i++, input_data++, normalized_input_data++) {
             *normalized_input_data =
                 inv_std_value * (static_cast<float>(*input_data) - mean_value);
@@ -214,7 +214,7 @@
               1.0f / normalization_options.std_values[0],
               1.0f / normalization_options.std_values[1],
               1.0f / normalization_options.std_values[2]};
-          for (int i = 0; i < input_data_byte_size / sizeof(uint8);
+          for (size_t i = 0; i < input_data_byte_size / sizeof(uint8);
                i++, input_data++, normalized_input_data++) {
             *normalized_input_data = inv_std_values[i % 3] *
                                      (static_cast<float>(*input_data) -
diff --git a/third_party/tflite-support/src/tensorflow_lite_support/cc/task/vision/core/frame_buffer.h b/third_party/tflite-support/src/tensorflow_lite_support/cc/task/vision/core/frame_buffer.h
index 2bea928..42ac080 100644
--- a/third_party/tflite-support/src/tensorflow_lite_support/cc/task/vision/core/frame_buffer.h
+++ b/third_party/tflite-support/src/tensorflow_lite_support/cc/task/vision/core/frame_buffer.h
@@ -27,7 +27,6 @@
 #include "absl/strings/str_cat.h"
 #include "absl/time/clock.h"
 #include "absl/time/time.h"
-#include "absl/types/any.h"
 #include "absl/types/optional.h"
 #include "tensorflow_lite_support/cc/port/integral_types.h"
 #include "tensorflow_lite_support/cc/port/statusor.h"
@@ -243,56 +242,30 @@
         timestamp_(timestamp) {}
 
   // Returns number of planes.
-  const int plane_count() const { return planes_.size(); }
+  int plane_count() const { return planes_.size(); }
 
   // Returns plane indexed by the input `index`.
   const Plane plane(int index) const {
-    if (index > -1 && index < planes_.size()) {
+    if (index > -1 && static_cast<size_t>(index) < planes_.size()) {
       return planes_[index];
     }
     return {};
   }
 
-  // Returns the tag associated to the tag_key.
-  absl::any GetTag(const std::string& tag_key) const {
-    auto iter = tags_.find(tag_key);
-    if (iter != tags_.end()) {
-      return iter->second;
-    }
-    return absl::any();
-  }
-
-  // Inserts or updates the tags map with key value pair (tag_key, tag_value).
-  void InsertOrUpdateTag(const std::string& tag_key, absl::any tag_value) {
-    tags_[tag_key] = std::move(tag_value);
-  }
-
-  // Inserts the key value pair (tag_key, tag_value) into tags map. If the
-  // tag_key already exists, an internal error will return.
-  absl::Status InsertTag(const std::string& tag_key, absl::any tag_value) {
-    auto iter = tags_.emplace(tag_key, tag_value);
-    if (iter.second) {
-      return absl::OkStatus();
-    }
-    return absl::InternalError(absl::StrCat(
-        "tag_key already exists in tags.tag_key was not inserted: ", tag_key));
-  }
-
   // Returns FrameBuffer dimension.
   const Dimension dimension() const { return dimension_; }
 
   // Returns FrameBuffer format.
-  const Format format() const { return format_; }
+  Format format() const { return format_; }
 
   // Returns FrameBuffer orientation.
-  const Orientation orientation() const { return orientation_; }
+  Orientation orientation() const { return orientation_; }
 
   // Returns FrameBuffer timestamp.
   const absl::Time timestamp() const { return timestamp_; }
 
  private:
   std::vector<Plane> planes_;
-  std::map<std::string, absl::any> tags_;
   Dimension dimension_;
   Format format_;
   Orientation orientation_;
diff --git a/third_party/tflite-support/src/tensorflow_lite_support/cc/task/vision/utils/libyuv_frame_buffer_utils.cc b/third_party/tflite-support/src/tensorflow_lite_support/cc/task/vision/utils/libyuv_frame_buffer_utils.cc
index f3cd0c7..b50b500 100644
--- a/third_party/tflite-support/src/tensorflow_lite_support/cc/task/vision/utils/libyuv_frame_buffer_utils.cc
+++ b/third_party/tflite-support/src/tensorflow_lite_support/cc/task/vision/utils/libyuv_frame_buffer_utils.cc
@@ -23,12 +23,12 @@
 #include "absl/status/status.h"
 #include "absl/strings/str_cat.h"
 #include "absl/strings/str_format.h"
-#include "include/libyuv.h"
 #include "tensorflow_lite_support/cc/common.h"
 #include "tensorflow_lite_support/cc/port/integral_types.h"
 #include "tensorflow_lite_support/cc/port/status_macros.h"
 #include "tensorflow_lite_support/cc/port/statusor.h"
 #include "tensorflow_lite_support/cc/task/vision/utils/frame_buffer_common_utils.h"
+#include "third_party/libyuv/include/libyuv.h"
 
 namespace tflite {
 namespace task {
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 6a2324c..6ed6bada 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -17858,6 +17858,7 @@
   <int value="36" label="BeFunky (PWA)"/>
   <int value="37" label="Clipchamp (PWA)"/>
   <int value="38" label="GeForce NOW (PWA)"/>
+  <int value="39" label="Zoom (PWA)"/>
 </enum>
 
 <enum name="DemoModeAppLaunchSource">
@@ -32511,6 +32512,7 @@
   <int value="81" label="DisplayCapture"/>
   <int value="82" label="InterestCohort"/>
   <int value="83" label="SharedAutofill"/>
+  <int value="84" label="DirectSockets"/>
 </enum>
 
 <enum name="FeaturePolicyImageCompressionFormat">
@@ -45744,6 +45746,7 @@
       label="AutofillSuppressCreditCardSaveForAssistant:enabled"/>
   <int value="-953215709" label="StorageAccessAPI:enabled"/>
   <int value="-952996862" label="ArcUseHighMemoryDalvikProfile:enabled"/>
+  <int value="-952971446" label="WebAssemblyCodeProtection:disabled"/>
   <int value="-951394314" label="top-chrome-md"/>
   <int value="-950793721" label="TranslateUI2016Q2:disabled"/>
   <int value="-950411190"
@@ -45998,6 +46001,7 @@
   <int value="-727860269" label="WebAuthenticationBle:disabled"/>
   <int value="-726892130" label="AndroidMessagesIntegration:disabled"/>
   <int value="-726567328" label="disable-virtual-keyboard"/>
+  <int value="-725264428" label="CompositingBasedThrottling:enabled"/>
   <int value="-723224470" label="enable-password-force-saving:enabled"/>
   <int value="-722474177" label="browser-side-navigation:disabled"/>
   <int value="-721685663" label="WebViewMixedContentAutoupgrades:enabled"/>
@@ -47705,6 +47709,7 @@
   <int value="781785788" label="ClipboardSuggestionContentHidden:disabled"/>
   <int value="782167080" label="enable-new-qp-input-view"/>
   <int value="783270752" label="AndroidHistoryManager:enabled"/>
+  <int value="785273919" label="CompositingBasedThrottling:disabled"/>
   <int value="787080596" label="DynamicTcmallocTuning:enabled"/>
   <int value="787385958" label="RegionalLocalesAsDisplayUI:enabled"/>
   <int value="788130042" label="PrivacySandboxSettings2:enabled"/>
@@ -48070,12 +48075,14 @@
   <int value="1126956909" label="UseXpsForPrintingFromPdf:disabled"/>
   <int value="1127085005" label="TreatUnsafeDownloadsAsActive:enabled"/>
   <int value="1127183523" label="PassiveEventListenersDueToFling:enabled"/>
+  <int value="1127402319" label="WebAssemblyCodeProtection:enabled"/>
   <int value="1127427821" label="OmniboxEntitySuggestions:disabled"/>
   <int value="1127954225" label="EnableDnsProxy:enabled"/>
   <int value="1128874009" label="ScalableStatusArea:disabled"/>
   <int value="1129542111" label="CastAllowAllIPs:disabled"/>
   <int value="1129888794" label="ash-touch-hud"/>
   <int value="1132521402" label="ConnectivityDiagnosticsWebUi:enabled"/>
+  <int value="1132737110" label="WebAssemblyCodeProtectionPku:disabled"/>
   <int value="1133207726" label="MediaInspectorLogging:enabled"/>
   <int value="1133635187" label="force-gpu-rasterization"/>
   <int value="1135728116" label="PluginVmShowCameraPermissions:enabled"/>
@@ -48258,6 +48265,7 @@
   <int value="1285169797" label="ClipboardHistoryNudgeSessionReset:disabled"/>
   <int value="1285905715" label="WebXRHitTest:enabled"/>
   <int value="1287625114" label="EnableIncognitoShortcutOnDesktop:disabled"/>
+  <int value="1287947083" label="WebAssemblyCodeProtectionPku:enabled"/>
   <int value="1288612648" label="PluginVmFullscreen:enabled"/>
   <int value="1288713607" label="EcheSWAResizing:disabled"/>
   <int value="1289433604" label="RecoverFromNeverSaveAndroid:enabled"/>
diff --git a/tools/metrics/histograms/histograms_xml/METRIC_REVIEWER_OWNERS b/tools/metrics/histograms/histograms_xml/METRIC_REVIEWER_OWNERS
index 5e80c49..2f1aa40 100644
--- a/tools/metrics/histograms/histograms_xml/METRIC_REVIEWER_OWNERS
+++ b/tools/metrics/histograms/histograms_xml/METRIC_REVIEWER_OWNERS
@@ -9,6 +9,7 @@
 dewittj@chromium.org
 dschinazi@chromium.org
 eirage@chromium.org
+ellyjones@chromium.org
 ender@chromium.org
 harrisonsean@chromium.org
 iclelland@chromium.org
@@ -19,13 +20,14 @@
 lyf@chromium.org
 mcrouse@chromium.org
 mlippautz@chromium.org
+mthiesse@chromium.org
 nancylingwang@chromium.org
 nohle@chromium.org
 olivierrobin@chromium.org
-sebmarchand@chromium.org
-mthiesse@chromium.org
+poromov@chromium.org
 rayankans@chromium.org
 schenney@chromium.org
+sebmarchand@chromium.org
 sophiechang@chromium.org
 tbansal@chromium.org
 tby@chromium.org
diff --git a/tools/metrics/histograms/histograms_xml/arc/histograms.xml b/tools/metrics/histograms/histograms_xml/arc/histograms.xml
index 4b2d3ad9..c8b466d1 100644
--- a/tools/metrics/histograms/histograms_xml/arc/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/arc/histograms.xml
@@ -848,6 +848,9 @@
 
 <histogram name="Arc.PrintPreview.RenderAndGeneratePDFTime" units="ms"
     expires_after="2021-06-01">
+  <obsolete>
+    Removed in May 2021 and merged into PrintPreview.RenderAndGeneratePDFTime.
+  </obsolete>
   <owner>bmgordon@chromium.org</owner>
   <owner>project-bolton@google.com</owner>
   <summary>
@@ -859,6 +862,10 @@
 
 <histogram name="Arc.PrintPreview.RenderAndGeneratePDFTimeAvgPerPage"
     units="ms" expires_after="2021-06-01">
+  <obsolete>
+    Removed in May 2021 and merged into
+    PrintPreview.RenderAndGeneratePDFTimeAvgPerPage.
+  </obsolete>
   <owner>bmgordon@chromium.org</owner>
   <owner>project-bolton@google.com</owner>
   <summary>
@@ -880,6 +887,9 @@
 
 <histogram name="Arc.PrintPreview.RenderToPDFTime" units="ms"
     expires_after="2021-06-01">
+  <obsolete>
+    Removed in May 2021 and merged into PrintPreview.RenderToPDFTime.
+  </obsolete>
   <owner>bmgordon@chromium.org</owner>
   <owner>project-bolton@google.com</owner>
   <summary>Time taken for ARC to render a PDF for print preview.</summary>
diff --git a/tools/metrics/histograms/histograms_xml/chromeos/histograms.xml b/tools/metrics/histograms/histograms_xml/chromeos/histograms.xml
index c625f95d..d01a6cd3 100644
--- a/tools/metrics/histograms/histograms_xml/chromeos/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/chromeos/histograms.xml
@@ -251,52 +251,53 @@
 </histogram>
 
 <histogram name="ChromeOS.CertProvisioning.CsrSignTime" units="ms"
-    expires_after="2021-08-15">
+    expires_after="2022-02-01">
   <owner>miersh@google.com</owner>
   <owner>pmarko@chromium.org</owner>
   <summary>
-    The amount of time it took to sign one CSR by certificate provisioning
-    worker.
+    The amount of time it took the certificate provisioning worker to sign a
+    CSR. Emitted after the sign is complete.
   </summary>
 </histogram>
 
 <histogram name="ChromeOS.CertProvisioning.Event" enum="CertProvisioningEvent"
-    expires_after="2021-06-01">
+    expires_after="2022-02-01">
   <owner>miersh@google.com</owner>
   <owner>pmarko@chromium.org</owner>
   <summary>
-    Number of times each event is reached during certificate provisioning flow.
+    Number of times each event is reached during the certificate provisioning
+    flow.
   </summary>
 </histogram>
 
 <histogram name="ChromeOS.CertProvisioning.KeypairGenerationTime" units="ms"
-    expires_after="2021-06-01">
+    expires_after="2022-02-01">
   <owner>miersh@google.com</owner>
   <owner>pmarko@chromium.org</owner>
   <summary>
-    The amount of time it took to generate one key pair by certificate
-    provisioning worker.
+    The amount of time it took the certificate provisioning worker to generate
+    one key pair. Emitted after the generation is complete.
   </summary>
 </histogram>
 
 <histogram name="ChromeOS.CertProvisioning.Result"
-    enum="CertProvisioningWorkerState" expires_after="2021-06-01">
+    enum="CertProvisioningWorkerState" expires_after="2022-02-01">
   <owner>miersh@google.com</owner>
   <owner>pmarko@chromium.org</owner>
   <summary>
     For final states (see the list in cert_provisioning::IsFinalState): number
-    of times certificate provisioning worker finished on every state. For other
-    states: number of times the worker failed on every state.
+    of times the certificate provisioning worker finished on every state. For
+    other states: number of times the worker failed on every state.
   </summary>
 </histogram>
 
 <histogram name="ChromeOS.CertProvisioning.VaTime" units="ms"
-    expires_after="2021-06-01">
+    expires_after="2022-02-01">
   <owner>miersh@google.com</owner>
   <owner>pmarko@chromium.org</owner>
   <summary>
-    The amount of time it took to build one Verified Access response by
-    certificate provisioning worker.
+    The amount of time it took the certificate provisioning worker to build one
+    Verified Access response. Emitted after the response is built.
   </summary>
 </histogram>
 
@@ -921,7 +922,7 @@
 </histogram>
 
 <histogram name="ChromeOS.SAML.SamlChallengeKeyHandlerResult"
-    enum="SamlChallengeKeyHandlerResult" expires_after="2021-06-01">
+    enum="SamlChallengeKeyHandlerResult" expires_after="2022-02-01">
   <owner>miersh@google.com</owner>
   <owner>pmarko@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/histograms_xml/enterprise/OWNERS b/tools/metrics/histograms/histograms_xml/enterprise/OWNERS
new file mode 100644
index 0000000..5d44337
--- /dev/null
+++ b/tools/metrics/histograms/histograms_xml/enterprise/OWNERS
@@ -0,0 +1,5 @@
+per-file OWNERS=file://tools/metrics/histograms/histograms_xml/METRIC_REVIEWER_OWNERS
+
+# Prefer sending CLs to the owners listed below.
+# Use chromium-metrics-reviews@google.com as a backup.
+poromov@chromium.org
diff --git a/tools/metrics/histograms/histograms_xml/net/histograms.xml b/tools/metrics/histograms/histograms_xml/net/histograms.xml
index f214ea5..89894524 100644
--- a/tools/metrics/histograms/histograms_xml/net/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/net/histograms.xml
@@ -425,7 +425,7 @@
 </histogram>
 
 <histogram name="Net.Cors.AccessCheckResult" enum="CorsAccessCheckResult"
-    expires_after="M90">
+    expires_after="M98">
   <owner>toyoshim@chromium.org</owner>
   <owner>yhirano@chromium.org</owner>
   <summary>
@@ -434,6 +434,17 @@
   </summary>
 </histogram>
 
+<histogram name="Net.Cors.AccessCheckResult.NotSecureRequestor"
+    enum="CorsAccessCheckResult" expires_after="M98">
+  <owner>carlosil@chromium.org</owner>
+  <owner>estark@chromium.org</owner>
+  <summary>
+    The distribution of CORS access check results for not potentially
+    trustworthy requestors. This reports whenever CORS AccessCheck runs and the
+    requesting site origin is not potentially trustworthy.
+  </summary>
+</histogram>
+
 <histogram name="Net.Cors.PreflightCacheKeySize" units="bytes"
     expires_after="M90">
   <owner>toyoshim@chromium.org</owner>
diff --git a/tools/metrics/histograms/histograms_xml/page/histograms.xml b/tools/metrics/histograms/histograms_xml/page/histograms.xml
index 78ed7ac..b8f6383 100644
--- a/tools/metrics/histograms/histograms_xml/page/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/page/histograms.xml
@@ -1429,6 +1429,17 @@
   </summary>
 </histogram>
 
+<histogram
+    name="PageLoad.Experimental.PaintTiming.FirstEligibleToPaintToFirstPaint"
+    units="ms" expires_after="2021-11-06">
+  <owner>cduvall@chromium.org</owner>
+  <owner>jam@chromium.org</owner>
+  <summary>
+    Measures the time from when the page is first eligible to paint to when the
+    first paint occurs. Logged for every foreground page load.
+  </summary>
+</histogram>
+
 <histogram name="PageLoad.Experimental.PaintTiming.FirstMeaningfulPaintStatus"
     enum="FirstMeaningfulPaintStatus" expires_after="2021-01-31">
   <owner>ksakamoto@chromium.org</owner>
@@ -1481,6 +1492,17 @@
 </histogram>
 
 <histogram
+    name="PageLoad.Experimental.PaintTiming.NavigationToFirstEligibleToPaint"
+    units="ms" expires_after="2021-11-06">
+  <owner>cduvall@chromium.org</owner>
+  <owner>jam@chromium.org</owner>
+  <summary>
+    Measures the time from navigation start to when the page is eligible to
+    paint. Logged for every foreground page load.
+  </summary>
+</histogram>
+
+<histogram
     name="PageLoad.Experimental.PaintTiming.NavigationToFirstMeaningfulPaint"
     units="ms" expires_after="2021-10-10">
   <owner>ksakamoto@chromium.org</owner>
diff --git a/tools/metrics/histograms/histograms_xml/sharing/OWNERS b/tools/metrics/histograms/histograms_xml/sharing/OWNERS
new file mode 100644
index 0000000..adda4e3
--- /dev/null
+++ b/tools/metrics/histograms/histograms_xml/sharing/OWNERS
@@ -0,0 +1,5 @@
+per-file OWNERS=file://tools/metrics/histograms/histograms_xml/METRIC_REVIEWER_OWNERS
+
+# Prefer sending CLs to the owners listed below.
+# Use chromium-metrics-reviews@google.com as a backup.
+ellyjones@chromium.org
diff --git a/tools/perf/core/perfetto_binary_roller/binary_deps.json b/tools/perf/core/perfetto_binary_roller/binary_deps.json
index 1b3a0b55..f5af82b 100644
--- a/tools/perf/core/perfetto_binary_roller/binary_deps.json
+++ b/tools/perf/core/perfetto_binary_roller/binary_deps.json
@@ -10,7 +10,7 @@
         },
         "linux": {
             "hash": "b95b2b75294ef7c5ed96e53582c5d8f0d4e575bd",
-            "remote_path": "perfetto_binaries/trace_processor_shell/linux/7dc7013d1b97fe8e4a1b653ae7c819e946ab1bc7/trace_processor_shell"
+            "remote_path": "perfetto_binaries/trace_processor_shell/linux/ba54d8c034c447a84194dd2a30379ea2a0afc36d/trace_processor_shell"
         }
     },
     "power_profile.sql": {
diff --git a/tools/perf/expectations.config b/tools/perf/expectations.config
index 4a01bdd..9134a42 100644
--- a/tools/perf/expectations.config
+++ b/tools/perf/expectations.config
@@ -395,8 +395,6 @@
 crbug.com/1192170 [ fuchsia ] system_health.memory_desktop/browse:news:nytimes:2020 [ Skip ]
 crbug.com/1192176 [ fuchsia ] system_health.memory_desktop/browse:media:tumblr:2018 [ Skip ]
 crbug.com/1156571 [ mac-10.12 ] system_health.memory_desktop/browse:news:nytimes:2020 [ Skip ]
-crbug.com/1173122 [ linux ] system_health.memory_desktop/load:tools:chat:2020 [ Skip ]
-crbug.com/1173122 [ linux ] system_health.memory_desktop/load:tools:gmail:2019 [ Skip ]
 crbug.com/1173972 [ linux ] system_health.memory_desktop/browse:news:nytimes:2020 [ Skip ]
 crbug.com/903417 [ mac ] system_health.memory_desktop/long_running:tools:gmail-background [ Skip ]
 crbug.com/903417 [ mac ] system_health.memory_desktop/long_running:tools:gmail-foreground [ Skip ]
diff --git a/tools/traffic_annotation/auditor/auditor_result.cc b/tools/traffic_annotation/auditor/auditor_result.cc
index 6d4aada..2e52a0e4c 100644
--- a/tools/traffic_annotation/auditor/auditor_result.cc
+++ b/tools/traffic_annotation/auditor/auditor_result.cc
@@ -6,6 +6,7 @@
 
 #include "tools/traffic_annotation/auditor/auditor_result.h"
 
+#include "base/check_op.h"
 #include "base/notreached.h"
 #include "base/strings/stringprintf.h"
 
diff --git a/tools/traffic_annotation/auditor/auditor_result.h b/tools/traffic_annotation/auditor/auditor_result.h
index 899fccb..c9e3951 100644
--- a/tools/traffic_annotation/auditor/auditor_result.h
+++ b/tools/traffic_annotation/auditor/auditor_result.h
@@ -5,7 +5,8 @@
 #ifndef TOOLS_TRAFFIC_ANNOTATION_AUDITOR_AUDITOR_RESULT_H_
 #define TOOLS_TRAFFIC_ANNOTATION_AUDITOR_AUDITOR_RESULT_H_
 
-#include "base/files/file_path.h"
+#include <string>
+#include <vector>
 
 // Holds the auditor processing results on one unit of annotation or function.
 class AuditorResult {
diff --git a/ui/base/accelerators/OWNERS b/ui/base/accelerators/OWNERS
new file mode 100644
index 0000000..cc6dc86
--- /dev/null
+++ b/ui/base/accelerators/OWNERS
@@ -0,0 +1 @@
+zentaro@chromium.org
\ No newline at end of file
diff --git a/ui/events/ozone/evdev/event_factory_evdev.h b/ui/events/ozone/evdev/event_factory_evdev.h
index de4498f4..b316454 100644
--- a/ui/events/ozone/evdev/event_factory_evdev.h
+++ b/ui/events/ozone/evdev/event_factory_evdev.h
@@ -8,7 +8,6 @@
 #include "base/callback.h"
 #include "base/compiler_specific.h"
 #include "base/component_export.h"
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/task_runner.h"
diff --git a/ui/ozone/platform/drm/host/drm_display_host_manager.cc b/ui/ozone/platform/drm/host/drm_display_host_manager.cc
index a0247d7..d8d7bc6 100644
--- a/ui/ozone/platform/drm/host/drm_display_host_manager.cc
+++ b/ui/ozone/platform/drm/host/drm_display_host_manager.cc
@@ -72,13 +72,14 @@
     // that symlink exists, read it, and use that path as the sysfs path for the
     // display when calculating the association score to match it with a
     // corresponding USB touch device. If the symlink doesn't exist, use the
-    // normal sysfs path.
+    // normal sysfs path. In order to ensure that the sysfs path remains unique,
+    // append the card name to it.
     if (base::StartsWith(component, "evdi", base::CompareCase::SENSITIVE)) {
       base::FilePath usb_device_path;
       if (base::ReadSymbolicLink(path_thus_far.Append("device"),
                                  &usb_device_path)) {
-        return base::MakeAbsoluteFilePath(
-            path_thus_far.Append(usb_device_path));
+        return base::MakeAbsoluteFilePath(path_thus_far.Append(usb_device_path))
+            .Append(device_path.BaseName());
       }
       break;
     }
diff --git a/ui/ozone/platform/headless/headless_window_manager.h b/ui/ozone/platform/headless/headless_window_manager.h
index 2364f021..cf71f34 100644
--- a/ui/ozone/platform/headless/headless_window_manager.h
+++ b/ui/ozone/platform/headless/headless_window_manager.h
@@ -7,9 +7,7 @@
 
 #include <stdint.h>
 
-
 #include "base/containers/id_map.h"
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/threading/thread_checker.h"
 #include "ui/gfx/native_widget_types.h"
diff --git a/ui/ozone/platform/windows/windows_surface_factory.h b/ui/ozone/platform/windows/windows_surface_factory.h
index 645352d0f..82002742 100644
--- a/ui/ozone/platform/windows/windows_surface_factory.h
+++ b/ui/ozone/platform/windows/windows_surface_factory.h
@@ -8,7 +8,6 @@
 #include <memory>
 #include <vector>
 
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "ui/ozone/public/gl_ozone.h"
 #include "ui/ozone/public/surface_factory_ozone.h"
diff --git a/ui/ozone/platform/windows/windows_window_manager.h b/ui/ozone/platform/windows/windows_window_manager.h
index 30d9b81..be35c4c 100644
--- a/ui/ozone/platform/windows/windows_window_manager.h
+++ b/ui/ozone/platform/windows/windows_window_manager.h
@@ -7,9 +7,7 @@
 
 #include <stdint.h>
 
-
 #include "base/containers/id_map.h"
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/threading/thread_checker.h"
 #include "ui/gfx/native_widget_types.h"
diff --git a/ui/snapshot/screenshot_grabber.h b/ui/snapshot/screenshot_grabber.h
index f27e032..2740ef2c 100644
--- a/ui/snapshot/screenshot_grabber.h
+++ b/ui/snapshot/screenshot_grabber.h
@@ -10,7 +10,6 @@
 
 #include "base/callback.h"
 #include "base/compiler_specific.h"
-#include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted_memory.h"
 #include "base/memory/weak_ptr.h"
diff --git a/weblayer/browser/password_manager_driver_factory.cc b/weblayer/browser/password_manager_driver_factory.cc
index 10ad95b..ac44542 100644
--- a/weblayer/browser/password_manager_driver_factory.cc
+++ b/weblayer/browser/password_manager_driver_factory.cc
@@ -56,7 +56,9 @@
       // isolation is not used, such as on Android.
       content::SiteInstance::StartIsolatingSite(
           render_frame_host_->GetSiteInstance()->GetBrowserContext(),
-          form_data.url);
+          form_data.url,
+          content::ChildProcessSecurityPolicy::IsolatedOriginSource::
+              USER_TRIGGERED);
     }
   }
   void DynamicFormSubmission(autofill::mojom::SubmissionIndicatorEvent
diff --git a/weblayer/browser/site_isolation_browsertest.cc b/weblayer/browser/site_isolation_browsertest.cc
index d10c39f..fd5ebe0 100644
--- a/weblayer/browser/site_isolation_browsertest.cc
+++ b/weblayer/browser/site_isolation_browsertest.cc
@@ -84,6 +84,13 @@
     return static_cast<TabImpl*>(shell()->tab())->web_contents();
   }
 
+  void StartIsolatingSite(const GURL& url) {
+    content::SiteInstance::StartIsolatingSite(
+        GetProfile()->GetBrowserContext(), url,
+        content::ChildProcessSecurityPolicy::IsolatedOriginSource::
+            USER_TRIGGERED);
+  }
+
  private:
   // A browser client which forces off strict site isolation, so the test can
   // assume password isolation is enabled.
@@ -151,12 +158,10 @@
   // Isolate saved.com and saved2.com persistently.
   GURL saved_url =
       embedded_test_server()->GetURL("saved.com", "/simple_page.html");
-  content::SiteInstance::StartIsolatingSite(GetProfile()->GetBrowserContext(),
-                                            saved_url);
+  StartIsolatingSite(saved_url);
   GURL saved2_url =
       embedded_test_server()->GetURL("saved2.com", "/simple_page.html");
-  content::SiteInstance::StartIsolatingSite(GetProfile()->GetBrowserContext(),
-                                            saved2_url);
+  StartIsolatingSite(saved2_url);
 
   NavigateAndWaitForCompletion(saved_url, shell());
   EXPECT_TRUE(GetWebContents()
@@ -199,12 +204,9 @@
 IN_PROC_BROWSER_TEST_F(SiteIsolationBrowserTest, IsolatedSiteIsSavedOnlyOnce) {
   GURL saved_url =
       embedded_test_server()->GetURL("saved.com", "/simple_page.html");
-  content::SiteInstance::StartIsolatingSite(GetProfile()->GetBrowserContext(),
-                                            saved_url);
-  content::SiteInstance::StartIsolatingSite(GetProfile()->GetBrowserContext(),
-                                            saved_url);
-  content::SiteInstance::StartIsolatingSite(GetProfile()->GetBrowserContext(),
-                                            saved_url);
+  StartIsolatingSite(saved_url);
+  StartIsolatingSite(saved_url);
+  StartIsolatingSite(saved_url);
   EXPECT_THAT(GetSavedIsolatedSites(),
               UnorderedElementsAre("http://saved.com"));
 }
@@ -221,8 +223,7 @@
 
   // Isolate saved.com and verify it's been saved to disk.
   GURL saved_url = https_server.GetURL("saved.com", "/clear_site_data.html");
-  content::SiteInstance::StartIsolatingSite(GetProfile()->GetBrowserContext(),
-                                            saved_url);
+  StartIsolatingSite(saved_url);
   EXPECT_THAT(GetSavedIsolatedSites(),
               UnorderedElementsAre("https://saved.com"));
 
@@ -238,8 +239,7 @@
                        ExplicitClearBrowsingDataClearsSavedIsolatedSites) {
   GURL saved_url =
       embedded_test_server()->GetURL("saved.com", "/simple_page.html");
-  content::SiteInstance::StartIsolatingSite(GetProfile()->GetBrowserContext(),
-                                            saved_url);
+  StartIsolatingSite(saved_url);
   EXPECT_THAT(GetSavedIsolatedSites(),
               UnorderedElementsAre("http://saved.com"));