diff --git a/DEPS b/DEPS
index fce02ad..008d130 100644
--- a/DEPS
+++ b/DEPS
@@ -297,15 +297,15 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Skia
   # and whatever else without interference from each other.
-  'skia_revision': '5999b4e5381098e1834d5bfab453b0f1a0f73f88',
+  'skia_revision': 'f39d68a2adcc5c78642a31db8eabb8bddcbe2e9b',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling V8
   # and whatever else without interference from each other.
-  'v8_revision': 'acd64a088d0cce09742922d5734f1342daa137ea',
+  'v8_revision': '00c85fe868b1aaa4f755105d06f82ec26b10d875',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling ANGLE
   # and whatever else without interference from each other.
-  'angle_revision': '4fdc37545da73405d3f00d14f3214b62b4bcc69a',
+  'angle_revision': '3b020cc17e58a6f7b03fa40e2f29c39b30a7b2ee',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling SwiftShader
   # and whatever else without interference from each other.
@@ -348,7 +348,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': '275b116b40c9d183d42242099ea9ff276985855b',
+  'freetype_revision': '9a00282efce6350e438cd2b9ef779cbc4a5c4d8b',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling freetype
   # and whatever else without interference from each other.
@@ -376,7 +376,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': '6bf92a7bd6e162df04d79878e96509ed708b90d6',
+  'devtools_frontend_revision': '9a5da0c76dc395d50e903a489c8e08ff28c3f57b',
   # 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.
@@ -412,7 +412,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
-  'dawn_revision': '3b7e08857c85571e0f4f57266cd0d2d80cb47690',
+  'dawn_revision': '0cbf5a922fe7b0b759db48ab07a329645b53e6bd',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
@@ -777,7 +777,7 @@
   },
 
   'src/ios/third_party/earl_grey2/src': {
-      'url': Var('chromium_git') + '/external/github.com/google/EarlGrey.git' + '@' + '5871866d1c9bf11479f3902e2c43227b40fd5104',
+      'url': Var('chromium_git') + '/external/github.com/google/EarlGrey.git' + '@' + '60a780593502a9e94281e4a6758d734c8acdfd41',
       'condition': 'checkout_ios',
   },
 
@@ -862,7 +862,7 @@
       'packages': [
         {
           'package': 'chromium/rts/model/linux-amd64',
-          'version': 'Og1MySia2o6iorl8zKvBjmQwPO4fMN2DXAP2u57c3gAC',
+          'version': 'ZlbMOOW3E7FdN_EEU3iuWYrhH_h6RVs7SojvV1d1GWsC',
         },
       ],
       'dep_type': 'cipd',
@@ -873,7 +873,7 @@
       'packages': [
         {
           'package': 'chromium/rts/model/mac-amd64',
-          'version': 'MhVV-crSU62Uhu3xKm7K-SGatKFn7TggELzVOymAB1gC',
+          'version': 'wA--tDiE9ok8nnH3-JuiwL_adefsskpd2Gg3zs8HIoMC',
         },
       ],
       'dep_type': 'cipd',
@@ -884,7 +884,7 @@
       'packages': [
         {
           'package': 'chromium/rts/model/windows-amd64',
-          'version': 'wjL8Ye1tkdsjWdA1DtEawDCphTtOR_cEUjh3v1WXglIC',
+          'version': 'zSZ9Uz7X3AfQmAn8hpdBjIt1PbrN4sxhPQgHPEuKdxEC',
         },
       ],
       'dep_type': 'cipd',
@@ -1174,7 +1174,7 @@
 
   # For Linux and Chromium OS.
   'src/third_party/cros_system_api': {
-      'url': Var('chromium_git') + '/chromiumos/platform2/system_api.git' + '@' + 'f3b1373caf7bd717be4f0d21ab8c738c6bfcf418',
+      'url': Var('chromium_git') + '/chromiumos/platform2/system_api.git' + '@' + 'f1a5b3427414e1ce4b83d6eb7b4f363ba62f8579',
       'condition': 'checkout_linux',
   },
 
@@ -1584,7 +1584,7 @@
   },
 
   'src/third_party/perfetto':
-    Var('android_git') + '/platform/external/perfetto.git' + '@' + '049a4290ea53cc6797f5b1c433bbc5a21985ad77',
+    Var('android_git') + '/platform/external/perfetto.git' + '@' + 'e4d93e430c4751cda91e9fb5603154a6d44314fd',
 
   'src/third_party/perl': {
       'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3',
@@ -1754,7 +1754,7 @@
     Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + 'e88fcf99da482fb22a3f90e0f74bed85d84e0f99',
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + '5edefa87f74612ca07a5e2f148b373440cc57297',
+    Var('webrtc_git') + '/src.git' + '@' + 'ed6b586b62ec93ae82a231b6128f2f7360e663af',
 
   'src/third_party/libgifcodec':
      Var('skia_git') + '/libgifcodec' + '@'+  Var('libgifcodec_revision'),
@@ -1827,7 +1827,7 @@
     Var('chromium_git') + '/v8/v8.git' + '@' +  Var('v8_revision'),
 
   'src-internal': {
-    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@6710726aaf79426f4f373c7572035cedde4100b8',
+    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@50a6daf7c5fa7ef269a1c5161558b0db63b9c60e',
     'condition': 'checkout_src_internal',
   },
 
@@ -1857,7 +1857,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/help_app/app',
-        'version': 'jcXkVfYdGL8uWAtyPsZo_85Z9emuIvoxPqGBK0XB_vQC',
+        'version': 'IPPpfT7mHXbIul_OxvnMhqaOw-wamIniLVe-oBk604YC',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
@@ -1868,7 +1868,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/media_app/app',
-        'version': 'LSFsV-AVR79lA6RbdA513m4JkB4NrIPLCgXurjoSsbsC',
+        'version': 'V5ECcmVR9e9GY9TVvSKxNWjHMnf3k6YwNCbWX4P0Y18C',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
diff --git a/WATCHLISTS b/WATCHLISTS
index e10c620..dc19fc46 100644
--- a/WATCHLISTS
+++ b/WATCHLISTS
@@ -814,6 +814,9 @@
     'compositor_animator': {
       'filepath': 'chrome/android/java/src/org/chromium/chrome/browser/compositor/animation/',
     },
+    'compute_pressure': {
+      'filepath': 'compute_pressure',
+    },
     'content_bluetooth': {
       'filepath': 'content/.*bluetooth'
     },
@@ -1634,7 +1637,7 @@
       'filepath': '[pP]recache'
     },
     'prefetch_proxy': {
-      'filepath': 'chrome/browser/prefetch/prefetch_proxy',
+      'filepath': 'chrome/browser/preloading/prefetch/prefetch_proxy',
     },
     'prepopulated_engines': {
       'filepath': 'components/search_engines/prepopulated_engines.json',
@@ -2488,6 +2491,7 @@
     'clipboard': ['dcheng@chromium.org'],
     'components_deps': ['droger+watchlist@chromium.org'],
     'compositor_animator': ['mdjones+watch@chromium.org'],
+    'compute_pressure': ['raphael.kubo.da.costa@intel.com'],
     'content_bluetooth': ['mattreynolds+watch@chromium.org'],
     'content_index': ['rayankans+watch@chromium.org'],
     'content_loader': ['loading-reviews@chromium.org'],
diff --git a/android_webview/BUILD.gn b/android_webview/BUILD.gn
index 51b321ec..c78e3be 100644
--- a/android_webview/BUILD.gn
+++ b/android_webview/BUILD.gn
@@ -1137,6 +1137,7 @@
     "//components/flags_ui/resources:build_ts",
     "//components/resources:about_credits",
     "//components/resources/ssl/ssl_error_assistant:make_ssl_error_assistant_protobuf",
+    "//components/security_interstitials/content/resources:build_ts",
   ]
 
   if (safe_browsing_mode != 0) {
diff --git a/android_webview/java/src/org/chromium/android_webview/AndroidProtocolHandler.java b/android_webview/java/src/org/chromium/android_webview/AndroidProtocolHandler.java
index 23397050..c0db5a08 100644
--- a/android_webview/java/src/org/chromium/android_webview/AndroidProtocolHandler.java
+++ b/android_webview/java/src/org/chromium/android_webview/AndroidProtocolHandler.java
@@ -93,6 +93,8 @@
                 packageName + ".R$" + assetType);
     }
 
+    // file://android_res/ has no choice but to do name-based resource lookups
+    @SuppressWarnings("DiscouragedApi")
     private static int getFieldId(String assetType, String assetName)
             throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException {
         Context appContext = ContextUtils.getApplicationContext();
diff --git a/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java b/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java
index bb132abe..1477493 100644
--- a/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java
+++ b/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java
@@ -335,6 +335,8 @@
                     "Allows using a stylus for text input. This requires "
                             + "either a Samsung device with Direct Writing enabled, or an "
                             + "Android T device with stylus handwriting enabled."),
+            Flag.baseFeature(BlinkFeatures.SCROLL_UPDATE_OPTIMIZATIONS,
+                    "Enable scroll update optimizations. See https://crbug.com/1346789."),
             // Add new commandline switches and features above. The final entry should have a
             // trailing comma for cleaner diffs.
     };
diff --git a/android_webview/js_sandbox/service/js_sandbox_isolate.cc b/android_webview/js_sandbox/service/js_sandbox_isolate.cc
index 76849b1..51bb3f4 100644
--- a/android_webview/js_sandbox/service/js_sandbox_isolate.cc
+++ b/android_webview/js_sandbox/service/js_sandbox_isolate.cc
@@ -306,7 +306,9 @@
 void JsSandboxIsolate::InitializeIsolateOnThread() {
   isolate_holder_ = std::make_unique<gin::IsolateHolder>(
       base::ThreadTaskRunnerHandle::Get(),
-      gin::IsolateHolder::IsolateType::kUtility);
+      gin::IsolateHolder::AccessMode::kSingleThread,
+      gin::IsolateHolder::IsolateType::kUtility,
+      gin::IsolateHolder::getDefaultIsolateParams());
   v8::Isolate* isolate = isolate_holder_->isolate();
   v8::Isolate::Scope isolate_scope(isolate);
   isolate->SetMicrotasksPolicy(v8::MicrotasksPolicy::kAuto);
diff --git a/android_webview/nonembedded/java/src/org/chromium/android_webview/nonembedded/LicenseActivity.java b/android_webview/nonembedded/java/src/org/chromium/android_webview/nonembedded/LicenseActivity.java
index 0ecfa8c..140969d 100644
--- a/android_webview/nonembedded/java/src/org/chromium/android_webview/nonembedded/LicenseActivity.java
+++ b/android_webview/nonembedded/java/src/org/chromium/android_webview/nonembedded/LicenseActivity.java
@@ -24,6 +24,7 @@
     private static final String LICENSES_CONTENT_TYPE = "text/html";
 
     @Override
+    @SuppressWarnings("DiscouragedApi")
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         final String packageName = getPackageName();
diff --git a/ash/BUILD.gn b/ash/BUILD.gn
index 4c14eec..21655d2c 100644
--- a/ash/BUILD.gn
+++ b/ash/BUILD.gn
@@ -1543,6 +1543,8 @@
     "system/power/video_activity_notifier.h",
     "system/privacy/privacy_indicators_controller.cc",
     "system/privacy/privacy_indicators_controller.h",
+    "system/privacy_hub/microphone_privacy_switch_controller.cc",
+    "system/privacy_hub/microphone_privacy_switch_controller.h",
     "system/privacy_screen/privacy_screen_feature_pod_controller.cc",
     "system/privacy_screen/privacy_screen_feature_pod_controller.h",
     "system/privacy_screen/privacy_screen_toast_controller.cc",
@@ -2851,6 +2853,7 @@
     "system/power/power_prefs_unittest.cc",
     "system/power/power_status_unittest.cc",
     "system/power/video_activity_notifier_unittest.cc",
+    "system/privacy_hub/microphone_privacy_switch_controller_unittest.cc",
     "system/progress_indicator/progress_indicator_animation_registry_unittest.cc",
     "system/progress_indicator/progress_indicator_unittest.cc",
     "system/rotation/rotation_lock_feature_pod_controller_unittest.cc",
diff --git a/ash/capture_mode/user_nudge_controller.cc b/ash/capture_mode/user_nudge_controller.cc
index 1b10b03..dcc04cc94 100644
--- a/ash/capture_mode/user_nudge_controller.cc
+++ b/ash/capture_mode/user_nudge_controller.cc
@@ -8,7 +8,7 @@
 #include "ash/capture_mode/capture_mode_session.h"
 #include "ash/capture_mode/capture_mode_util.h"
 #include "ash/public/cpp/shell_window_ids.h"
-#include "ash/style/ash_color_provider.h"
+#include "ash/style/dark_light_mode_controller_impl.h"
 #include "base/bind.h"
 #include "base/check.h"
 #include "base/time/time.h"
@@ -65,7 +65,8 @@
   // Rings are created initially with 0 opacity. Calling SetVisible() will
   // animate them towards their correct state.
   const SkColor ring_color =
-      AshColorProvider::Get()->GetInkDropBaseColorAndOpacity().first;
+      DarkLightModeControllerImpl::Get()->IsDarkModeEnabled() ? SK_ColorWHITE
+                                                              : SK_ColorBLACK;
   base_ring_.SetColor(ring_color);
   base_ring_.SetFillsBoundsOpaquely(false);
   base_ring_.SetOpacity(0);
diff --git a/ash/components/arc/compat_mode/arc_splash_screen_dialog_view_unittest.cc b/ash/components/arc/compat_mode/arc_splash_screen_dialog_view_unittest.cc
index 97f6042..829c0783 100644
--- a/ash/components/arc/compat_mode/arc_splash_screen_dialog_view_unittest.cc
+++ b/ash/components/arc/compat_mode/arc_splash_screen_dialog_view_unittest.cc
@@ -91,14 +91,16 @@
     ArcSplashScreenDialogView::TestApi dialog_view_test(dialog_view.get());
     auto* const bubble = ShowAsBubble(std::move(dialog_view));
     EXPECT_FALSE(on_close_callback_called);
-    EXPECT_NE(-1, anchor()->GetIndexOf(dialog_view_test.highlight_border()));
+    EXPECT_TRUE(
+        anchor()->GetIndexOf(dialog_view_test.highlight_border()).has_value());
 
     // Simulates esc key event to close the dialog.
     ui::KeyEvent event(ui::ET_KEY_PRESSED, ui::VKEY_ESCAPE, ui::EF_NONE);
     bubble->OnKeyEvent(&event);
 
     EXPECT_TRUE(on_close_callback_called);
-    EXPECT_EQ(-1, anchor()->GetIndexOf(dialog_view_test.highlight_border()));
+    EXPECT_FALSE(
+        anchor()->GetIndexOf(dialog_view_test.highlight_border()).has_value());
   }
 }
 
@@ -108,9 +110,11 @@
         base::DoNothing(), parent_window(), anchor(), is_for_unresizable);
     ArcSplashScreenDialogView::TestApi dialog_view_test(dialog_view.get());
     ShowAsBubble(std::move(dialog_view));
-    EXPECT_NE(-1, anchor()->GetIndexOf(dialog_view_test.highlight_border()));
+    EXPECT_TRUE(
+        anchor()->GetIndexOf(dialog_view_test.highlight_border()).has_value());
     LeftClickOnView(parent_widget(), dialog_view_test.close_button());
-    EXPECT_EQ(-1, anchor()->GetIndexOf(dialog_view_test.highlight_border()));
+    EXPECT_FALSE(
+        anchor()->GetIndexOf(dialog_view_test.highlight_border()).has_value());
   }
 }
 
diff --git a/ash/components/login/auth/auth_session_authenticator.cc b/ash/components/login/auth/auth_session_authenticator.cc
index 99e3984..00bfed3 100644
--- a/ash/components/login/auth/auth_session_authenticator.cc
+++ b/ash/components/login/auth/auth_session_authenticator.cc
@@ -567,6 +567,11 @@
   error_callback =
       base::BindOnce(&AuthSessionAuthenticator::HandleMigrationRequired,
                      weak_factory_.GetWeakPtr(), std::move(error_callback));
+  // As we are in password change flow, all auth failures should be handled
+  // as password changed errors to be redirected correctly.
+  error_callback =
+      base::BindOnce(&AuthSessionAuthenticator::HandlePasswordChangeDetected,
+                     weak_factory_.GetWeakPtr(), std::move(error_callback));
 
   AuthSuccessCallback success_callback = base::BindOnce(
       &AuthSessionAuthenticator::NotifyAuthSuccess, weak_factory_.GetWeakPtr());
diff --git a/ash/constants/ash_features.cc b/ash/constants/ash_features.cc
index bd92cae..426c4ae 100644
--- a/ash/constants/ash_features.cc
+++ b/ash/constants/ash_features.cc
@@ -589,7 +589,7 @@
 // diagnostics app routines, network events, and system snapshot.
 // TODO(ashleydp): Remove this after the feature is launched.
 const base::Feature kEnableLogControllerForDiagnosticsApp{
-    "EnableLogControllerForDiagnosticsApp", base::FEATURE_ENABLED_BY_DEFAULT};
+    "EnableLogControllerForDiagnosticsApp", base::FEATURE_DISABLED_BY_DEFAULT};
 
 // If enabled, the networking cards will be shown in the diagnostics app.
 const base::Feature kEnableNetworkingInDiagnosticsApp{
@@ -866,6 +866,10 @@
     "HoldingSpaceInProgressNotificationSuppression",
     base::FEATURE_DISABLED_BY_DEFAULT};
 
+// Control whether the hotspot tethering is enabled. When enabled, it will allow
+// the Chromebook to share its cellular internet connection to other devices.
+const base::Feature kHotspot{"Hotspot", base::FEATURE_DISABLED_BY_DEFAULT};
+
 // Controls whether the snooping protection prototype is enabled.
 const base::Feature kSnoopingProtection{"SnoopingProtection",
                                         base::FEATURE_DISABLED_BY_DEFAULT};
@@ -1965,6 +1969,10 @@
   return base::FeatureList::IsEnabled(kEnableHostnameSetting);
 }
 
+bool IsHotspotEnabled() {
+  return base::FeatureList::IsEnabled(kHotspot);
+}
+
 bool IsSnoopingProtectionEnabled() {
   return base::FeatureList::IsEnabled(kSnoopingProtection) &&
          ash::switches::HasHps();
diff --git a/ash/constants/ash_features.h b/ash/constants/ash_features.h
index b9d4599..3291eec62 100644
--- a/ash/constants/ash_features.h
+++ b/ash/constants/ash_features.h
@@ -360,6 +360,8 @@
 extern const base::Feature
     kHoldingSpaceInProgressDownloadsNotificationSuppression;
 COMPONENT_EXPORT(ASH_CONSTANTS)
+extern const base::Feature kHotspot;
+COMPONENT_EXPORT(ASH_CONSTANTS)
 extern const base::Feature kVirtualKeyboardNewHeader;
 COMPONENT_EXPORT(ASH_CONSTANTS)
 extern const base::Feature kImeOptionsInSettings;
diff --git a/ash/frame/caption_buttons/frame_size_button_unittest.cc b/ash/frame/caption_buttons/frame_size_button_unittest.cc
index ca731e5..404e433 100644
--- a/ash/frame/caption_buttons/frame_size_button_unittest.cc
+++ b/ash/frame/caption_buttons/frame_size_button_unittest.cc
@@ -6,7 +6,10 @@
 
 #include "ash/shell.h"
 #include "ash/test/ash_test_base.h"
+#include "ash/wm/splitview/split_view_constants.h"
+#include "ash/wm/window_positioning_utils.h"
 #include "ash/wm/window_state.h"
+#include "ash/wm/wm_event.h"
 #include "base/check_op.h"
 #include "base/i18n/rtl.h"
 #include "base/run_loop.h"
@@ -732,6 +735,40 @@
               WindowStateType::kPrimarySnapped);
 }
 
+// Test Partial Split Button Functionality.
+TEST_F(MultitaskMenuTest, TestMultitaskMenuPartialSplit) {
+  EXPECT_TRUE(window_state()->IsNormalStateType());
+  ui::test::EventGenerator* generator = GetEventGenerator();
+  const gfx::Rect work_area_bounds_in_screen =
+      display::Screen::GetScreen()->GetPrimaryDisplay().work_area();
+
+  // Snap to primary with 0.67f screen ratio.
+  ShowMultitaskMenu();
+  generator->MoveMouseTo(multitask_menu()
+                             ->partial_button_for_testing()
+                             ->GetBoundsInScreen()
+                             .left_center());
+  generator->ClickLeftButton();
+  EXPECT_TRUE(window_state()->GetStateType() ==
+              WindowStateType::kPrimarySnapped);
+  EXPECT_EQ(window_state()->window()->bounds().width(),
+            work_area_bounds_in_screen.width() * 0.67);
+
+  // Snap to secondary with 0.33f screen ratio.
+  ShowMultitaskMenu();
+  gfx::Rect partial_bounds(
+      multitask_menu()->partial_button_for_testing()->GetBoundsInScreen());
+  gfx::Point secondary_center(
+      gfx::Point(partial_bounds.x() + partial_bounds.width() * 0.67f,
+                 partial_bounds.y() + partial_bounds.y() / 2));
+  generator->MoveMouseTo(secondary_center);
+  generator->ClickLeftButton();
+  EXPECT_TRUE(window_state()->GetStateType() ==
+              WindowStateType::kSecondarySnapped);
+  EXPECT_EQ(window_state()->window()->bounds().width(),
+            work_area_bounds_in_screen.width() * 0.33);
+}
+
 // Test Full Button Functionality.
 TEST_F(MultitaskMenuTest, TestMultitaskMenuFullFunctionality) {
   ASSERT_TRUE(window_state()->IsNormalStateType());
diff --git a/ash/frame/snap_controller_impl.cc b/ash/frame/snap_controller_impl.cc
index 148433da..d705501d 100644
--- a/ash/frame/snap_controller_impl.cc
+++ b/ash/frame/snap_controller_impl.cc
@@ -18,6 +18,18 @@
 SnapControllerImpl::SnapControllerImpl() = default;
 SnapControllerImpl::~SnapControllerImpl() = default;
 
+WindowSnapWMEvent::SnapRatio GetWMEventSnapRatio(
+    chromeos::SnapRatio snap_ratio) {
+  switch (snap_ratio) {
+    case chromeos::SnapRatio::kDefaultSnapRatio:
+      return WindowSnapWMEvent::SnapRatio::kDefaultSnapRatio;
+    case chromeos::SnapRatio::kOneThirdSnapRatio:
+      return WindowSnapWMEvent::SnapRatio::kOneThirdSnapRatio;
+    case chromeos::SnapRatio::kTwoThirdSnapRatio:
+      return WindowSnapWMEvent::SnapRatio::kTwoThirdSnapRatio;
+  }
+}
+
 bool SnapControllerImpl::CanSnap(aura::Window* window) {
   return WindowState::Get(window)->CanSnap();
 }
@@ -58,7 +70,8 @@
 }
 
 void SnapControllerImpl::CommitSnap(aura::Window* window,
-                                    chromeos::SnapDirection snap) {
+                                    chromeos::SnapDirection snap,
+                                    chromeos::SnapRatio snap_ratio) {
   phantom_window_controller_.reset();
   if (snap == chromeos::SnapDirection::kNone)
     return;
@@ -69,7 +82,8 @@
 
   const WindowSnapWMEvent snap_event(snap == chromeos::SnapDirection::kPrimary
                                          ? WM_EVENT_SNAP_PRIMARY
-                                         : WM_EVENT_SNAP_SECONDARY);
+                                         : WM_EVENT_SNAP_SECONDARY,
+                                     GetWMEventSnapRatio(snap_ratio));
   window_state->OnWMEvent(&snap_event);
 }
 
diff --git a/ash/frame/snap_controller_impl.h b/ash/frame/snap_controller_impl.h
index a6cf7b4..f111023b 100644
--- a/ash/frame/snap_controller_impl.h
+++ b/ash/frame/snap_controller_impl.h
@@ -28,7 +28,9 @@
   void ShowSnapPreview(aura::Window* window,
                        chromeos::SnapDirection snap,
                        bool allow_haptic_feedback) override;
-  void CommitSnap(aura::Window* window, chromeos::SnapDirection snap) override;
+  void CommitSnap(aura::Window* window,
+                  chromeos::SnapDirection snap,
+                  chromeos::SnapRatio snap_ratio) override;
 
  private:
   std::unique_ptr<PhantomWindowController> phantom_window_controller_;
diff --git a/ash/login/ui/login_auth_user_view.cc b/ash/login/ui/login_auth_user_view.cc
index a75e7de..f073032 100644
--- a/ash/login/ui/login_auth_user_view.cc
+++ b/ash/login/ui/login_auth_user_view.cc
@@ -1080,7 +1080,7 @@
       callbacks.on_remove_warning_shown, callbacks.on_remove);
   user_view_ = user_view.get();
 
-  const LoginPalette palette = CreateDefaultLoginPalette();
+  const LoginPalette palette = CreateDefaultLoginPalette(GetColorProvider());
 
   auto password_view = std::make_unique<LoginPasswordView>(palette);
   password_view_ = password_view.get();
@@ -1713,7 +1713,7 @@
 
 void LoginAuthUserView::OnThemeChanged() {
   NonAccessibleView::OnThemeChanged();
-  const LoginPalette palette = CreateDefaultLoginPalette();
+  const LoginPalette palette = CreateDefaultLoginPalette(GetColorProvider());
   password_view_->UpdatePalette(palette);
   pin_input_view_->UpdatePalette(palette);
   pin_view_->UpdatePalette(palette);
diff --git a/ash/login/ui/login_expanded_public_account_view.cc b/ash/login/ui/login_expanded_public_account_view.cc
index 9b0f705..23ea308 100644
--- a/ash/login/ui/login_expanded_public_account_view.cc
+++ b/ash/login/ui/login_expanded_public_account_view.cc
@@ -486,7 +486,8 @@
         l10n_util::GetStringUTF16(
             IDS_ASH_LOGIN_PUBLIC_ACCOUNT_LANGUAGE_MENU_ACCESSIBLE_NAME));
 
-    const int index = advanced_view_->GetIndexOf(language_title_) + 1;
+    const size_t index =
+        advanced_view_->GetIndexOf(language_title_).value() + 1;
     language_menu_view_ =
         advanced_view_->AddChildViewAt(std::move(language_menu_view), index);
   }
@@ -520,7 +521,8 @@
         l10n_util::GetStringUTF16(
             IDS_ASH_LOGIN_PUBLIC_ACCOUNT_KEYBOARD_MENU_ACCESSIBLE_NAME));
 
-    const int index = advanced_view_->GetIndexOf(keyboard_title_) + 1;
+    const size_t index =
+        advanced_view_->GetIndexOf(keyboard_title_).value() + 1;
     keyboard_menu_view_ =
         advanced_view_->AddChildViewAt(std::move(keyboard_menu_view), index);
   }
diff --git a/ash/login/ui/login_palette.cc b/ash/login/ui/login_palette.cc
index 866d3d7..31183b7b1 100644
--- a/ash/login/ui/login_palette.cc
+++ b/ash/login/ui/login_palette.cc
@@ -3,41 +3,42 @@
 // found in the LICENSE file.
 
 #include "ash/login/ui/login_palette.h"
-#include "ash/style/ash_color_provider.h"
+
+#include "ash/style/ash_color_id.h"
+#include "ui/color/color_provider.h"
 #include "ui/gfx/color_palette.h"
 
 namespace ash {
 
-LoginPalette CreateDefaultLoginPalette() {
-  auto* color_provider = AshColorProvider::Get();
-  const std::pair<SkColor, float> base_color_and_opacity =
-      color_provider->GetInkDropBaseColorAndOpacity();
-  // Convert transparency level from [0 ; 1] to [0 ; 255].
-  U8CPU inkdrop_opacity = 255 * base_color_and_opacity.second;
+LoginPalette CreateDefaultLoginPalette(ui::ColorProvider* color_provider) {
+  // `color_provider` should be initialized as `view::GetColorProvider()`, which
+  // might be nullptr before the view isadded to the widget. Make sure to
+  // override the colors inside `OnThemeChanged` which will be called after the
+  // view is added to the widget hierarchy.
+  if (!color_provider)
+    return LoginPalette();
+
   return LoginPalette(
-      {.password_text_color = color_provider->GetContentLayerColor(
-           AshColorProvider::ContentLayerType::kTextColorPrimary),
-       .password_placeholder_text_color = color_provider->GetContentLayerColor(
-           AshColorProvider::ContentLayerType::kTextColorSecondary),
+      {.password_text_color =
+           color_provider->GetColor(kColorAshTextColorPrimary),
+       .password_placeholder_text_color =
+           color_provider->GetColor(kColorAshTextColorSecondary),
        .password_background_color = SK_ColorTRANSPARENT,
-       .password_row_background_color = color_provider->GetControlsLayerColor(
-           AshColorProvider::ControlsLayerType::
-               kControlBackgroundColorInactive),
-       .button_enabled_color = color_provider->GetContentLayerColor(
-           AshColorProvider::ContentLayerType::kIconColorPrimary),
-       .button_annotation_color = color_provider->GetContentLayerColor(
-           AshColorProvider::ContentLayerType::kTextColorSecondary),
+       .password_row_background_color =
+           color_provider->GetColor(kColorAshControlBackgroundColorInactive),
+       .button_enabled_color =
+           color_provider->GetColor(kColorAshIconColorPrimary),
+       .button_annotation_color =
+           color_provider->GetColor(kColorAshTextColorSecondary),
        .pin_ink_drop_highlight_color =
-           SkColorSetA(base_color_and_opacity.first, inkdrop_opacity),
-       .pin_ink_drop_ripple_color =
-           SkColorSetA(base_color_and_opacity.first, inkdrop_opacity),
-       .pin_input_text_color = color_provider->GetContentLayerColor(
-           AshColorProvider::ContentLayerType::kTextColorPrimary),
-       .submit_button_background_color = color_provider->GetControlsLayerColor(
-           AshColorProvider::ControlsLayerType::
-               kControlBackgroundColorInactive),
-       .submit_button_icon_color = color_provider->GetContentLayerColor(
-           AshColorProvider::ContentLayerType::kButtonIconColor)});
+           color_provider->GetColor(kColorAshInkDrop),
+       .pin_ink_drop_ripple_color = color_provider->GetColor(kColorAshInkDrop),
+       .pin_input_text_color =
+           color_provider->GetColor(kColorAshTextColorPrimary),
+       .submit_button_background_color =
+           color_provider->GetColor(kColorAshControlBackgroundColorInactive),
+       .submit_button_icon_color =
+           color_provider->GetColor(kColorAshButtonIconColor)});
 }
 
 // TODO(b/218610104): Support dark theme.
diff --git a/ash/login/ui/login_palette.h b/ash/login/ui/login_palette.h
index e6b8438..6715aa1 100644
--- a/ash/login/ui/login_palette.h
+++ b/ash/login/ui/login_palette.h
@@ -8,6 +8,10 @@
 #include "ash/ash_export.h"
 #include "third_party/skia/include/core/SkColor.h"
 
+namespace ui {
+class ColorProvider;
+}  // namespace ui
+
 namespace ash {
 
 // LoginPalette provides color values to LoginPasswordView and LoginPinView,
@@ -29,7 +33,8 @@
 };
 
 // For login screen and lock screen.
-ASH_EXPORT LoginPalette CreateDefaultLoginPalette();
+ASH_EXPORT LoginPalette
+CreateDefaultLoginPalette(ui::ColorProvider* color_provider);
 
 // For in-session auth dialog.
 ASH_EXPORT LoginPalette CreateInSessionAuthPalette();
diff --git a/ash/login/ui/login_password_view_test.cc b/ash/login/ui/login_password_view_test.cc
index 3fd3da3..2129d76 100644
--- a/ash/login/ui/login_password_view_test.cc
+++ b/ash/login/ui/login_password_view_test.cc
@@ -43,7 +43,8 @@
   void SetUp() override {
     LoginTestBase::SetUp();
 
-    view_ = new LoginPasswordView(CreateDefaultLoginPalette());
+    view_ = new LoginPasswordView(
+        CreateDefaultLoginPalette(/*color_provider=*/nullptr));
     view_->Init(
         base::BindRepeating(&LoginPasswordViewTest::OnPasswordSubmit,
                             base::Unretained(this)),
diff --git a/ash/login/ui/login_pin_input_view_unittest.cc b/ash/login/ui/login_pin_input_view_unittest.cc
index dfb219f..f016cf25 100644
--- a/ash/login/ui/login_pin_input_view_unittest.cc
+++ b/ash/login/ui/login_pin_input_view_unittest.cc
@@ -32,7 +32,8 @@
 
   void SetUp() override {
     LoginTestBase::SetUp();
-    view_ = new LoginPinInputView(CreateDefaultLoginPalette());
+    view_ = new LoginPinInputView(
+        CreateDefaultLoginPalette(/*color_provider=*/nullptr));
     view_->Init(base::BindRepeating(&LoginPinInputViewTest::OnPinSubmit,
                                     base::Unretained(this)),
                 base::BindRepeating(&LoginPinInputViewTest::OnPinChanged,
diff --git a/ash/login/ui/login_pin_view_unittest.cc b/ash/login/ui/login_pin_view_unittest.cc
index 855c605..575122ff 100644
--- a/ash/login/ui/login_pin_view_unittest.cc
+++ b/ash/login/ui/login_pin_view_unittest.cc
@@ -32,14 +32,14 @@
   // Creates login pin view with the specified keyboard |style| and sets it up
   // in a widget.
   void CreateLoginPinViewWithStyle(LoginPinView::Style style) {
-    view_ =
-        new LoginPinView(style, CreateDefaultLoginPalette(),
-                         base::BindRepeating(&LoginPinViewTest::OnPinKey,
-                                             base::Unretained(this)),
-                         base::BindRepeating(&LoginPinViewTest::OnPinBackspace,
-                                             base::Unretained(this)),
-                         base::BindRepeating(&LoginPinViewTest::OnPinSubmit,
-                                             base::Unretained(this)));
+    view_ = new LoginPinView(
+        style, CreateDefaultLoginPalette(/*color_provider=*/nullptr),
+        base::BindRepeating(&LoginPinViewTest::OnPinKey,
+                            base::Unretained(this)),
+        base::BindRepeating(&LoginPinViewTest::OnPinBackspace,
+                            base::Unretained(this)),
+        base::BindRepeating(&LoginPinViewTest::OnPinSubmit,
+                            base::Unretained(this)));
 
     SetWidget(CreateWidgetWithContent(view_));
   }
diff --git a/ash/login/ui/pin_request_view.cc b/ash/login/ui/pin_request_view.cc
index e404e4c..17347af 100644
--- a/ash/login/ui/pin_request_view.cc
+++ b/ash/login/ui/pin_request_view.cc
@@ -11,6 +11,7 @@
 #include "ash/resources/vector_icons/vector_icons.h"
 #include "ash/shell.h"
 #include "ash/strings/grit/ash_strings.h"
+#include "ash/style/ash_color_id.h"
 #include "ash/style/ash_color_provider.h"
 #include "ash/wallpaper/wallpaper_controller_impl.h"
 #include "base/bind.h"
@@ -301,7 +302,8 @@
 
   add_spacer(kDescriptionToAccessCodeDistanceDp);
 
-  LoginPalette palette = CreateDefaultLoginPalette();
+  auto* color_provider = GetColorProvider();
+  LoginPalette palette = CreateDefaultLoginPalette(color_provider);
 
   // Access code input view.
   if (request.pin_length.has_value()) {
@@ -331,13 +333,14 @@
 
   // Pin keyboard. Note that the keyboard's own submit button is disabled via
   // passing a null |on_submit| callback.
-  pin_keyboard_view_ = new LoginPinView(
-      LoginPinView::Style::kAlphanumeric, CreateDefaultLoginPalette(),
-      base::BindRepeating(&AccessCodeInput::InsertDigit,
-                          base::Unretained(access_code_view_)),
-      base::BindRepeating(&AccessCodeInput::Backspace,
-                          base::Unretained(access_code_view_)),
-      /*on_submit=*/LoginPinView::OnPinSubmit());
+  pin_keyboard_view_ =
+      new LoginPinView(LoginPinView::Style::kAlphanumeric,
+                       CreateDefaultLoginPalette(color_provider),
+                       base::BindRepeating(&AccessCodeInput::InsertDigit,
+                                           base::Unretained(access_code_view_)),
+                       base::BindRepeating(&AccessCodeInput::Backspace,
+                                           base::Unretained(access_code_view_)),
+                       /*on_submit=*/LoginPinView::OnPinSubmit());
   // Backspace key is always enabled and |access_code_| field handles it.
   pin_keyboard_view_->OnPasswordTextChanged(false);
   AddChildView(pin_keyboard_view_);
@@ -545,6 +548,14 @@
   node_data->SetName(default_accessible_title_);
 }
 
+void PinRequestView::OnThemeChanged() {
+  views::DialogDelegateView::OnThemeChanged();
+  auto* color_provider = GetColorProvider();
+  access_code_view_->SetInputColor(
+      color_provider->GetColor(kColorAshTextColorPrimary));
+  pin_keyboard_view_->UpdatePalette(CreateDefaultLoginPalette(color_provider));
+}
+
 // If |pin_keyboard_always_enabled_| is not set, pin keyboard is only shown in
 // tablet mode.
 bool PinRequestView::PinKeyboardVisible() const {
diff --git a/ash/login/ui/pin_request_view.h b/ash/login/ui/pin_request_view.h
index 6bfa9a1..133710c3 100644
--- a/ash/login/ui/pin_request_view.h
+++ b/ash/login/ui/pin_request_view.h
@@ -132,6 +132,7 @@
   void RequestFocus() override;
   gfx::Size CalculatePreferredSize() const override;
   void GetAccessibleNodeData(ui::AXNodeData* node_data) override;
+  void OnThemeChanged() override;
 
   // views::DialogDelegateView:
   views::View* GetInitiallyFocusedView() override;
diff --git a/ash/shell.cc b/ash/shell.cc
index c789ef3..88e95b78 100644
--- a/ash/shell.cc
+++ b/ash/shell.cc
@@ -144,6 +144,7 @@
 #include "ash/system/power/power_prefs.h"
 #include "ash/system/power/power_status.h"
 #include "ash/system/power/video_activity_notifier.h"
+#include "ash/system/privacy_hub/microphone_privacy_switch_controller.h"
 #include "ash/system/screen_layout_observer.h"
 #include "ash/system/screen_security/screen_switch_check_controller.h"
 #include "ash/system/session/logout_confirmation_controller.h"
@@ -835,6 +836,9 @@
   // controller.
   dark_light_mode_controller_.reset();
 
+  // Observes `SessionController` and must be destroyed before it.
+  microphone_privacy_switch_controller_.reset();
+
   // These members access Shell in their destructors.
   wallpaper_controller_.reset();
   accessibility_controller_.reset();
@@ -1037,6 +1041,9 @@
         std::make_unique<SnoopingProtectionController>();
   }
 
+  microphone_privacy_switch_controller_ =
+      std::make_unique<MicrophonePrivacySwitchController>();
+
   // Manages lifetime of DiagnosticApp logs.
   if (features::IsLogControllerForDiagnosticsAppEnabled()) {
     diagnostics_log_controller_ =
diff --git a/ash/shell.h b/ash/shell.h
index 6c7fbdc..68c6e159 100644
--- a/ash/shell.h
+++ b/ash/shell.h
@@ -154,6 +154,7 @@
 class MediaControllerImpl;
 class MessageCenterAshImpl;
 class MessageCenterController;
+class MicrophonePrivacySwitchController;
 class MouseCursorEventFilter;
 class MruWindowTracker;
 class MultiDeviceNotificationPresenter;
@@ -507,6 +508,9 @@
   MessageCenterController* message_center_controller() {
     return message_center_controller_.get();
   }
+  MicrophonePrivacySwitchController* microphone_privacy_switch_controller() {
+    return microphone_privacy_switch_controller_.get();
+  }
   MouseCursorEventFilter* mouse_cursor_filter() {
     return mouse_cursor_filter_.get();
   }
@@ -977,6 +981,12 @@
 
   std::unique_ptr<chromeos::SnapController> snap_controller_;
 
+  // Privacy hub controllers.
+  // TODO(b/239400029): Move this to the unified privacy hub controller after it
+  // is created.
+  std::unique_ptr<MicrophonePrivacySwitchController>
+      microphone_privacy_switch_controller_;
+
   // |native_cursor_manager_| is owned by |cursor_manager_|, but we keep a
   // pointer to vend to test code.
   NativeCursorManagerAsh* native_cursor_manager_;
diff --git a/ash/strings/ash_strings_af.xtb b/ash/strings/ash_strings_af.xtb
index 0598f15..d9990cf 100644
--- a/ash/strings/ash_strings_af.xtb
+++ b/ash/strings/ash_strings_af.xtb
@@ -27,6 +27,7 @@
 <translation id="1111021433905331574">Jy kan die kleur van jou sleutelbord se agterlig verander in Instellings &gt; <ph name="APP_TITLE" /></translation>
 <translation id="112308213915226829">Outoversteek rak</translation>
 <translation id="1142002900084379065">Onlangse foto's</translation>
+<translation id="114451698114044150">Outozoem is aan.</translation>
 <translation id="1148499908455722006">Maak inligtingdialoog oop vir <ph name="USER_NAME" /></translation>
 <translation id="1150989369772528668">Kalender</translation>
 <translation id="1153356358378277386">Saamgebinde toestelle</translation>
@@ -449,6 +450,7 @@
 <translation id="3593039967545720377">Kry jou knipbordgeskiedenis deur <ph name="SHORTCUT_KEY_NAME" /> + V te druk om jou knipbord te bekyk. Kopieer 'n item om te begin.</translation>
 <translation id="3593646411856133110">Swiep op en hou om oop programme te sien</translation>
 <translation id="3595596368722241419">Battery is vol</translation>
+<translation id="3600061223661453002">Af</translation>
 <translation id="3604801046548457007">Lessenaar <ph name="DESK_TITILE" /> is geskep</translation>
 <translation id="3606978283550408104">Braille-skerm gekoppel.</translation>
 <translation id="3615926715408477684">As mobiele data geaktiveer word, sal dit Bluetooth aktiveer</translation>
@@ -968,6 +970,7 @@
 <translation id="6637729079642709226">Verander tyd</translation>
 <translation id="6641720045729354415">Wissel intydse onderskrif. <ph name="STATE_TEXT" /></translation>
 <translation id="6643169293433369663">Ontdoen sorteervolgorde volgens naam</translation>
+<translation id="6649641931981131786">Verstel kamera om jou in die middel van die skerm te plaas.</translation>
 <translation id="6650072551060208490"><ph name="ORIGIN_NAME" /> wil bevestig dat dit jy is</translation>
 <translation id="6650933572246256093">Bluetooth-toestel "<ph name="DEVICE_NAME" />" soek toestemming om saam te bind. Voer asseblief hierdie wagsleutel op daardie toestel in: <ph name="PASSKEY" /></translation>
 <translation id="6657585470893396449">Wagwoord</translation>
@@ -1009,6 +1012,7 @@
 <translation id="685782768769951078">{NUM_DIGITS,plural, =1{Een syfer bly oor}other{# syfers bly oor}}</translation>
 <translation id="6867938213751067702">Aflaai is onderbreek <ph name="FILENAME" /></translation>
 <translation id="6878400149835617132">Kortpad is afgeskakel</translation>
+<translation id="6878709625737492815">Outozoem is af.</translation>
 <translation id="6884665277231944629">Gaan terug na vandag</translation>
 <translation id="6886172995547742638">Jou <ph name="DEVICE_TYPE" /> kan dalk laer werkverrigting ervaar. Gebruik 'n gesertifiseerde <ph name="PREFERRED_MINIMUM_POWER" />W- of hoër USB-C-kragprop.</translation>
 <translation id="688631446150864480">Druk die afpyl om tussen vensters te wissel</translation>
@@ -1088,6 +1092,7 @@
 <translation id="7378203170292176219">Sleep om 'n area te kies om op te neem</translation>
 <translation id="7378594059915113390">Media-kontroles</translation>
 <translation id="7378889811480108604">Batterybespaardermodus is af</translation>
+<translation id="7382680553121047388">Aan</translation>
 <translation id="7384028040782072252">Regsklik op enige plek om jou programme te herrangskik</translation>
 <translation id="7392563512730092880">Jy kan altyd later in Instellings opstel.</translation>
 <translation id="7405710164030118432">Voer jou Family Link-ouertoegangskode in om die toestel te ontsluit</translation>
@@ -1171,6 +1176,7 @@
 <translation id="7868900307798234037">Ontsluit met vingerafdruk</translation>
 <translation id="7872195908557044066">Jou administrateur stel tans jou e-SIM terug. Wag 'n paar minute.</translation>
 <translation id="7872786842639831132">Af</translation>
+<translation id="7875280185395705476">Outozoem</translation>
 <translation id="7875575368831396199">Dit lyk of Bluetooth op jou <ph name="DEVICE_TYPE" /> afgeskakel is. Skakel asseblief Bluetooth aan om Foonsentrum te gebruik.</translation>
 <translation id="7877557217297072640">{0,plural, =0{Verander toestel nou na vorige weergawe}=1{Verander toestel binne 1 sekonde na vorige weergawe}other{Verander toestel binne # sekondes na vorige weergawe}}</translation>
 <translation id="7886169021410746335">Verstel privaatheidinstellings</translation>
@@ -1245,6 +1251,7 @@
 <translation id="828708037801473432">Af</translation>
 <translation id="8297006494302853456">Swak</translation>
 <translation id="8308637677604853869">Vorige kieslys</translation>
+<translation id="830868413617744215">Beta</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363"><ph name="WINDOW_TITLE" />-venster gekies</translation>
 <translation id="8351131234907093545">Skep nota</translation>
@@ -1290,6 +1297,7 @@
 <translation id="856298576161209842"><ph name="MANAGER" /> beveel aan dat jy jou <ph name="DEVICE_TYPE" /> opdateer</translation>
 <translation id="8563862697512465947">Kennisgewinginstellings</translation>
 <translation id="857201607579416096">Kieslys is na die skerm se hoek regs onder geskuif.</translation>
+<translation id="8576288697319745668">Wissel outozoem. <ph name="STATE_TEXT" /></translation>
 <translation id="8594115950068821369">-<ph name="FORMATTED_TIME" /></translation>
 <translation id="8598235756057743477">Rangskik jou programme volgens naam of kleur</translation>
 <translation id="8614517853887502247"><ph name="APP_1_TITLE" />- en <ph name="APP_2_TITLE" />-kennisgewings word versteek omdat kykbeskerming aan is</translation>
diff --git a/ash/strings/ash_strings_am.xtb b/ash/strings/ash_strings_am.xtb
index 6a34daa..8a4fb49a0b 100644
--- a/ash/strings/ash_strings_am.xtb
+++ b/ash/strings/ash_strings_am.xtb
@@ -306,6 +306,7 @@
 <translation id="2805756323405976993">መተግበሪያዎች</translation>
 <translation id="2814448776515246190">ከፊል መያዝ</translation>
 <translation id="2819276065543622893">አሁን ዘግተው እንዲወጡ ይደረጋሉ።</translation>
+<translation id="2822551631199737692">ካሜራ ሥራ ላይ ነው</translation>
 <translation id="2825224105325558319"><ph name="DISPLAY_NAME" /> <ph name="SPECIFIED_RESOLUTION" />ን አይደግፍም። ጥራቱ ወደ <ph name="FALLBACK_RESOLUTION" /> ተቀይሯል።</translation>
 <translation id="2825619548187458965">መደርደሪያ</translation>
 <translation id="2831035692318564937">ጸሐይ እስክትወጣ ድረስ በርቷል</translation>
@@ -807,6 +808,7 @@
 <translation id="5682642926269496722">የ Google ረዳቱ አሁን ላለው ተጠቃሚ መለያ አይገኝም።</translation>
 <translation id="5689633613396158040">የሌሊት ብርሃን በእርስዎ ማያ ገጽ ላይ መመልከትን ወይም በደብዛዛ ብርሃን ማንበብን ይበልጥ ቀላል ያደርገዋል። የምሽት ብርሃን ስንት ሰዓት ላይ እንደሚበራ ለመቀየር መታ ያድርጉ ወይም ሙሉ ለሙሉ ያጥፉት።</translation>
 <translation id="5691772641933328258">የጣት አሻራ አልታወቀም</translation>
+<translation id="5693255400847650006">ማይክሮፎን ሥራ ላይ ነው</translation>
 <translation id="570390244361237317">ሁሉም መተግበሪያዎች፣ ሁሉም መተግበሪያዎች ላይ ለመድረስ በቀስት ቁልፎች ያስሱ</translation>
 <translation id="5707775774148071965">የእርስዎ መሳሪያ ከገመድዎ የበለጠ የውሂብ መጠን ይደግፋል። የመሳሪያ አፈጻጸም የተገደበ ሊሆን ይችላል።</translation>
 <translation id="5710450975648804523">አትረብሽ በርቷል</translation>
@@ -981,6 +983,7 @@
 <translation id="6723839937902243910">ኃይል</translation>
 <translation id="6727969043791803658">ተገናኝቷል፣ <ph name="BATTERY_PERCENTAGE" />% ባትሪ</translation>
 <translation id="6732800389263199929">+<ph name="COUNT" /></translation>
+<translation id="6737983188036277605">ካሜራ እና ማይክሮፎን ሥራ ላይ ናቸው</translation>
 <translation id="6739144137573853180">ወደ ቅንብሮች ሂድ</translation>
 <translation id="6751052314767925245">በእርስዎ አስተዳዳሪ ተፈጻሚ የተደረገ</translation>
 <translation id="6751826523481687655">የአፈጻጸም ክትትል በርቷል</translation>
@@ -1162,6 +1165,7 @@
 <translation id="7842569679327885685">ማስጠንቀቂያ፦ የሙከራ ባህሪ</translation>
 <translation id="7846634333498149051">የቁልፍ ሰሌዳ</translation>
 <translation id="7848989271541991537">ወደ ገጽ <ph name="PAGE_NUMBER" />፣ ረድፍ <ph name="ROW_NUMBER" />፣ ዓምድ <ph name="COLUMN_NUMBER" /> ተንቀሳቅሷል።</translation>
+<translation id="7851768487828137624">Canary</translation>
 <translation id="7860671499921112077">ወደ አጠቃላይ ዕይታ ለመግባት በሦስት ጣቶች ወደ ላይ ያንሸራትቱ</translation>
 <translation id="7866482334467279021">በርቷል</translation>
 <translation id="7868900307798234037">በጣት አሻራ በመክፈት ላይ</translation>
@@ -1241,6 +1245,7 @@
 <translation id="828708037801473432">ጠፍቷል</translation>
 <translation id="8297006494302853456">ደካማ</translation>
 <translation id="8308637677604853869">ቀዳሚ ምናሌ</translation>
+<translation id="830868413617744215">ቅድመ-ይሁንታ</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363"><ph name="WINDOW_TITLE" /> መስኮት ተመርጧል</translation>
 <translation id="8351131234907093545">ማስታወሻን ይፍጠሩ</translation>
diff --git a/ash/strings/ash_strings_ar.xtb b/ash/strings/ash_strings_ar.xtb
index 5b3ee3c..493f5d7f 100644
--- a/ash/strings/ash_strings_ar.xtb
+++ b/ash/strings/ash_strings_ar.xtb
@@ -1164,6 +1164,7 @@
 <translation id="7842569679327885685">تحذير: ميزة تجريبية</translation>
 <translation id="7846634333498149051">لوحة المفاتيح</translation>
 <translation id="7848989271541991537">تم الانتقال إلى الصفحة رقم <ph name="PAGE_NUMBER" />، الصف رقم <ph name="ROW_NUMBER" /> والعمود رقم <ph name="COLUMN_NUMBER" />.</translation>
+<translation id="7851768487828137624">الكاناري</translation>
 <translation id="7860671499921112077">يمكنك التمرير سريعًا لأعلى الشاشة بثلاثة أصابع للدخول إلى وضع "النظرة العامة".</translation>
 <translation id="7866482334467279021">مفعّل</translation>
 <translation id="7868900307798234037">فتح القفل باستخدام بصمة الإصبع</translation>
@@ -1243,6 +1244,7 @@
 <translation id="828708037801473432">غير مُفعَّلة</translation>
 <translation id="8297006494302853456">ضعيفة</translation>
 <translation id="8308637677604853869">القائمة السابقة</translation>
+<translation id="830868413617744215">تجريبي</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">تم اختيار النافذة <ph name="WINDOW_TITLE" />.</translation>
 <translation id="8351131234907093545">إنشاء ملاحظة</translation>
diff --git a/ash/strings/ash_strings_as.xtb b/ash/strings/ash_strings_as.xtb
index 57d8eddc..4dbc959 100644
--- a/ash/strings/ash_strings_as.xtb
+++ b/ash/strings/ash_strings_as.xtb
@@ -1244,6 +1244,7 @@
 <translation id="828708037801473432">অফ আছে</translation>
 <translation id="8297006494302853456">দুৰ্বল</translation>
 <translation id="8308637677604853869">পূৰ্বৱৰ্তী মেনু</translation>
+<translation id="830868413617744215">বিটা</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363"><ph name="WINDOW_TITLE" /> ৱিণ্ড' বাছনি কৰা হ'ল</translation>
 <translation id="8351131234907093545">টোকা সৃষ্টি কৰক</translation>
diff --git a/ash/strings/ash_strings_az.xtb b/ash/strings/ash_strings_az.xtb
index 902ebd2..d85006a35 100644
--- a/ash/strings/ash_strings_az.xtb
+++ b/ash/strings/ash_strings_az.xtb
@@ -1251,6 +1251,7 @@
 <translation id="828708037801473432">Deaktiv</translation>
 <translation id="8297006494302853456">Zəif</translation>
 <translation id="8308637677604853869">Öncəki menyu</translation>
+<translation id="830868413617744215">Beta</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363"><ph name="WINDOW_TITLE" /> pəncərəsi seçilib</translation>
 <translation id="8351131234907093545">Qeyd yaradın</translation>
diff --git a/ash/strings/ash_strings_be.xtb b/ash/strings/ash_strings_be.xtb
index a873f7c..1326990 100644
--- a/ash/strings/ash_strings_be.xtb
+++ b/ash/strings/ash_strings_be.xtb
@@ -306,6 +306,7 @@
 <translation id="2805756323405976993">Праграмы</translation>
 <translation id="2814448776515246190">Здыманне часткі экрана</translation>
 <translation id="2819276065543622893">Вы выйдзеце з уліковага запісу зараз.</translation>
+<translation id="2822551631199737692">Выкарыстоўваецца камера</translation>
 <translation id="2825224105325558319"><ph name="DISPLAY_NAME" /> не падтрымлівае раздзяляльнасць <ph name="SPECIFIED_RESOLUTION" />. Прыменена раздзяляльнасць <ph name="FALLBACK_RESOLUTION" />.</translation>
 <translation id="2825619548187458965">Паліца</translation>
 <translation id="2831035692318564937">Уключана да захаду сонца</translation>
@@ -807,6 +808,7 @@
 <translation id="5682642926269496722">Памочнік Google недаступны для бягучага ўліковага запісу карыстальніка.</translation>
 <translation id="5689633613396158040">У рэжыме Начной падсветкі зручней глядзець на экран пры цьмяным асвятленні. Каб змяніць час уключэння начнога рэжыму або выключыць рэжым цалкам, націсніце тут.</translation>
 <translation id="5691772641933328258">Адбітак пальца не распазнаны</translation>
+<translation id="5693255400847650006">Выкарыстоўваецца мікрафон</translation>
 <translation id="570390244361237317">Усе праграмы: для пераходу паміж імі выкарыстоўвайце клавішы са стрэлкамі</translation>
 <translation id="5707775774148071965">Ваша прылада падтрымлівае больш высокую хуткасць перадачы даных, чым кабель. Прадукцыйнасць прылады можа быць абмежавана.</translation>
 <translation id="5710450975648804523">Рэжым "Не турбаваць" уключаны</translation>
@@ -981,6 +983,7 @@
 <translation id="6723839937902243910">Кнопка сілкавання</translation>
 <translation id="6727969043791803658">Прылада падключана. Зарад акумулятара: <ph name="BATTERY_PERCENTAGE" />%</translation>
 <translation id="6732800389263199929">+<ph name="COUNT" /></translation>
+<translation id="6737983188036277605">Выкарыстоўваюцца камера і мікрафон</translation>
 <translation id="6739144137573853180">ПЕРАЙСЦІ Ў НАЛАДЫ</translation>
 <translation id="6751052314767925245">Гэтай функцыяй кіруе адміністратар</translation>
 <translation id="6751826523481687655">Трасіроўка прадукцыйнасці ўключана</translation>
@@ -1241,6 +1244,7 @@
 <translation id="828708037801473432">Выключана</translation>
 <translation id="8297006494302853456">Слабы</translation>
 <translation id="8308637677604853869">Папярэдняе меню</translation>
+<translation id="830868413617744215">Бэта-версія</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">Выбрана акно "<ph name="WINDOW_TITLE" />"</translation>
 <translation id="8351131234907093545">Стварыць нататку</translation>
diff --git a/ash/strings/ash_strings_bg.xtb b/ash/strings/ash_strings_bg.xtb
index d25112ed..c5d9874 100644
--- a/ash/strings/ash_strings_bg.xtb
+++ b/ash/strings/ash_strings_bg.xtb
@@ -1162,6 +1162,7 @@
 <translation id="7842569679327885685">Предупреждение: Експериментална функция</translation>
 <translation id="7846634333498149051">Клавиатура</translation>
 <translation id="7848989271541991537">Преместено на страница <ph name="PAGE_NUMBER" />, ред <ph name="ROW_NUMBER" />, колона <ph name="COLUMN_NUMBER" />.</translation>
+<translation id="7851768487828137624">Ранна версия</translation>
 <translation id="7860671499921112077">Прекарайте три пръста нагоре, за да влезете в общия преглед</translation>
 <translation id="7866482334467279021">включено</translation>
 <translation id="7868900307798234037">Отключване с отпечатък</translation>
@@ -1241,6 +1242,7 @@
 <translation id="828708037801473432">Изключено</translation>
 <translation id="8297006494302853456">Слаб</translation>
 <translation id="8308637677604853869">Предишно меню</translation>
+<translation id="830868413617744215">Бета</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">Избран е прозорецът <ph name="WINDOW_TITLE" /></translation>
 <translation id="8351131234907093545">Създаване на бележка</translation>
diff --git a/ash/strings/ash_strings_bn.xtb b/ash/strings/ash_strings_bn.xtb
index 86e8ce9..07ed2b4 100644
--- a/ash/strings/ash_strings_bn.xtb
+++ b/ash/strings/ash_strings_bn.xtb
@@ -1170,6 +1170,7 @@
 <translation id="7842569679327885685">সতর্কতা: পরীক্ষামূলক বৈশিষ্ট্য</translation>
 <translation id="7846634333498149051">কীবোর্ড</translation>
 <translation id="7848989271541991537"><ph name="PAGE_NUMBER" /> নম্বর পৃষ্ঠার <ph name="ROW_NUMBER" /> নম্বর সারির <ph name="COLUMN_NUMBER" /> নম্বর কলামে সরানো হয়েছে।</translation>
+<translation id="7851768487828137624">ক্যানারি</translation>
 <translation id="7860671499921112077">'এক নজরে' মোডে প্রবেশ করতে, তিনটি আঙুল দিয়ে উপরের দিকে সোয়াইপ করুন</translation>
 <translation id="7866482334467279021">চালু</translation>
 <translation id="7868900307798234037">আঙ্গুলের ছাপ দিয়ে আনলক করা হচ্ছে</translation>
@@ -1250,6 +1251,7 @@
 <translation id="828708037801473432">বন্ধ করা আছে</translation>
 <translation id="8297006494302853456">দুর্বল</translation>
 <translation id="8308637677604853869">পূর্ববর্তী মেনু</translation>
+<translation id="830868413617744215">বিটা</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363"><ph name="WINDOW_TITLE" />টি উইন্ডো বেছে নেওয়া হয়েছে</translation>
 <translation id="8351131234907093545">নোট তৈরি করুন</translation>
diff --git a/ash/strings/ash_strings_bs.xtb b/ash/strings/ash_strings_bs.xtb
index f5fe8ba..aadb352 100644
--- a/ash/strings/ash_strings_bs.xtb
+++ b/ash/strings/ash_strings_bs.xtb
@@ -1170,6 +1170,7 @@
 <translation id="7842569679327885685">Upozorenje: Eksperimentalna funkcija</translation>
 <translation id="7846634333498149051">Tastatura</translation>
 <translation id="7848989271541991537">Premješteno je na <ph name="PAGE_NUMBER" />. stranicu, <ph name="ROW_NUMBER" />. red, <ph name="COLUMN_NUMBER" />. kolonu.</translation>
+<translation id="7851768487828137624">Canary</translation>
 <translation id="7860671499921112077">Prevucite nagore s tri prsta da pristupite Pregledu</translation>
 <translation id="7866482334467279021">uključeno</translation>
 <translation id="7868900307798234037">Otključavanje otiskom prsta</translation>
@@ -1250,6 +1251,7 @@
 <translation id="828708037801473432">Isključeno</translation>
 <translation id="8297006494302853456">Slabo</translation>
 <translation id="8308637677604853869">Prethodni meni</translation>
+<translation id="830868413617744215">Beta</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">Odabran je prozor <ph name="WINDOW_TITLE" /></translation>
 <translation id="8351131234907093545">Napravite bilješku</translation>
diff --git a/ash/strings/ash_strings_ca.xtb b/ash/strings/ash_strings_ca.xtb
index 14f2c28..0d37b2f 100644
--- a/ash/strings/ash_strings_ca.xtb
+++ b/ash/strings/ash_strings_ca.xtb
@@ -1162,6 +1162,7 @@
 <translation id="7842569679327885685">Advertiment: funció experimental</translation>
 <translation id="7846634333498149051">Teclat</translation>
 <translation id="7848989271541991537">S'ha mogut a la pàgina <ph name="PAGE_NUMBER" />, fila <ph name="ROW_NUMBER" />, columna <ph name="COLUMN_NUMBER" />.</translation>
+<translation id="7851768487828137624">Canary</translation>
 <translation id="7860671499921112077">Fes lliscar tres dits cap amunt per entrar a Visió general</translation>
 <translation id="7866482334467279021">activat</translation>
 <translation id="7868900307798234037">Has desbloquejat el dispositiu amb empremta digital</translation>
@@ -1241,6 +1242,7 @@
 <translation id="828708037801473432">Desactivada</translation>
 <translation id="8297006494302853456">Feble</translation>
 <translation id="8308637677604853869">Menú anterior</translation>
+<translation id="830868413617744215">Beta</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">S'ha seleccionat <ph name="WINDOW_TITLE" /> finestra</translation>
 <translation id="8351131234907093545">Crea una nota</translation>
diff --git a/ash/strings/ash_strings_cs.xtb b/ash/strings/ash_strings_cs.xtb
index af0c62b..ec3a6ad 100644
--- a/ash/strings/ash_strings_cs.xtb
+++ b/ash/strings/ash_strings_cs.xtb
@@ -1170,6 +1170,7 @@
 <translation id="7842569679327885685">Upozornění: Experimentální funkce</translation>
 <translation id="7846634333498149051">Klávesnice</translation>
 <translation id="7848989271541991537">Přesunuto na stránku <ph name="PAGE_NUMBER" />, řádek <ph name="ROW_NUMBER" />, sloupec <ph name="COLUMN_NUMBER" />.</translation>
+<translation id="7851768487828137624">Kanárek</translation>
 <translation id="7860671499921112077">Přehled otevřete přejetím třemi prsty nahoru</translation>
 <translation id="7866482334467279021">zapnuto</translation>
 <translation id="7868900307798234037">Odemknutí otiskem prstu</translation>
@@ -1250,6 +1251,7 @@
 <translation id="828708037801473432">Vypnuto</translation>
 <translation id="8297006494302853456">Slabý</translation>
 <translation id="8308637677604853869">Předchozí nabídka</translation>
+<translation id="830868413617744215">Beta</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">Vybrané okno: <ph name="WINDOW_TITLE" /></translation>
 <translation id="8351131234907093545">Vytvořit poznámku</translation>
diff --git a/ash/strings/ash_strings_cy.xtb b/ash/strings/ash_strings_cy.xtb
index 039a954..2dcf027 100644
--- a/ash/strings/ash_strings_cy.xtb
+++ b/ash/strings/ash_strings_cy.xtb
@@ -1244,6 +1244,7 @@
 <translation id="828708037801473432">Diffodd</translation>
 <translation id="8297006494302853456">Gwan</translation>
 <translation id="8308637677604853869">Dewislen flaenorol</translation>
+<translation id="830868413617744215">Beta</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">Mae'r ffenestr <ph name="WINDOW_TITLE" /> wedi'i dewis</translation>
 <translation id="8351131234907093545">Creu nodyn</translation>
diff --git a/ash/strings/ash_strings_da.xtb b/ash/strings/ash_strings_da.xtb
index fe3e42a..9362298 100644
--- a/ash/strings/ash_strings_da.xtb
+++ b/ash/strings/ash_strings_da.xtb
@@ -1165,6 +1165,7 @@
 <translation id="7842569679327885685">Advarsel! Eksperimentel funktion</translation>
 <translation id="7846634333498149051">Tastatur</translation>
 <translation id="7848989271541991537">Flyttet til side <ph name="PAGE_NUMBER" />, række <ph name="ROW_NUMBER" />, kolonne <ph name="COLUMN_NUMBER" />.</translation>
+<translation id="7851768487828137624">Canary</translation>
 <translation id="7860671499921112077">Stryg opad med tre fingre for at åbne oversigten</translation>
 <translation id="7866482334467279021">til</translation>
 <translation id="7868900307798234037">Låser op med fingeraftryk</translation>
@@ -1244,6 +1245,7 @@
 <translation id="828708037801473432">Fra</translation>
 <translation id="8297006494302853456">Svag</translation>
 <translation id="8308637677604853869">Forrige menu</translation>
+<translation id="830868413617744215">Beta</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">Vinduet <ph name="WINDOW_TITLE" /> er valgt</translation>
 <translation id="8351131234907093545">Opret note</translation>
diff --git a/ash/strings/ash_strings_de.xtb b/ash/strings/ash_strings_de.xtb
index 154475b..babe1c7c 100644
--- a/ash/strings/ash_strings_de.xtb
+++ b/ash/strings/ash_strings_de.xtb
@@ -306,6 +306,7 @@
 <translation id="2805756323405976993">Apps</translation>
 <translation id="2814448776515246190">Ausschnitt aufnehmen</translation>
 <translation id="2819276065543622893">Du wirst jetzt abgemeldet.</translation>
+<translation id="2822551631199737692">Kamera wird verwendet</translation>
 <translation id="2825224105325558319"><ph name="DISPLAY_NAME" /> unterstützt <ph name="SPECIFIED_RESOLUTION" /> nicht. Die Auflösung wurde zu <ph name="FALLBACK_RESOLUTION" /> geändert.</translation>
 <translation id="2825619548187458965">Ablage</translation>
 <translation id="2831035692318564937">Bis Sonnenaufgang aktiviert</translation>
@@ -807,6 +808,7 @@
 <translation id="5682642926269496722">Google Assistant ist für das aktuelle Nutzerkonto nicht verfügbar.</translation>
 <translation id="5689633613396158040">Mit der Funktion "Nachtlicht" ist der Bildschirm bei schwachem Licht nicht störend hell und das Lesen fällt leichter. Wenn du hier tippst, kannst du einstellen, wann die Funktion eingeschaltet werden soll, oder sie ganz deaktivieren.</translation>
 <translation id="5691772641933328258">Fingerabdruck nicht erkannt</translation>
+<translation id="5693255400847650006">Mikrofon wird verwendet</translation>
 <translation id="570390244361237317">Alle Apps – du kannst über die Pfeiltasten auf alle Apps zugreifen</translation>
 <translation id="5707775774148071965">Dein Gerät unterstützt eine höhere Datenübertragungsrate als das Kabel. Dies kann die Geräteleistung beeinträchtigen.</translation>
 <translation id="5710450975648804523">„Bitte nicht stören“ ist aktiviert</translation>
@@ -981,6 +983,7 @@
 <translation id="6723839937902243910">Leistung</translation>
 <translation id="6727969043791803658">Verbunden, Akkustand bei <ph name="BATTERY_PERCENTAGE" /> %</translation>
 <translation id="6732800389263199929">+<ph name="COUNT" /></translation>
+<translation id="6737983188036277605">Kamera und Mikrofon werden verwendet</translation>
 <translation id="6739144137573853180">EINSTELLUNGEN ÖFFNEN</translation>
 <translation id="6751052314767925245">Von deinem Administrator erzwungen</translation>
 <translation id="6751826523481687655">Leistungsverfolgung ist aktiviert</translation>
@@ -1162,6 +1165,7 @@
 <translation id="7842569679327885685">Achtung: Experimentelle Funktion</translation>
 <translation id="7846634333498149051">Tastatur</translation>
 <translation id="7848989271541991537">Auf Seite <ph name="PAGE_NUMBER" />, Zeile <ph name="ROW_NUMBER" />, Spalte <ph name="COLUMN_NUMBER" /> verschoben.</translation>
+<translation id="7851768487828137624">Kanarienvogel</translation>
 <translation id="7860671499921112077">Wische mit drei Fingern nach oben, um die Übersicht aufzurufen</translation>
 <translation id="7866482334467279021">an</translation>
 <translation id="7868900307798234037">Entsperren mit Fingerabdruck</translation>
@@ -1241,6 +1245,7 @@
 <translation id="828708037801473432">Aus</translation>
 <translation id="8297006494302853456">Schwach</translation>
 <translation id="8308637677604853869">Vorheriges Menü</translation>
+<translation id="830868413617744215">Beta</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">Fenster „<ph name="WINDOW_TITLE" />“ ausgewählt</translation>
 <translation id="8351131234907093545">Notiz erstellen</translation>
diff --git a/ash/strings/ash_strings_el.xtb b/ash/strings/ash_strings_el.xtb
index 6091deba..45e7fc24 100644
--- a/ash/strings/ash_strings_el.xtb
+++ b/ash/strings/ash_strings_el.xtb
@@ -1165,6 +1165,7 @@
 <translation id="7842569679327885685">Προειδοποίηση: Πειραματική λειτουργία</translation>
 <translation id="7846634333498149051">Πληκτρολόγιο</translation>
 <translation id="7848989271541991537">Μετάβαση στη σελίδα <ph name="PAGE_NUMBER" />, σειρά <ph name="ROW_NUMBER" />, στήλη <ph name="COLUMN_NUMBER" />.</translation>
+<translation id="7851768487828137624">Canary</translation>
 <translation id="7860671499921112077">Σύρετε προς τα επάνω με τρία δάχτυλα για είσοδο στην Επισκόπηση</translation>
 <translation id="7866482334467279021">ενεργή</translation>
 <translation id="7868900307798234037">Ξεκλείδωμα με δακτυλικό αποτύπωμα</translation>
@@ -1244,6 +1245,7 @@
 <translation id="828708037801473432">Ανενεργό</translation>
 <translation id="8297006494302853456">Αδύναμο</translation>
 <translation id="8308637677604853869">Προηγούμενο μενού</translation>
+<translation id="830868413617744215">Beta</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">Επιλέχτηκε το παράθυρο <ph name="WINDOW_TITLE" />.</translation>
 <translation id="8351131234907093545">Δημιουργία σημείωσης</translation>
diff --git a/ash/strings/ash_strings_en-GB.xtb b/ash/strings/ash_strings_en-GB.xtb
index b80528b..543beae 100644
--- a/ash/strings/ash_strings_en-GB.xtb
+++ b/ash/strings/ash_strings_en-GB.xtb
@@ -1171,6 +1171,7 @@
 <translation id="7842569679327885685">Warning: Experimental feature</translation>
 <translation id="7846634333498149051">Keyboard</translation>
 <translation id="7848989271541991537">Moved to page <ph name="PAGE_NUMBER" />, row <ph name="ROW_NUMBER" />, column <ph name="COLUMN_NUMBER" />.</translation>
+<translation id="7851768487828137624">Canary</translation>
 <translation id="7860671499921112077">Swipe up with three fingers to enter Overview</translation>
 <translation id="7866482334467279021">on</translation>
 <translation id="7868900307798234037">Unlocking with fingerprint</translation>
@@ -1251,6 +1252,7 @@
 <translation id="828708037801473432">Off</translation>
 <translation id="8297006494302853456">Weak</translation>
 <translation id="8308637677604853869">Previous menu</translation>
+<translation id="830868413617744215">Beta</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363"><ph name="WINDOW_TITLE" /> window selected</translation>
 <translation id="8351131234907093545">Create note</translation>
diff --git a/ash/strings/ash_strings_es-419.xtb b/ash/strings/ash_strings_es-419.xtb
index 43ff479f..51f711f 100644
--- a/ash/strings/ash_strings_es-419.xtb
+++ b/ash/strings/ash_strings_es-419.xtb
@@ -1166,6 +1166,7 @@
 <translation id="7842569679327885685">Advertencia: Función experimental</translation>
 <translation id="7846634333498149051">Teclado</translation>
 <translation id="7848989271541991537">Se movió a la página <ph name="PAGE_NUMBER" />, fila <ph name="ROW_NUMBER" />, columna <ph name="COLUMN_NUMBER" />.</translation>
+<translation id="7851768487828137624">Canary</translation>
 <translation id="7860671499921112077">Para ingresar a la Vista general, desliza tres dedos hacia arriba.</translation>
 <translation id="7866482334467279021">activado</translation>
 <translation id="7868900307798234037">Desbloqueando con huella dactilar</translation>
@@ -1245,6 +1246,7 @@
 <translation id="828708037801473432">No</translation>
 <translation id="8297006494302853456">Débil</translation>
 <translation id="8308637677604853869">Menú anterior</translation>
+<translation id="830868413617744215">Beta</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">Ventana <ph name="WINDOW_TITLE" /> seleccionada</translation>
 <translation id="8351131234907093545">Crear nota</translation>
diff --git a/ash/strings/ash_strings_es.xtb b/ash/strings/ash_strings_es.xtb
index f90d72a..a302177d 100644
--- a/ash/strings/ash_strings_es.xtb
+++ b/ash/strings/ash_strings_es.xtb
@@ -1163,6 +1163,7 @@
 <translation id="7842569679327885685">Advertencia: Función experimental</translation>
 <translation id="7846634333498149051">Teclado</translation>
 <translation id="7848989271541991537">Se ha movido a la página <ph name="PAGE_NUMBER" />, fila <ph name="ROW_NUMBER" />, columna <ph name="COLUMN_NUMBER" />.</translation>
+<translation id="7851768487828137624">Canary</translation>
 <translation id="7860671499921112077">Desliza tres dedos hacia arriba para acceder a la vista general</translation>
 <translation id="7866482334467279021">activado</translation>
 <translation id="7868900307798234037">Desbloqueando con huella digital</translation>
@@ -1242,6 +1243,7 @@
 <translation id="828708037801473432">Desactivada</translation>
 <translation id="8297006494302853456">Débil</translation>
 <translation id="8308637677604853869">Menú anterior</translation>
+<translation id="830868413617744215">Beta</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">Ventana <ph name="WINDOW_TITLE" /> seleccionada</translation>
 <translation id="8351131234907093545">Crear nota</translation>
diff --git a/ash/strings/ash_strings_et.xtb b/ash/strings/ash_strings_et.xtb
index 93055a64..1a5545e 100644
--- a/ash/strings/ash_strings_et.xtb
+++ b/ash/strings/ash_strings_et.xtb
@@ -306,6 +306,7 @@
 <translation id="2805756323405976993">Rakendused</translation>
 <translation id="2814448776515246190">Osaline jäädvustamine</translation>
 <translation id="2819276065543622893">Teid logitakse nüüd välja.</translation>
+<translation id="2822551631199737692">Kaamera on kasutuses</translation>
 <translation id="2825224105325558319">Üksus <ph name="DISPLAY_NAME" /> ei toeta eraldusvõimet <ph name="SPECIFIED_RESOLUTION" />. Eraldusvõimeks määrati <ph name="FALLBACK_RESOLUTION" />.</translation>
 <translation id="2825619548187458965">Riiul</translation>
 <translation id="2831035692318564937">Päikesetõusuni sees</translation>
@@ -808,6 +809,7 @@
 <translation id="5682642926269496722">Google'i assistent pole praeguse kasutajakonto jaoks saadaval.</translation>
 <translation id="5689633613396158040">Öövalgus muudab hämaras valguses ekraani vaatamise ja lugemise lihtsamaks. Puudutage, et muuta Öövalguse sisselülitumise aega või lülitada see täielikult välja.</translation>
 <translation id="5691772641933328258">Sõrmejälge ei tuntud ära</translation>
+<translation id="5693255400847650006">Mikrofon on kasutuses</translation>
 <translation id="570390244361237317">Kõik rakendused, kõigile rakendustele juurdepääsemiseks navigeerige nooleklahvidega</translation>
 <translation id="5707775774148071965">Teie seade toetab kiiremat andmesidet kui teie kaabel. Seadme toimivus võib olla piiratud.</translation>
 <translation id="5710450975648804523">Režiim Mitte segada on sees</translation>
@@ -982,6 +984,7 @@
 <translation id="6723839937902243910">Toide</translation>
 <translation id="6727969043791803658">Ühendatud, <ph name="BATTERY_PERCENTAGE" />% akut</translation>
 <translation id="6732800389263199929">+<ph name="COUNT" /></translation>
+<translation id="6737983188036277605">Kaamera ja mikrofon on kasutuses</translation>
 <translation id="6739144137573853180">AVAGE SEADED</translation>
 <translation id="6751052314767925245">Jõustas administraator</translation>
 <translation id="6751826523481687655">Toimivuse jälgimine on sisse lülitatud</translation>
@@ -1163,6 +1166,7 @@
 <translation id="7842569679327885685">Hoiatus: katseline funktsioon</translation>
 <translation id="7846634333498149051">Klaviatuur</translation>
 <translation id="7848989271541991537">Teisaldatud lehele <ph name="PAGE_NUMBER" />, reale <ph name="ROW_NUMBER" />, veergu <ph name="COLUMN_NUMBER" />.</translation>
+<translation id="7851768487828137624">Kanaarilind</translation>
 <translation id="7860671499921112077">Ülevaate avamiseks pühkige kolme sõrmega üles</translation>
 <translation id="7866482334467279021">sisse</translation>
 <translation id="7868900307798234037">Sõrmejäljega avamine</translation>
@@ -1242,6 +1246,7 @@
 <translation id="828708037801473432">Väljas</translation>
 <translation id="8297006494302853456">Nõrk</translation>
 <translation id="8308637677604853869">Eelmine menüü</translation>
+<translation id="830868413617744215">Beeta</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">Valitud on aken <ph name="WINDOW_TITLE" /></translation>
 <translation id="8351131234907093545">Märkme loomine</translation>
diff --git a/ash/strings/ash_strings_eu.xtb b/ash/strings/ash_strings_eu.xtb
index 83952bc0..644909b 100644
--- a/ash/strings/ash_strings_eu.xtb
+++ b/ash/strings/ash_strings_eu.xtb
@@ -306,6 +306,7 @@
 <translation id="2805756323405976993">Aplikazioak</translation>
 <translation id="2814448776515246190">Pantaila-kaptura partziala</translation>
 <translation id="2819276065543622893">Saioa amaituko zaizu.</translation>
+<translation id="2822551631199737692">Kamera abian da</translation>
 <translation id="2825224105325558319"><ph name="DISPLAY_NAME" /> pantailak ez du onartzen <ph name="SPECIFIED_RESOLUTION" /> bereizmena. <ph name="FALLBACK_RESOLUTION" /> ezarri da bereizmen gisa.</translation>
 <translation id="2825619548187458965">Apala</translation>
 <translation id="2831035692318564937">Aktibatuta egunsentira arte</translation>
@@ -808,6 +809,7 @@
 <translation id="5682642926269496722">Google-ren Laguntzailea ez dago erabilgarri oraingo erabiltzaile-kontuan.</translation>
 <translation id="5689633613396158040">Gaueko argia eginbideari esker, ez zaizu egingo horren nekagarria argi gutxiko inguruetan pantailari begira egotea. Sakatu hau Gaueko argia aktibatzeko ordua aldatzeko, edo aukera hori erabat desaktibatzeko.</translation>
 <translation id="5691772641933328258">Ez da ezagutu hatz-marka</translation>
+<translation id="5693255400847650006">Mikrofonoa abian da</translation>
 <translation id="570390244361237317">Aplikazio guztiak, erabili gezi-teklak aplikazio guztiak atzitzeko</translation>
 <translation id="5707775774148071965">Gailuak kableak baino bizkorrago transferi ditzake datuak. Baliteke gailuaren errendimendua mugatuta egotea.</translation>
 <translation id="5710450975648804523">Aktibatuta dago ez molestatzeko modua</translation>
@@ -982,6 +984,7 @@
 <translation id="6723839937902243910">Bateria</translation>
 <translation id="6727969043791803658">Konektatuta; bateria: % <ph name="BATTERY_PERCENTAGE" /></translation>
 <translation id="6732800389263199929">Beste <ph name="COUNT" /></translation>
+<translation id="6737983188036277605">Kamera eta mikrofonoa abian dira</translation>
 <translation id="6739144137573853180">JOAN EZARPENETARA</translation>
 <translation id="6751052314767925245">Administratzaileak ezarri du</translation>
 <translation id="6751826523481687655">Aktibatuta dago funtzionamenduaren jarraipena egiteko aukera</translation>
@@ -1241,6 +1244,7 @@
 <translation id="828708037801473432">Desaktibatuta</translation>
 <translation id="8297006494302853456">Ahula</translation>
 <translation id="8308637677604853869">Aurreko menua</translation>
+<translation id="830868413617744215">Beta</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363"><ph name="WINDOW_TITLE" /> leihoa dago hautatuta</translation>
 <translation id="8351131234907093545">Sortu oharra</translation>
diff --git a/ash/strings/ash_strings_fa.xtb b/ash/strings/ash_strings_fa.xtb
index 4ec977a0..71ff360 100644
--- a/ash/strings/ash_strings_fa.xtb
+++ b/ash/strings/ash_strings_fa.xtb
@@ -27,6 +27,7 @@
 <translation id="1111021433905331574">می‌توانید رنگ نور پس‌زمینه صفحه‌کلید را در اینجا تغییر دهید: «تنظیمات &gt; <ph name="APP_TITLE" />»</translation>
 <translation id="112308213915226829">پنهان کردن خودکار قفسه</translation>
 <translation id="1142002900084379065">عکس‌های اخیر</translation>
+<translation id="114451698114044150">«بزرگ‌نمایی خودکار» روشن است.</translation>
 <translation id="1148499908455722006">باز کردن کادر گفتگوی اطلاعات برای <ph name="USER_NAME" /></translation>
 <translation id="1150989369772528668">تقویم</translation>
 <translation id="1153356358378277386">دستگاه‌های مرتبط‌شده</translation>
@@ -449,6 +450,7 @@
 <translation id="3593039967545720377">‏برای دسترسی به سابقه بریده‌دان، <ph name="SHORTCUT_KEY_NAME" /> + V را فشار دهید تا بریده‌دان را مشاهده کنید. برای شروع کار، موردی را کپی کنید.</translation>
 <translation id="3593646411856133110">برای دیدن برنامه‌های باز، تند به‌بالا بکشید و نگه دارید</translation>
 <translation id="3595596368722241419">باتری پر است</translation>
+<translation id="3600061223661453002">خاموش</translation>
 <translation id="3604801046548457007">میز <ph name="DESK_TITILE" /> ایجاد شد</translation>
 <translation id="3606978283550408104">نمایشگر بریل متصل شد.</translation>
 <translation id="3615926715408477684">فعال کردن داده تلفن همراه، بلوتوث را فعال می‌کند</translation>
@@ -967,6 +969,7 @@
 <translation id="6637729079642709226">تغییر زمان</translation>
 <translation id="6641720045729354415">روشن/خاموش کردن «زیرنویس ناشنوایان زنده». <ph name="STATE_TEXT" /></translation>
 <translation id="6643169293433369663">واگرد کردن مرتب‌سازی براساس نام</translation>
+<translation id="6649641931981131786">دوربین را طوری تنظیم کنید که در مرکز صفحه قرار گیرید.</translation>
 <translation id="6650072551060208490"><ph name="ORIGIN_NAME" /> می‌خواهد تأیید کند این فرد شما هستید</translation>
 <translation id="6650933572246256093">دستگاه بلوتوث «<ph name="DEVICE_NAME" />» برای مرتبط‌سازی به مجوز نیاز دارد. لطفاً این گذرکلید را در آن دستگاه وارد کنید: <ph name="PASSKEY" /></translation>
 <translation id="6657585470893396449">گذرواژه</translation>
@@ -1008,6 +1011,7 @@
 <translation id="685782768769951078">{NUM_DIGITS,plural, =1{یک رقم باقی‌مانده است}one{# رقم باقی‌مانده است}other{# رقم باقی‌مانده است}}</translation>
 <translation id="6867938213751067702">بارگیری <ph name="FILENAME" /> موقتاً متوقف شد</translation>
 <translation id="6878400149835617132">میان‌بر خاموش شد</translation>
+<translation id="6878709625737492815">«بزرگ‌نمایی خودکار» خاموش است.</translation>
 <translation id="6884665277231944629">برگشتن به امروز</translation>
 <translation id="6886172995547742638">‏ممکن است <ph name="DEVICE_TYPE" /> شما عملکرد ضعیف‌تری را تجربه کند. از آداپتور برق USB-C بالاتر یا <ph name="PREFERRED_MINIMUM_POWER" /> وات تأییدشده‌ای استفاده کنید.</translation>
 <translation id="688631446150864480">برای جابه‌جایی بین پنجره‌ها، کلید جهت‌نمای پایین را فشار دهید</translation>
@@ -1087,6 +1091,7 @@
 <translation id="7378203170292176219">برای انتخاب ناحیه ضبط، بکشید</translation>
 <translation id="7378594059915113390">کنترل‌های رسانه</translation>
 <translation id="7378889811480108604">حالت «بهینه‌سازی باتری» خاموش است</translation>
+<translation id="7382680553121047388">روشن</translation>
 <translation id="7384028040782072252">برای تغییر ترتیب برنامه‌ها، جایی کلیک راست کنید</translation>
 <translation id="7392563512730092880">همیشه می‌توانید راه‌اندازی را در زمان دیگری ازطریق «تنظیمات» انجام دهید.</translation>
 <translation id="7405710164030118432">‏برای باز کردن قفل دستگاه، کد دسترسی ولی را برای Family Link وارد کنید</translation>
@@ -1165,11 +1170,13 @@
 <translation id="7842569679327885685">هشدار: ویژگی آزمایشی</translation>
 <translation id="7846634333498149051">صفحه‌کلید</translation>
 <translation id="7848989271541991537">به صفحه <ph name="PAGE_NUMBER" />، ردیف <ph name="ROW_NUMBER" />، ستون <ph name="COLUMN_NUMBER" />.منتقل شد.</translation>
+<translation id="7851768487828137624">قناری</translation>
 <translation id="7860671499921112077">برای ورود به «نمای کلی»، با سه انگشت تند به بالا بکشید</translation>
 <translation id="7866482334467279021">روشن</translation>
 <translation id="7868900307798234037">درحال باز کردن قفل با اثر انگشت</translation>
 <translation id="7872195908557044066">سرپرستتان درحال بازنشاندن سیم‌کارت داخلی شما است. چند دقیقه صبر کنید.</translation>
 <translation id="7872786842639831132">خاموش</translation>
+<translation id="7875280185395705476">بزرگ‌نمایی خودکار</translation>
 <translation id="7875575368831396199">ظاهراً بلوتوث در <ph name="DEVICE_TYPE" /> شما خاموش است. لطفاً برای استفاده از «مرکز کنترل تلفن»، بلوتوث را روشن کنید.</translation>
 <translation id="7877557217297072640">{0,plural, =0{اکنون دستگاه را به نسخه قبلی تغییر دهید}=1{تا یک ثانیه دیگر دستگاه را به نسخه قبلی تغییر دهید}one{تا # ثانیه دیگر دستگاه را به نسخه قبلی تغییر دهید}other{تا # ثانیه دیگر دستگاه را به نسخه قبلی تغییر دهید}}</translation>
 <translation id="7886169021410746335">تنظیمات حریم خصوصی را تنظیم کند</translation>
@@ -1244,6 +1251,7 @@
 <translation id="828708037801473432">خاموش</translation>
 <translation id="8297006494302853456">ضعیف</translation>
 <translation id="8308637677604853869">منوی قبلی</translation>
+<translation id="830868413617744215">بتا</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">پنجره <ph name="WINDOW_TITLE" /> انتخاب شد</translation>
 <translation id="8351131234907093545">یادداشت ایجاد کنید</translation>
@@ -1289,6 +1297,7 @@
 <translation id="856298576161209842"><ph name="MANAGER" /> توصیه می‌کند <ph name="DEVICE_TYPE" /> را به‌روزرسانی کنید</translation>
 <translation id="8563862697512465947">تنظیمات اعلام</translation>
 <translation id="857201607579416096">منو به گوشه چپ پایین صفحه منتقل شد.</translation>
+<translation id="8576288697319745668">روشن/ خاموش کردن بزرگ‌نمایی خودکار. <ph name="STATE_TEXT" /></translation>
 <translation id="8594115950068821369">-<ph name="FORMATTED_TIME" /></translation>
 <translation id="8598235756057743477">مرتب‌سازی برنامه‌ها براساس نام یا رنگ</translation>
 <translation id="8614517853887502247">اعلان‌های <ph name="APP_1_TITLE" /> و <ph name="APP_2_TITLE" /> پنهان شده است زیرا «محافظت دربرابر مشاهده» روشن است</translation>
diff --git a/ash/strings/ash_strings_fi.xtb b/ash/strings/ash_strings_fi.xtb
index 0d08365..2f43dbf 100644
--- a/ash/strings/ash_strings_fi.xtb
+++ b/ash/strings/ash_strings_fi.xtb
@@ -306,6 +306,7 @@
 <translation id="2805756323405976993">Sovellukset</translation>
 <translation id="2814448776515246190">Osittainen kuvakaappaus</translation>
 <translation id="2819276065543622893">Sinut kirjataan ulos nyt.</translation>
+<translation id="2822551631199737692">Kamera käytössä</translation>
 <translation id="2825224105325558319"><ph name="DISPLAY_NAME" /> ei tue resoluutiota <ph name="SPECIFIED_RESOLUTION" />. Resoluutioksi vaihdettiin <ph name="FALLBACK_RESOLUTION" />.</translation>
 <translation id="2825619548187458965">Hylly</translation>
 <translation id="2831035692318564937">Päällä auringonnousuun asti</translation>
@@ -807,6 +808,7 @@
 <translation id="5682642926269496722">Google Assistantia ei voi käyttää nykyisellä käyttäjätilillä.</translation>
 <translation id="5689633613396158040">Yövalo helpottaa näytön katsomista ja lukemista hämärässä. Kosketa muuttaaksesi Yövalon syttymisaikaa tai poista se kokonaan käytöstä.</translation>
 <translation id="5691772641933328258">Sormenjälkeä ei tunnistettu</translation>
+<translation id="5693255400847650006">Mikrofoni käytössä</translation>
 <translation id="570390244361237317">Kaikki sovellukset, siirry sovellusten välillä nuolinäppämillä</translation>
 <translation id="5707775774148071965">Laitteesi tukee nopeampaa tiedonsiirtoa kuin johto</translation>
 <translation id="5710450975648804523">Älä häiritse -tila on päällä</translation>
@@ -981,6 +983,7 @@
 <translation id="6723839937902243910">Virta</translation>
 <translation id="6727969043791803658">Yhdistetty, akun taso <ph name="BATTERY_PERCENTAGE" /> %</translation>
 <translation id="6732800389263199929">+<ph name="COUNT" /></translation>
+<translation id="6737983188036277605">Kamera ja mikrofoni käytössä</translation>
 <translation id="6739144137573853180">AVAA ASETUKSET</translation>
 <translation id="6751052314767925245">Järjestelmänvalvojan käyttämä</translation>
 <translation id="6751826523481687655">Tehokkuuden seuranta on käytössä</translation>
@@ -1162,6 +1165,7 @@
 <translation id="7842569679327885685">Varoitus: Kokeellinen ominaisuus</translation>
 <translation id="7846634333498149051">Näppäimistö</translation>
 <translation id="7848989271541991537">Siirretty, nyt sivulla <ph name="PAGE_NUMBER" />, rivillä <ph name="ROW_NUMBER" />, sarakkeessa <ph name="COLUMN_NUMBER" />.</translation>
+<translation id="7851768487828137624">Canary</translation>
 <translation id="7860671499921112077">Siirry Viimeisimmät-osioon pyyhkäisemällä kolmella sormella ylöspäin</translation>
 <translation id="7866482334467279021">päälle</translation>
 <translation id="7868900307798234037">Avataan sormenjäljellä</translation>
@@ -1241,6 +1245,7 @@
 <translation id="828708037801473432">Poissa päältä</translation>
 <translation id="8297006494302853456">Heikko</translation>
 <translation id="8308637677604853869">Edellinen valikko</translation>
+<translation id="830868413617744215">Beta</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363"><ph name="WINDOW_TITLE" /> ‑ikkuna valittu</translation>
 <translation id="8351131234907093545">Luo muistiinpano</translation>
diff --git a/ash/strings/ash_strings_fil.xtb b/ash/strings/ash_strings_fil.xtb
index fc3bf5a..4311ddb 100644
--- a/ash/strings/ash_strings_fil.xtb
+++ b/ash/strings/ash_strings_fil.xtb
@@ -1171,6 +1171,7 @@
 <translation id="7842569679327885685">Babala: Pang-eskperimentong feature</translation>
 <translation id="7846634333498149051">Keyboard</translation>
 <translation id="7848989271541991537">Inilipat sa Page <ph name="PAGE_NUMBER" />, row <ph name="ROW_NUMBER" />, column <ph name="COLUMN_NUMBER" />.</translation>
+<translation id="7851768487828137624">Canary</translation>
 <translation id="7860671499921112077">Mag-swipe pataas gamit ang tatlong daliri para makapasok sa Overview</translation>
 <translation id="7866482334467279021">naka-on</translation>
 <translation id="7868900307798234037">Ina-unlock gamit ang fingerprint</translation>
@@ -1251,6 +1252,7 @@
 <translation id="828708037801473432">Naka-off</translation>
 <translation id="8297006494302853456">Mahina</translation>
 <translation id="8308637677604853869">Nakaraang menu</translation>
+<translation id="830868413617744215">Beta</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">Napili ang window ng <ph name="WINDOW_TITLE" /></translation>
 <translation id="8351131234907093545">Gumawa ng tala</translation>
diff --git a/ash/strings/ash_strings_fr-CA.xtb b/ash/strings/ash_strings_fr-CA.xtb
index 92bd1d4..f46d239 100644
--- a/ash/strings/ash_strings_fr-CA.xtb
+++ b/ash/strings/ash_strings_fr-CA.xtb
@@ -1241,6 +1241,7 @@
 <translation id="828708037801473432">Désactivé</translation>
 <translation id="8297006494302853456">Faible</translation>
 <translation id="8308637677604853869">Menu précédent</translation>
+<translation id="830868413617744215">Bêta</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">Fenêtre <ph name="WINDOW_TITLE" /> sélectionnée</translation>
 <translation id="8351131234907093545">Créer une note</translation>
diff --git a/ash/strings/ash_strings_fr.xtb b/ash/strings/ash_strings_fr.xtb
index 629e6abc..57491b6 100644
--- a/ash/strings/ash_strings_fr.xtb
+++ b/ash/strings/ash_strings_fr.xtb
@@ -1162,6 +1162,7 @@
 <translation id="7842569679327885685">Avertissement : Fonctionnalité expérimentale</translation>
 <translation id="7846634333498149051">Clavier</translation>
 <translation id="7848989271541991537">Application déplacée vers la page <ph name="PAGE_NUMBER" />, ligne <ph name="ROW_NUMBER" />, colonne <ph name="COLUMN_NUMBER" />.</translation>
+<translation id="7851768487828137624">Canary</translation>
 <translation id="7860671499921112077">Balayez l'écran vers le haut avec trois doigts pour accéder à l'aperçu</translation>
 <translation id="7866482334467279021">activé</translation>
 <translation id="7868900307798234037">Déverrouillage en cours avec votre empreinte digitale</translation>
@@ -1241,6 +1242,7 @@
 <translation id="828708037801473432">Désactivé</translation>
 <translation id="8297006494302853456">Faible</translation>
 <translation id="8308637677604853869">Menu précédent</translation>
+<translation id="830868413617744215">Bêta</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">Fenêtre <ph name="WINDOW_TITLE" /> sélectionnée</translation>
 <translation id="8351131234907093545">Créer une note</translation>
diff --git a/ash/strings/ash_strings_gl.xtb b/ash/strings/ash_strings_gl.xtb
index 563b274..953d0f7b 100644
--- a/ash/strings/ash_strings_gl.xtb
+++ b/ash/strings/ash_strings_gl.xtb
@@ -1242,6 +1242,7 @@
 <translation id="828708037801473432">Desactivada</translation>
 <translation id="8297006494302853456">Feble</translation>
 <translation id="8308637677604853869">Menú anterior</translation>
+<translation id="830868413617744215">Beta</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">Ventá seleccionada: <ph name="WINDOW_TITLE" /></translation>
 <translation id="8351131234907093545">Crear nota</translation>
diff --git a/ash/strings/ash_strings_gu.xtb b/ash/strings/ash_strings_gu.xtb
index d8fb7de1..37496778 100644
--- a/ash/strings/ash_strings_gu.xtb
+++ b/ash/strings/ash_strings_gu.xtb
@@ -306,6 +306,7 @@
 <translation id="2805756323405976993">ઍપ</translation>
 <translation id="2814448776515246190">આંશિક સ્ક્રીન કૅપ્ચર</translation>
 <translation id="2819276065543622893">તમે હવે સાઇન આઉટ થશો.</translation>
+<translation id="2822551631199737692">કૅમેરાનો ઉપયોગમાં છે</translation>
 <translation id="2825224105325558319"><ph name="DISPLAY_NAME" />, <ph name="SPECIFIED_RESOLUTION" />ને સપોર્ટ આપતું નથી. રિઝોલ્યુશનને <ph name="FALLBACK_RESOLUTION" /> પર બદલવામાં આવ્યું હતું.</translation>
 <translation id="2825619548187458965">શેલ્ફ</translation>
 <translation id="2831035692318564937">સૂર્યોદય સુધી ચાલુ રાખો</translation>
@@ -807,6 +808,7 @@
 <translation id="5682642926269496722">હાલના વપરાશકર્તા એકાઉન્ટ માટે Google Assistant ઉપલબ્ધ નથી.</translation>
 <translation id="5689633613396158040">રાત્રિ પ્રકાશથી તમે સરળતાથી તમારી સ્ક્રીનને જોઈ શકો છો અથવા ઓછા પ્રકાશમાં વાંચી શકો છો. રાત્રિ પ્રકાશ ચાલુ થવાનો સમય બદલવા અથવા તેને સંપૂર્ણપણે બંધ કરવા ટૅપ કરો.</translation>
 <translation id="5691772641933328258">ફિંગરપ્રિન્ટ ઓળખી શકાઈ નથી</translation>
+<translation id="5693255400847650006">માઇક્રોફોન ઉપયોગમાં છે</translation>
 <translation id="570390244361237317">બધી ઍપ, બધી ઍપ ઍક્સેસ કરવા માટે ઍરો કી વડે નૅવિગેટ કરો</translation>
 <translation id="5707775774148071965">તમારા કેબલ કરતાં તમારું ડિવાઇસ ડેટાના વધુ ઊંચા દરને સપોર્ટ આપે છે. ડિવાઇસનું કાર્યપ્રદર્શન મર્યાદિત હોઈ શકે છે.</translation>
 <translation id="5710450975648804523">ખલેલ પાડશો નહીં ચાલુ છે</translation>
@@ -981,6 +983,7 @@
 <translation id="6723839937902243910">પાવર</translation>
 <translation id="6727969043791803658">કનેક્ટ થયેલ, બૅટરી <ph name="BATTERY_PERCENTAGE" />%</translation>
 <translation id="6732800389263199929">+<ph name="COUNT" /></translation>
+<translation id="6737983188036277605">કૅમેરા અને માઇક્રોફોન ઉપયોગમાં છે</translation>
 <translation id="6739144137573853180">સેટિંગ પર જાઓ</translation>
 <translation id="6751052314767925245">તમારા વ્યવસ્થાપક દ્વારા લાગુ કરેલી</translation>
 <translation id="6751826523481687655">કાર્યપ્રદર્શનની નોંધ રાખવાનું ચાલુ કરેલું છે</translation>
@@ -1162,6 +1165,7 @@
 <translation id="7842569679327885685">ચેતવણી: પ્રાયોગિક સુવિધા</translation>
 <translation id="7846634333498149051">કીબોર્ડ</translation>
 <translation id="7848989271541991537">પેજ <ph name="PAGE_NUMBER" />, પંક્તિ <ph name="ROW_NUMBER" />, કૉલમ <ph name="COLUMN_NUMBER" /> પર ખસેડી.</translation>
+<translation id="7851768487828137624">કૅનેરી</translation>
 <translation id="7860671499921112077">ઓવરવ્યૂમાં દાખલ થવા માટે, ત્રણ આંગળી વડે ઉપરની તરફ સ્વાઇપ કરો</translation>
 <translation id="7866482334467279021">ચાલુ</translation>
 <translation id="7868900307798234037">ફિંગરપ્રિન્ટથી અનલૉક કરી રહ્યાં છે</translation>
@@ -1241,6 +1245,7 @@
 <translation id="828708037801473432">બંધ</translation>
 <translation id="8297006494302853456">નબળું</translation>
 <translation id="8308637677604853869">પાછલું મેનૂ</translation>
+<translation id="830868413617744215">બીટા</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363"><ph name="WINDOW_TITLE" /> વિન્ડો પસંદ કરી</translation>
 <translation id="8351131234907093545">નોંધ બનાવો</translation>
diff --git a/ash/strings/ash_strings_hi.xtb b/ash/strings/ash_strings_hi.xtb
index dcfd205..b5b5f53 100644
--- a/ash/strings/ash_strings_hi.xtb
+++ b/ash/strings/ash_strings_hi.xtb
@@ -1163,6 +1163,7 @@
 <translation id="7842569679327885685">चेतावनी: यह फ़ीचर प्रयोग के लिए है</translation>
 <translation id="7846634333498149051">कीबोर्ड</translation>
 <translation id="7848989271541991537">पेज <ph name="PAGE_NUMBER" />, लाइन <ph name="ROW_NUMBER" />, कॉलम <ph name="COLUMN_NUMBER" /> पर जाएं.</translation>
+<translation id="7851768487828137624">कैनरी</translation>
 <translation id="7860671499921112077">खास जानकारी देखने के लिए, स्क्रीन पर तीन उंगलियों से ऊपर की ओर स्वाइप करें</translation>
 <translation id="7866482334467279021">चालू</translation>
 <translation id="7868900307798234037">फ़िंगरप्रिंट से अनलॉक करना</translation>
@@ -1242,6 +1243,7 @@
 <translation id="828708037801473432">बंद है</translation>
 <translation id="8297006494302853456">कमज़ोर</translation>
 <translation id="8308637677604853869">पिछला मेन्यू</translation>
+<translation id="830868413617744215">बीटा</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363"><ph name="WINDOW_TITLE" /> विंडो को चुना गया है</translation>
 <translation id="8351131234907093545">नोट बनाएं</translation>
diff --git a/ash/strings/ash_strings_hr.xtb b/ash/strings/ash_strings_hr.xtb
index e8e22374..7c7ad43f 100644
--- a/ash/strings/ash_strings_hr.xtb
+++ b/ash/strings/ash_strings_hr.xtb
@@ -1170,6 +1170,7 @@
 <translation id="7842569679327885685">Upozorenje: eksperimentalna značajka</translation>
 <translation id="7846634333498149051">Tipkovnica</translation>
 <translation id="7848989271541991537">Premješteno na <ph name="PAGE_NUMBER" />. stranicu, redak <ph name="ROW_NUMBER" />, stupac <ph name="COLUMN_NUMBER" />.</translation>
+<translation id="7851768487828137624">Canary</translation>
 <translation id="7860671499921112077">Prijeđite s tri prsta prema gore da biste otvorili Pregled</translation>
 <translation id="7866482334467279021">uključeno</translation>
 <translation id="7868900307798234037">Otključavanje otiskom prsta</translation>
@@ -1250,6 +1251,7 @@
 <translation id="828708037801473432">Isključeno</translation>
 <translation id="8297006494302853456">Slab</translation>
 <translation id="8308637677604853869">Prethodni izbornik</translation>
+<translation id="830868413617744215">Beta</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">Odabran je prozor <ph name="WINDOW_TITLE" /></translation>
 <translation id="8351131234907093545">Izrada bilješke</translation>
diff --git a/ash/strings/ash_strings_hu.xtb b/ash/strings/ash_strings_hu.xtb
index 25ccec57..d14fc648 100644
--- a/ash/strings/ash_strings_hu.xtb
+++ b/ash/strings/ash_strings_hu.xtb
@@ -1171,6 +1171,7 @@
 <translation id="7842569679327885685">Figyelem! Kísérleti funkció</translation>
 <translation id="7846634333498149051">Billentyűzet</translation>
 <translation id="7848989271541991537">Áthelyezve ide: <ph name="PAGE_NUMBER" />. oldal, <ph name="ROW_NUMBER" />. sor, <ph name="COLUMN_NUMBER" />. oszlop.</translation>
+<translation id="7851768487828137624">Canary</translation>
 <translation id="7860671499921112077">Az Áttekintés nézetbe való belépéshez csúsztasson felfelé három ujjával</translation>
 <translation id="7866482334467279021">be</translation>
 <translation id="7868900307798234037">Feloldás ujjlenyomattal</translation>
@@ -1251,6 +1252,7 @@
 <translation id="828708037801473432">Ki</translation>
 <translation id="8297006494302853456">Gyenge</translation>
 <translation id="8308637677604853869">Előző menü</translation>
+<translation id="830868413617744215">Béta</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">A következő ablak van kiválasztva: <ph name="WINDOW_TITLE" /></translation>
 <translation id="8351131234907093545">Jegyzet létrehozása</translation>
diff --git a/ash/strings/ash_strings_hy.xtb b/ash/strings/ash_strings_hy.xtb
index 969d296..e71ba18af 100644
--- a/ash/strings/ash_strings_hy.xtb
+++ b/ash/strings/ash_strings_hy.xtb
@@ -1243,6 +1243,7 @@
 <translation id="828708037801473432">Անջատված է</translation>
 <translation id="8297006494302853456">Թույլ</translation>
 <translation id="8308637677604853869">Նախորդ ցանկը</translation>
+<translation id="830868413617744215">Բետա</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">Ընտրված է «<ph name="WINDOW_TITLE" />» պատուհանը</translation>
 <translation id="8351131234907093545">Գրառման ստեղծում</translation>
diff --git a/ash/strings/ash_strings_id.xtb b/ash/strings/ash_strings_id.xtb
index d2404fc5..7099f223 100644
--- a/ash/strings/ash_strings_id.xtb
+++ b/ash/strings/ash_strings_id.xtb
@@ -1165,6 +1165,7 @@
 <translation id="7842569679327885685">Peringatan: Fitur eksperimental</translation>
 <translation id="7846634333498149051">Keyboard</translation>
 <translation id="7848989271541991537">Dipindahkan ke Halaman <ph name="PAGE_NUMBER" />, baris <ph name="ROW_NUMBER" />, kolom <ph name="COLUMN_NUMBER" />.</translation>
+<translation id="7851768487828137624">Canary</translation>
 <translation id="7860671499921112077">Geser ke atas dengan tiga jari untuk masuk ke Ringkasan</translation>
 <translation id="7866482334467279021">aktif</translation>
 <translation id="7868900307798234037">Membuka kunci dengan sidik jari</translation>
@@ -1244,6 +1245,7 @@
 <translation id="828708037801473432">Nonaktif</translation>
 <translation id="8297006494302853456">Lemah</translation>
 <translation id="8308637677604853869">Menu sebelumnya</translation>
+<translation id="830868413617744215">Beta</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">Jendela <ph name="WINDOW_TITLE" /> dipilih</translation>
 <translation id="8351131234907093545">Buat catatan</translation>
diff --git a/ash/strings/ash_strings_is.xtb b/ash/strings/ash_strings_is.xtb
index bb13e753..2c00cb1b29 100644
--- a/ash/strings/ash_strings_is.xtb
+++ b/ash/strings/ash_strings_is.xtb
@@ -1244,6 +1244,7 @@
 <translation id="828708037801473432">Slökkt</translation>
 <translation id="8297006494302853456">Veikt</translation>
 <translation id="8308637677604853869">Fyrri valmynd</translation>
+<translation id="830868413617744215">Beta</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363"><ph name="WINDOW_TITLE" /> gluggi valinn</translation>
 <translation id="8351131234907093545">Búa til glósu</translation>
diff --git a/ash/strings/ash_strings_it.xtb b/ash/strings/ash_strings_it.xtb
index 095f1151..5e66b852 100644
--- a/ash/strings/ash_strings_it.xtb
+++ b/ash/strings/ash_strings_it.xtb
@@ -27,6 +27,7 @@
 <translation id="1111021433905331574">Puoi cambiare il colore della retroilluminazione della tastiera in Impostazioni &gt; <ph name="APP_TITLE" /></translation>
 <translation id="112308213915226829">Nascondi automaticamente barra delle app</translation>
 <translation id="1142002900084379065">Foto recenti</translation>
+<translation id="114451698114044150">Lo zoom automatico è attivo.</translation>
 <translation id="1148499908455722006">Apri la finestra di dialogo delle informazioni per <ph name="USER_NAME" /></translation>
 <translation id="1150989369772528668">Calendario</translation>
 <translation id="1153356358378277386">Dispositivi accoppiati</translation>
@@ -449,6 +450,7 @@
 <translation id="3593039967545720377">Accedi alla cronologia degli appunti premendo <ph name="SHORTCUT_KEY_NAME" /> + V per visualizzare gli appunti. Copia un elemento per iniziare.</translation>
 <translation id="3593646411856133110">Scorri verso l'alto e tieni premuto per vedere le app aperte</translation>
 <translation id="3595596368722241419">Batteria carica</translation>
+<translation id="3600061223661453002">Off</translation>
 <translation id="3604801046548457007">Scrivania <ph name="DESK_TITILE" /> creata</translation>
 <translation id="3606978283550408104">Display Braille collegato.</translation>
 <translation id="3615926715408477684">Se attivi i dati mobili verrà attivato anche il Bluetooth</translation>
@@ -968,6 +970,7 @@
 <translation id="6637729079642709226">Modifica tempo</translation>
 <translation id="6641720045729354415">Attiva o disattiva Sottotitoli in tempo reale. <ph name="STATE_TEXT" /></translation>
 <translation id="6643169293433369663">Annulla l'ordinamento per nome</translation>
+<translation id="6649641931981131786">Regola la fotocamera per metterti al centro dello schermo.</translation>
 <translation id="6650072551060208490"><ph name="ORIGIN_NAME" /> vorrebbe verificare la tua identità</translation>
 <translation id="6650933572246256093">Il dispositivo Bluetooth "<ph name="DEVICE_NAME" />" chiede l'autorizzazione per essere accoppiato. Inserisci questa passkey sul dispositivo: <ph name="PASSKEY" /></translation>
 <translation id="6657585470893396449">Password</translation>
@@ -1009,6 +1012,7 @@
 <translation id="685782768769951078">{NUM_DIGITS,plural, =1{Manca una cifra}other{Mancano # cifre}}</translation>
 <translation id="6867938213751067702">Download di <ph name="FILENAME" /> sospeso</translation>
 <translation id="6878400149835617132">Scorciatoia disattivata</translation>
+<translation id="6878709625737492815">Lo zoom automatico non è attivo.</translation>
 <translation id="6884665277231944629">Torna a oggi</translation>
 <translation id="6886172995547742638">Il tuo <ph name="DEVICE_TYPE" /> potrebbe offrire prestazioni inferiori. Usa un alimentatore USB-C certificato da almeno <ph name="PREFERRED_MINIMUM_POWER" /> W.</translation>
 <translation id="688631446150864480">Premi il tasto Freccia giù per cambiare finestra</translation>
@@ -1088,6 +1092,7 @@
 <translation id="7378203170292176219">Trascina per selezionare l'area da registrare</translation>
 <translation id="7378594059915113390">Controlli multimediali</translation>
 <translation id="7378889811480108604">Modalità risparmio energetico non attiva</translation>
+<translation id="7382680553121047388">On</translation>
 <translation id="7384028040782072252">Fai clic con il tasto destro del mouse su un punto qualsiasi per riordinare le app</translation>
 <translation id="7392563512730092880">Puoi sempre effettuare la configurazione in un secondo momento dalle Impostazioni.</translation>
 <translation id="7405710164030118432">Per sbloccare il dispositivo, inserisci il codice di accesso genitore di Family Link</translation>
@@ -1166,11 +1171,13 @@
 <translation id="7842569679327885685">Avviso: funzione sperimentale</translation>
 <translation id="7846634333498149051">Tastiera</translation>
 <translation id="7848989271541991537">Spostata alla Pagina <ph name="PAGE_NUMBER" />, riga <ph name="ROW_NUMBER" />, colonna <ph name="COLUMN_NUMBER" />.</translation>
+<translation id="7851768487828137624">Canary</translation>
 <translation id="7860671499921112077">Scorri con tre dita verso l'alto per attivare la modalità Panoramica</translation>
 <translation id="7866482334467279021">on</translation>
 <translation id="7868900307798234037">Sblocco con l'impronta in corso</translation>
 <translation id="7872195908557044066">Il tuo amministratore sta reimpostando l'eSIM. Attendi qualche minuto.</translation>
 <translation id="7872786842639831132">Off</translation>
+<translation id="7875280185395705476">Zoom automat.</translation>
 <translation id="7875575368831396199">Sembra che il Bluetooth sia disattivato su <ph name="DEVICE_TYPE" />. Attiva il Bluetooth per utilizzare Phone Hub.</translation>
 <translation id="7877557217297072640">{0,plural, =0{Ripristina la versione precedente del dispositivo ora}=1{Ripristina la versione precedente del dispositivo entro 1 secondo}other{Ripristina la versione precedente del dispositivo entro # secondi}}</translation>
 <translation id="7886169021410746335">Modificare le impostazioni sulla privacy</translation>
@@ -1245,6 +1252,7 @@
 <translation id="828708037801473432">Off</translation>
 <translation id="8297006494302853456">Debole</translation>
 <translation id="8308637677604853869">Menu precedente</translation>
+<translation id="830868413617744215">Beta</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">Finestra <ph name="WINDOW_TITLE" /> selezionata</translation>
 <translation id="8351131234907093545">Crea nota</translation>
@@ -1290,6 +1298,7 @@
 <translation id="856298576161209842"><ph name="MANAGER" /> ti consiglia di aggiornare <ph name="DEVICE_TYPE" /></translation>
 <translation id="8563862697512465947">Impostazioni di notifica</translation>
 <translation id="857201607579416096">Menu spostato nell'angolo in basso a destra dello schermo.</translation>
+<translation id="8576288697319745668">Attiva/disattiva lo zoom automatico. <ph name="STATE_TEXT" /></translation>
 <translation id="8594115950068821369">-<ph name="FORMATTED_TIME" /></translation>
 <translation id="8598235756057743477">Ordina le app per nome o colore</translation>
 <translation id="8614517853887502247">Le notifiche delle app <ph name="APP_1_TITLE" /> e <ph name="APP_2_TITLE" /> sono nascoste perché è attiva la protezione di visualizzazione</translation>
diff --git a/ash/strings/ash_strings_iw.xtb b/ash/strings/ash_strings_iw.xtb
index b30dac78..4026cf905 100644
--- a/ash/strings/ash_strings_iw.xtb
+++ b/ash/strings/ash_strings_iw.xtb
@@ -1164,6 +1164,7 @@
 <translation id="7842569679327885685">אזהרה: תכונה ניסיונית</translation>
 <translation id="7846634333498149051">מקלדת</translation>
 <translation id="7848989271541991537">עברה לדף <ph name="PAGE_NUMBER" />, שורה <ph name="ROW_NUMBER" />, עמודה <ph name="COLUMN_NUMBER" />.</translation>
+<translation id="7851768487828137624">Canary</translation>
 <translation id="7860671499921112077">כדי להיכנס אל 'מסכים אחרונים', יש להחליק למעלה בעזרת שלוש אצבעות</translation>
 <translation id="7866482334467279021">פועלת</translation>
 <translation id="7868900307798234037">ביטול נעילה באמצעות טביעת אצבע</translation>
@@ -1243,6 +1244,7 @@
 <translation id="828708037801473432">כבויה</translation>
 <translation id="8297006494302853456">חלש</translation>
 <translation id="8308637677604853869">התפריט הקודם</translation>
+<translation id="830868413617744215">ביטא</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">נבחר החלון <ph name="WINDOW_TITLE" /></translation>
 <translation id="8351131234907093545">יצירת הערה</translation>
diff --git a/ash/strings/ash_strings_ja.xtb b/ash/strings/ash_strings_ja.xtb
index b03d4e6..f112574 100644
--- a/ash/strings/ash_strings_ja.xtb
+++ b/ash/strings/ash_strings_ja.xtb
@@ -1166,6 +1166,7 @@
 <translation id="7842569679327885685">警告: 試験運用版の機能</translation>
 <translation id="7846634333498149051">キーボード</translation>
 <translation id="7848989271541991537"><ph name="PAGE_NUMBER" /> ページの行 <ph name="ROW_NUMBER" />、列 <ph name="COLUMN_NUMBER" /> に移動しました。</translation>
+<translation id="7851768487828137624">Canary</translation>
 <translation id="7860671499921112077">概要モードに切り替えるには、3 本の指で上にスワイプします</translation>
 <translation id="7866482334467279021">オン</translation>
 <translation id="7868900307798234037">指紋によるロック解除</translation>
@@ -1245,6 +1246,7 @@
 <translation id="828708037801473432">オフ</translation>
 <translation id="8297006494302853456">弱い</translation>
 <translation id="8308637677604853869">前のメニュー</translation>
+<translation id="830868413617744215">Beta</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363"><ph name="WINDOW_TITLE" /> ウィンドウが選択されています</translation>
 <translation id="8351131234907093545">メモを作成</translation>
diff --git a/ash/strings/ash_strings_ka.xtb b/ash/strings/ash_strings_ka.xtb
index e316f424..8bb6910 100644
--- a/ash/strings/ash_strings_ka.xtb
+++ b/ash/strings/ash_strings_ka.xtb
@@ -1250,6 +1250,7 @@
 <translation id="828708037801473432">გამორთვა</translation>
 <translation id="8297006494302853456">სუსტი</translation>
 <translation id="8308637677604853869">წინა მენიუ</translation>
+<translation id="830868413617744215">ბეტა</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">არჩეულია ფანჯარა „<ph name="WINDOW_TITLE" />“</translation>
 <translation id="8351131234907093545">ჩანიშვნის შექმნა</translation>
diff --git a/ash/strings/ash_strings_kk.xtb b/ash/strings/ash_strings_kk.xtb
index 7016802..68f2352 100644
--- a/ash/strings/ash_strings_kk.xtb
+++ b/ash/strings/ash_strings_kk.xtb
@@ -1241,6 +1241,7 @@
 <translation id="828708037801473432">Өшірулі</translation>
 <translation id="8297006494302853456">Әлсіз</translation>
 <translation id="8308637677604853869">Алдыңғы мәзір</translation>
+<translation id="830868413617744215">Бета</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363"><ph name="WINDOW_TITLE" /> терезесі таңдалды</translation>
 <translation id="8351131234907093545">Ескертпе жасау</translation>
diff --git a/ash/strings/ash_strings_km.xtb b/ash/strings/ash_strings_km.xtb
index d2712a11..6c289be 100644
--- a/ash/strings/ash_strings_km.xtb
+++ b/ash/strings/ash_strings_km.xtb
@@ -1250,6 +1250,7 @@
 <translation id="828708037801473432">បិទ</translation>
 <translation id="8297006494302853456">ខ្សោយ</translation>
 <translation id="8308637677604853869">ម៉ឺនុយពីមុន</translation>
+<translation id="830868413617744215">បែតា</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">បានជ្រើសរើស​វិនដូ <ph name="WINDOW_TITLE" /></translation>
 <translation id="8351131234907093545">បង្កើត​កំណត់​ចំណាំ</translation>
diff --git a/ash/strings/ash_strings_kn.xtb b/ash/strings/ash_strings_kn.xtb
index cc4faa0..20056d1 100644
--- a/ash/strings/ash_strings_kn.xtb
+++ b/ash/strings/ash_strings_kn.xtb
@@ -1163,6 +1163,7 @@
 <translation id="7842569679327885685">ಎಚ್ಚರಿಕೆ: ಪ್ರಾಯೋಗಿಕ ವೈಶಿಷ್ಟ್ಯ</translation>
 <translation id="7846634333498149051">ಕೀಬೋರ್ಡ್</translation>
 <translation id="7848989271541991537">ಪುಟ <ph name="PAGE_NUMBER" />, ಸಾಲು <ph name="ROW_NUMBER" />, ಕಾಲಮ್ <ph name="COLUMN_NUMBER" />.</translation>
+<translation id="7851768487828137624">ಕ್ಯಾನರಿ</translation>
 <translation id="7860671499921112077">ಸಮಗ್ರ ನೋಟವನ್ನು ಪ್ರವೇಶಿಸಲು ಮೂರು ಬೆರಳುಗಳಿಂದ ಮೇಲಕ್ಕೆ ಸ್ವೈಪ್ ಮಾಡಿ.</translation>
 <translation id="7866482334467279021">ಆನ್‌</translation>
 <translation id="7868900307798234037">ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಮೂಲಕ ಅನ್‌ಲಾಕ್ ಮಾಡಲಾಗುತ್ತಿದೆ</translation>
@@ -1242,6 +1243,7 @@
 <translation id="828708037801473432">ಆಫ್</translation>
 <translation id="8297006494302853456">ದುರ್ಬಲ</translation>
 <translation id="8308637677604853869">ಹಿಂದಿನ ಮೆನು</translation>
+<translation id="830868413617744215">ಬೀಟಾ</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363"><ph name="WINDOW_TITLE" /> ವಿಂಡೋ ಆಯ್ಕೆಮಾಡಲಾಗಿದೆ</translation>
 <translation id="8351131234907093545">ಟಿಪ್ಪಣಿ ರಚಿಸಿ</translation>
diff --git a/ash/strings/ash_strings_ko.xtb b/ash/strings/ash_strings_ko.xtb
index a851cc0..f95fb3d5 100644
--- a/ash/strings/ash_strings_ko.xtb
+++ b/ash/strings/ash_strings_ko.xtb
@@ -1170,6 +1170,7 @@
 <translation id="7842569679327885685">경고: 실험 기능</translation>
 <translation id="7846634333498149051">키보드</translation>
 <translation id="7848989271541991537"><ph name="PAGE_NUMBER" />페이지, <ph name="ROW_NUMBER" />행, <ph name="COLUMN_NUMBER" />열로 이동합니다.</translation>
+<translation id="7851768487828137624">카나리아 </translation>
 <translation id="7860671499921112077">최근 사용을 시작하려면 세 손가락을 사용해 위로 스와이프하세요.</translation>
 <translation id="7866482334467279021">사용</translation>
 <translation id="7868900307798234037">지문으로 잠금 해제</translation>
@@ -1250,6 +1251,7 @@
 <translation id="828708037801473432">사용 안함</translation>
 <translation id="8297006494302853456">약함</translation>
 <translation id="8308637677604853869">이전 메뉴</translation>
+<translation id="830868413617744215">베타</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363"><ph name="WINDOW_TITLE" /> 창 선택됨</translation>
 <translation id="8351131234907093545">메모 만들기</translation>
diff --git a/ash/strings/ash_strings_ky.xtb b/ash/strings/ash_strings_ky.xtb
index 17ee904..7de34586 100644
--- a/ash/strings/ash_strings_ky.xtb
+++ b/ash/strings/ash_strings_ky.xtb
@@ -306,6 +306,7 @@
 <translation id="2805756323405976993">Колдонмолор</translation>
 <translation id="2814448776515246190">Сүрөткө жарым-жартылай тартып алуу</translation>
 <translation id="2819276065543622893">Сиз азыр чыгарыласыз.</translation>
+<translation id="2822551631199737692">Камера колдонулууда</translation>
 <translation id="2825224105325558319"><ph name="DISPLAY_NAME" /> <ph name="SPECIFIED_RESOLUTION" /> дааналыкты колдоого албайт. Дааналыгы төмөнкүгө өзгөртүлдү: <ph name="FALLBACK_RESOLUTION" />.</translation>
 <translation id="2825619548187458965">Текче</translation>
 <translation id="2831035692318564937">Күн чыкканга чейин күйүк</translation>
@@ -807,6 +808,7 @@
 <translation id="5682642926269496722">Google Жардамчы учурдагы колдонуучунун аккаунтунда жеткиликсиз.</translation>
 <translation id="5689633613396158040">Түнкү режим күңүрт жерде көзүңүзгө күч келтирбөөгө жардам берет. Түнкү режим күйгүзүлө турган убакытты өзгөртүү же биротоло өчүрүп салуу үчүн таптап коюңуз.</translation>
 <translation id="5691772641933328258">Манжа изи таанылган жок</translation>
+<translation id="5693255400847650006">Микрофон колдонулууда</translation>
 <translation id="570390244361237317">Бардык колдонмолор. Тизмеге өтүү үчүн жебе баскычтарын басыңыз</translation>
 <translation id="5707775774148071965">Түзмөктөгү маалыматты өткөрүү ылдамдыгы бул кабелден жогору. Түзмөктүн майнаптуулугу чектелиши мүмкүн.</translation>
 <translation id="5710450975648804523">"Тынчымды алба" режими күйүк</translation>
@@ -981,6 +983,7 @@
 <translation id="6723839937902243910">Кубат</translation>
 <translation id="6727969043791803658">Туташып турат, батареянын деңгээли – <ph name="BATTERY_PERCENTAGE" />%</translation>
 <translation id="6732800389263199929">дагы <ph name="COUNT" /></translation>
+<translation id="6737983188036277605">Камера менен микрофон колдонулууда</translation>
 <translation id="6739144137573853180">ЖӨНДӨӨЛӨРГӨ ӨТҮҮ</translation>
 <translation id="6751052314767925245">Администраторуңуз ишке киргизди</translation>
 <translation id="6751826523481687655">Майнаптуулукка көз салуу күйгүзүлгөн</translation>
@@ -1241,6 +1244,7 @@
 <translation id="828708037801473432">Өчүк</translation>
 <translation id="8297006494302853456">Начар</translation>
 <translation id="8308637677604853869">Мурунку меню</translation>
+<translation id="830868413617744215">Бета</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363"><ph name="WINDOW_TITLE" /> терезеси тандалды</translation>
 <translation id="8351131234907093545">Эскертүү түзүү</translation>
diff --git a/ash/strings/ash_strings_lo.xtb b/ash/strings/ash_strings_lo.xtb
index 592048e4..32e7363 100644
--- a/ash/strings/ash_strings_lo.xtb
+++ b/ash/strings/ash_strings_lo.xtb
@@ -1244,6 +1244,7 @@
 <translation id="828708037801473432">ປິດ</translation>
 <translation id="8297006494302853456">ອ່ອນ</translation>
 <translation id="8308637677604853869">ເມ​ນູ​ຜ່ານ​ມາ</translation>
+<translation id="830868413617744215">Beta</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">ເລືອກໜ້າຈໍ <ph name="WINDOW_TITLE" /> ແລ້ວ</translation>
 <translation id="8351131234907093545">ສ້າງບັນທຶກ</translation>
diff --git a/ash/strings/ash_strings_lt.xtb b/ash/strings/ash_strings_lt.xtb
index 5ef9427..76a4cff 100644
--- a/ash/strings/ash_strings_lt.xtb
+++ b/ash/strings/ash_strings_lt.xtb
@@ -1165,6 +1165,7 @@
 <translation id="7842569679327885685">Įspėjimas: eksperimentinė funkcija</translation>
 <translation id="7846634333498149051">Klaviatūra</translation>
 <translation id="7848989271541991537">Perkelta į <ph name="PAGE_NUMBER" /> puslapį, <ph name="ROW_NUMBER" /> eilutę, <ph name="COLUMN_NUMBER" /> stulpelį.</translation>
+<translation id="7851768487828137624">Kanarų</translation>
 <translation id="7860671499921112077">Perbraukite aukštyn trimis pirštais, kad apsilankytumėte „Apžvalgos“ skiltyje</translation>
 <translation id="7866482334467279021">įjungta</translation>
 <translation id="7868900307798234037">Atrakinama naudojant kontrolinį kodą</translation>
@@ -1244,6 +1245,7 @@
 <translation id="828708037801473432">Išjungta</translation>
 <translation id="8297006494302853456">Silpnas</translation>
 <translation id="8308637677604853869">Ankstesnis meniu</translation>
+<translation id="830868413617744215">Beta versija</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">Pasirinktas langas „<ph name="WINDOW_TITLE" />“</translation>
 <translation id="8351131234907093545">Sukurti užrašą</translation>
diff --git a/ash/strings/ash_strings_lv.xtb b/ash/strings/ash_strings_lv.xtb
index 8798b70..cd86cf5 100644
--- a/ash/strings/ash_strings_lv.xtb
+++ b/ash/strings/ash_strings_lv.xtb
@@ -1165,6 +1165,7 @@
 <translation id="7842569679327885685">Brīdinājums: šī ir eksperimentāla funkcija!</translation>
 <translation id="7846634333498149051">Tastatūra</translation>
 <translation id="7848989271541991537">Pārvietota uz <ph name="PAGE_NUMBER" />. lapu, <ph name="ROW_NUMBER" />. rindu, <ph name="COLUMN_NUMBER" />. sleju.</translation>
+<translation id="7851768487828137624">Canary</translation>
 <translation id="7860671499921112077">Lai atvērtu pārskatu, ar trim pirkstiem velciet augšup</translation>
 <translation id="7866482334467279021">ieslēgts</translation>
 <translation id="7868900307798234037">Notiek atbloķēšana ar pirksta nospiedumu</translation>
@@ -1244,6 +1245,7 @@
 <translation id="828708037801473432">Izslēgts</translation>
 <translation id="8297006494302853456">Vājš</translation>
 <translation id="8308637677604853869">Iepriekšējā izvēlne</translation>
+<translation id="830868413617744215">Beta</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">Atlasīts logs “<ph name="WINDOW_TITLE" />”</translation>
 <translation id="8351131234907093545">Izveidot piezīmi</translation>
diff --git a/ash/strings/ash_strings_mk.xtb b/ash/strings/ash_strings_mk.xtb
index 8b4fa7d..6a732815 100644
--- a/ash/strings/ash_strings_mk.xtb
+++ b/ash/strings/ash_strings_mk.xtb
@@ -1251,6 +1251,7 @@
 <translation id="828708037801473432">Исклучено</translation>
 <translation id="8297006494302853456">Слаб</translation>
 <translation id="8308637677604853869">Претходно мени</translation>
+<translation id="830868413617744215">Бета</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">Избран е прозорецот <ph name="WINDOW_TITLE" /></translation>
 <translation id="8351131234907093545">Создајте белешка</translation>
diff --git a/ash/strings/ash_strings_ml.xtb b/ash/strings/ash_strings_ml.xtb
index 8f1d278e..d3fe746 100644
--- a/ash/strings/ash_strings_ml.xtb
+++ b/ash/strings/ash_strings_ml.xtb
@@ -1165,6 +1165,7 @@
 <translation id="7842569679327885685">മുന്നറിയിപ്പ്: പരീക്ഷണാത്മക ഫീച്ചർ</translation>
 <translation id="7846634333498149051">കീബോർഡ്</translation>
 <translation id="7848989271541991537">പേജ് <ph name="PAGE_NUMBER" />, വരി <ph name="ROW_NUMBER" />, കോളം <ph name="COLUMN_NUMBER" /> എന്നതിലേക്ക് നീക്കി.</translation>
+<translation id="7851768487828137624">കാനറി</translation>
 <translation id="7860671499921112077">അവലോകനത്തിലേക്ക് കടക്കാൻ മൂന്നു വിരലുകൾ ഉപയോഗിച്ച് മുകളിലേക്ക് സ്വൈപ്പ് ചെയ്യുക</translation>
 <translation id="7866482334467279021">ഓണാണ്</translation>
 <translation id="7868900307798234037">വിരലടയാളം ഉപയോഗിച്ച് അൺലോക്ക് ചെയ്യുന്നു</translation>
@@ -1244,6 +1245,7 @@
 <translation id="828708037801473432">ഓഫാണ്</translation>
 <translation id="8297006494302853456">ദുര്‍ബലം</translation>
 <translation id="8308637677604853869">മുൻ മെനു</translation>
+<translation id="830868413617744215">ബീറ്റ</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363"><ph name="WINDOW_TITLE" /> വിന്‍ഡോ തിരഞ്ഞടുത്തു</translation>
 <translation id="8351131234907093545">കുറിപ്പ് സൃഷ്‌ടിക്കുക</translation>
diff --git a/ash/strings/ash_strings_mn.xtb b/ash/strings/ash_strings_mn.xtb
index a63b04a..8e6fda56 100644
--- a/ash/strings/ash_strings_mn.xtb
+++ b/ash/strings/ash_strings_mn.xtb
@@ -1251,6 +1251,7 @@
 <translation id="828708037801473432">Унтраалттай</translation>
 <translation id="8297006494302853456">Сул</translation>
 <translation id="8308637677604853869">Өмнөх цэс</translation>
+<translation id="830868413617744215">Бета</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363"><ph name="WINDOW_TITLE" /> цонх сонгосон</translation>
 <translation id="8351131234907093545">Тэмдэглэл үүсгэх</translation>
diff --git a/ash/strings/ash_strings_mr.xtb b/ash/strings/ash_strings_mr.xtb
index 4aceb1c3..a32cb130b 100644
--- a/ash/strings/ash_strings_mr.xtb
+++ b/ash/strings/ash_strings_mr.xtb
@@ -306,6 +306,7 @@
 <translation id="2805756323405976993">ॲप्लिकेशन</translation>
 <translation id="2814448776515246190">आंशिक कॅप्चर</translation>
 <translation id="2819276065543622893">आता तुम्हाला साइन आउट केले जाईल.</translation>
+<translation id="2822551631199737692">कॅमेरा वापरात आहे</translation>
 <translation id="2825224105325558319"><ph name="DISPLAY_NAME" /> <ph name="SPECIFIED_RESOLUTION" /> ला सपोर्ट करत नाही. रेझोल्यूशन <ph name="FALLBACK_RESOLUTION" /> मध्ये बदलले.</translation>
 <translation id="2825619548187458965">शेल्फ</translation>
 <translation id="2831035692318564937">सूर्योदयापर्यंत सुरू</translation>
@@ -807,6 +808,7 @@
 <translation id="5682642926269496722">सध्याच्या वापरकर्ता खात्यावर Google असिस्टंट उपलब्ध नाही.</translation>
 <translation id="5689633613396158040">रात्रीच्या प्रकाशामुळे तुमच्या स्क्रीनकडे पाहणे किंवा मंद प्रकाशात वाचणे आणखी सोपे होते. रात्रीचा प्रकाश कधी सुरू होईल किंवा पूर्ण बंद होईल हे बदलण्यासाठी टॅप करा.</translation>
 <translation id="5691772641933328258">फिंगरप्रिंट ओळखले नाही</translation>
+<translation id="5693255400847650006">मायक्रोफोन वापरात आहे</translation>
 <translation id="570390244361237317">सर्व ॲप्स, सर्व ॲप्स ॲक्सेस करण्यासाठी ॲरो की वापरून नेव्हिगेट करा</translation>
 <translation id="5707775774148071965">तुमचे डिव्हाइस हे तुमच्या केबलच्या तुलनेत जास्त डेटा दराला सपोर्ट करते. डिव्हाइसचा परफॉर्मन्स मर्यादित असू शकतो.</translation>
 <translation id="5710450975648804523">व्यत्यय आणू नका सुरू आहे</translation>
@@ -981,6 +983,7 @@
 <translation id="6723839937902243910">सामर्थ्य</translation>
 <translation id="6727969043791803658">कनेक्ट केले, <ph name="BATTERY_PERCENTAGE" />% बॅटरी</translation>
 <translation id="6732800389263199929">+<ph name="COUNT" /></translation>
+<translation id="6737983188036277605">कॅमेरा आणि मायक्रोफोन वापरात आहे</translation>
 <translation id="6739144137573853180">सेटिंग्जवर जा</translation>
 <translation id="6751052314767925245">तुमच्या अ‍ॅडमिनिस्ट्रेटरने अंमलबजावणी केलेले</translation>
 <translation id="6751826523481687655">परफॉर्मंस ट्रेसिंग सुरू आहे</translation>
@@ -1162,6 +1165,7 @@
 <translation id="7842569679327885685">चेतावणी: प्रयोगात्मक वैशिष्ट्य</translation>
 <translation id="7846634333498149051">कीबोर्ड</translation>
 <translation id="7848989271541991537">पेज <ph name="PAGE_NUMBER" />, पंक्ती <ph name="ROW_NUMBER" />, स्तंभ <ph name="COLUMN_NUMBER" /> वर हलवले.</translation>
+<translation id="7851768487828137624">Canary</translation>
 <translation id="7860671499921112077">अवलोकन मध्ये एंटर करण्यासाठी तीन बोटांनी वर स्‍वाइप करा</translation>
 <translation id="7866482334467279021">सुरू</translation>
 <translation id="7868900307798234037">फिंगरप्रिंटने अनलॉक करत आहे</translation>
@@ -1241,6 +1245,7 @@
 <translation id="828708037801473432">बंद</translation>
 <translation id="8297006494302853456">कमकुवत</translation>
 <translation id="8308637677604853869">मागील मेनू</translation>
+<translation id="830868413617744215">बीटा</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363"><ph name="WINDOW_TITLE" /> विंडो निवडली</translation>
 <translation id="8351131234907093545">टीप तयार करा</translation>
diff --git a/ash/strings/ash_strings_ms.xtb b/ash/strings/ash_strings_ms.xtb
index 9acc860..2bbf7a8 100644
--- a/ash/strings/ash_strings_ms.xtb
+++ b/ash/strings/ash_strings_ms.xtb
@@ -1166,6 +1166,7 @@
 <translation id="7842569679327885685">Amaran: Ciri percubaan</translation>
 <translation id="7846634333498149051">Papan kekunci</translation>
 <translation id="7848989271541991537">Dialihkan kepada Halaman <ph name="PAGE_NUMBER" />, baris <ph name="ROW_NUMBER" />, lajur <ph name="COLUMN_NUMBER" />.</translation>
+<translation id="7851768487828137624">Canary</translation>
 <translation id="7860671499921112077">Leret ke atas dengan tiga jari untuk memasuki Ikhtisar</translation>
 <translation id="7866482334467279021">dihidupkan</translation>
 <translation id="7868900307798234037">Membuka kunci dengan cap jari</translation>
@@ -1245,6 +1246,7 @@
 <translation id="828708037801473432">Dimatikan</translation>
 <translation id="8297006494302853456">Lemah</translation>
 <translation id="8308637677604853869">Menu sebelumnya</translation>
+<translation id="830868413617744215">Beta</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363"><ph name="WINDOW_TITLE" /> tetingkap dipilih</translation>
 <translation id="8351131234907093545">Buat nota</translation>
diff --git a/ash/strings/ash_strings_my.xtb b/ash/strings/ash_strings_my.xtb
index cd11ac103..a39a297 100644
--- a/ash/strings/ash_strings_my.xtb
+++ b/ash/strings/ash_strings_my.xtb
@@ -1250,6 +1250,7 @@
 <translation id="828708037801473432">ပိတ်ရန်</translation>
 <translation id="8297006494302853456">အားမကောင်းပါ</translation>
 <translation id="8308637677604853869">ယခင် မီနျူး</translation>
+<translation id="830868413617744215">စမ်းသပ်ဆဲ</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363"><ph name="WINDOW_TITLE" /> ဝင်းဒိုးကို ရွေးထားသည်</translation>
 <translation id="8351131234907093545">မှတ်စုရေးရန်</translation>
diff --git a/ash/strings/ash_strings_ne.xtb b/ash/strings/ash_strings_ne.xtb
index 8d01ecfb..45ea31e 100644
--- a/ash/strings/ash_strings_ne.xtb
+++ b/ash/strings/ash_strings_ne.xtb
@@ -1244,6 +1244,7 @@
 <translation id="828708037801473432">अफ</translation>
 <translation id="8297006494302853456">कमजोर</translation>
 <translation id="8308637677604853869">अघिल्लो मेनु</translation>
+<translation id="830868413617744215">बेटा</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363"><ph name="WINDOW_TITLE" /> नामक विन्डो चयन गरियो</translation>
 <translation id="8351131234907093545">टिपोट सिर्जना गर्नुहोस्</translation>
diff --git a/ash/strings/ash_strings_nl.xtb b/ash/strings/ash_strings_nl.xtb
index 060da85b..b460e745 100644
--- a/ash/strings/ash_strings_nl.xtb
+++ b/ash/strings/ash_strings_nl.xtb
@@ -1167,6 +1167,7 @@
 <translation id="7842569679327885685">Waarschuwing: Experimentele functie</translation>
 <translation id="7846634333498149051">Toetsenbord</translation>
 <translation id="7848989271541991537">Verplaatst naar pagina <ph name="PAGE_NUMBER" />, rij <ph name="ROW_NUMBER" />, kolom <ph name="COLUMN_NUMBER" />.</translation>
+<translation id="7851768487828137624">Canary</translation>
 <translation id="7860671499921112077">Swipe met 3 vingers omhoog om het overzicht te openen</translation>
 <translation id="7866482334467279021">aan</translation>
 <translation id="7868900307798234037">Ontgrendelen met vingerafdruk</translation>
@@ -1247,6 +1248,7 @@
 <translation id="828708037801473432">Uit</translation>
 <translation id="8297006494302853456">Zwak</translation>
 <translation id="8308637677604853869">Vorig menu</translation>
+<translation id="830868413617744215">Bèta</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">Venster <ph name="WINDOW_TITLE" /> geselecteerd</translation>
 <translation id="8351131234907093545">Notitie maken</translation>
diff --git a/ash/strings/ash_strings_no.xtb b/ash/strings/ash_strings_no.xtb
index ce8867d..bd04aeb 100644
--- a/ash/strings/ash_strings_no.xtb
+++ b/ash/strings/ash_strings_no.xtb
@@ -27,6 +27,7 @@
 <translation id="1111021433905331574">Du kan endre fargen på tastaturets bakgrunnsbelysning i Innstillinger &gt; <ph name="APP_TITLE" /></translation>
 <translation id="112308213915226829">Skjul hyllen automatisk</translation>
 <translation id="1142002900084379065">Nylige bilder</translation>
+<translation id="114451698114044150">Automatisk zoom er på.</translation>
 <translation id="1148499908455722006">Åpne dialogboksen for informasjon om <ph name="USER_NAME" /></translation>
 <translation id="1150989369772528668">Kalender</translation>
 <translation id="1153356358378277386">Tilkoblede enheter</translation>
@@ -449,6 +450,7 @@
 <translation id="3593039967545720377">Åpne utklippstavleloggen ved å trykke på <ph name="SHORTCUT_KEY_NAME" /> + V for å se utklippstavlen. Kopiér et element for å komme i gang.</translation>
 <translation id="3593646411856133110">Sveip opp og hold for å se åpne apper</translation>
 <translation id="3595596368722241419">Batteriet er fullt</translation>
+<translation id="3600061223661453002">Av</translation>
 <translation id="3604801046548457007">Opprettet skrivebord <ph name="DESK_TITILE" /></translation>
 <translation id="3606978283550408104">En leselist er tilkoblet.</translation>
 <translation id="3615926715408477684">Hvis du slår på mobildata, blir Bluetooth også slått på</translation>
@@ -967,6 +969,7 @@
 <translation id="6637729079642709226">Endre tiden</translation>
 <translation id="6641720045729354415">Slå av/på Direkteteksting. <ph name="STATE_TEXT" /></translation>
 <translation id="6643169293433369663">Angre sortering etter navn</translation>
+<translation id="6649641931981131786">Juster kameraet så du er midt på skjermen.</translation>
 <translation id="6650072551060208490"><ph name="ORIGIN_NAME" /> vil bekrefte at det er deg</translation>
 <translation id="6650933572246256093">Bluetooth-enheten «<ph name="DEVICE_NAME" />» ber om tillatelse til å koble til. Skriv inn denne tilgangskoden på den aktuelle enheten: <ph name="PASSKEY" /></translation>
 <translation id="6657585470893396449">Passord</translation>
@@ -1008,6 +1011,7 @@
 <translation id="685782768769951078">{NUM_DIGITS,plural, =1{Ett siffer gjenstår}other{# sifre gjenstår}}</translation>
 <translation id="6867938213751067702">Nedlastingen av <ph name="FILENAME" /> er satt på pause</translation>
 <translation id="6878400149835617132">Snarveien er avslått</translation>
+<translation id="6878709625737492815">Automatisk zoom er av.</translation>
 <translation id="6884665277231944629">Gå tilbake til i dag</translation>
 <translation id="6886172995547742638">Ytelsen til <ph name="DEVICE_TYPE" /> kan svekkes. Bruk en sertifisert USB-C-strømadapter på <ph name="PREFERRED_MINIMUM_POWER" /> W eller mer.</translation>
 <translation id="688631446150864480">Trykk på nedoverpiltasten for å bytte vindu</translation>
@@ -1087,6 +1091,7 @@
 <translation id="7378203170292176219">Dra for å velge området du vil ta opp</translation>
 <translation id="7378594059915113390">Mediekontroller</translation>
 <translation id="7378889811480108604">Batterisparing er av</translation>
+<translation id="7382680553121047388">På</translation>
 <translation id="7384028040782072252">Høyreklikk hvor som helst for å endre rekkefølge på appene</translation>
 <translation id="7392563512730092880">Du kan alltid konfigurere dette senere i Innstillinger.</translation>
 <translation id="7405710164030118432">For å låse opp enheten, skriv inn koden din for foreldretilgang til Family Link</translation>
@@ -1165,11 +1170,13 @@
 <translation id="7842569679327885685">Advarsel: Funksjon på forsøksstadiet</translation>
 <translation id="7846634333498149051">Tastatur</translation>
 <translation id="7848989271541991537">Flyttet til side <ph name="PAGE_NUMBER" />, rad <ph name="ROW_NUMBER" />, kolonne <ph name="COLUMN_NUMBER" />.</translation>
+<translation id="7851768487828137624">Canary</translation>
 <translation id="7860671499921112077">Sveip opp med tre fingre for å åpne Oversikt</translation>
 <translation id="7866482334467279021">på</translation>
 <translation id="7868900307798234037">Låser opp med fingeravtrykk</translation>
 <translation id="7872195908557044066">Administratoren holder på å tilbakestille e-SIM-kortet ditt. Vent i noen minutter.</translation>
 <translation id="7872786842639831132">Av</translation>
+<translation id="7875280185395705476">Automatisk zoom</translation>
 <translation id="7875575368831396199">Det ser ut til at Bluetooth er slått av på <ph name="DEVICE_TYPE" />. Slå på Bluetooth for å bruke Telefonstyring.</translation>
 <translation id="7877557217297072640">{0,plural, =0{Nedgrader enheten til en tidligere versjon nå}=1{Nedgrader enheten til en tidligere versjon innen 1 sekund}other{Nedgrader enheten til en tidligere versjon innen # sekunder}}</translation>
 <translation id="7886169021410746335">justere personverninnstillinger</translation>
@@ -1244,6 +1251,7 @@
 <translation id="828708037801473432">Av</translation>
 <translation id="8297006494302853456">Svakt</translation>
 <translation id="8308637677604853869">Forrige meny</translation>
+<translation id="830868413617744215">Beta</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /><ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">Vinduet <ph name="WINDOW_TITLE" /> er valgt</translation>
 <translation id="8351131234907093545">Opprett et notat</translation>
@@ -1289,6 +1297,7 @@
 <translation id="856298576161209842"><ph name="MANAGER" /> anbefaler at du oppdaterer <ph name="DEVICE_TYPE" /></translation>
 <translation id="8563862697512465947">Varslingsinnstillinger</translation>
 <translation id="857201607579416096">Menyen ble flyttet til nedre høyre hjørne av skjermen.</translation>
+<translation id="8576288697319745668">Slå av/på automatisk zoom. <ph name="STATE_TEXT" /></translation>
 <translation id="8594115950068821369">–<ph name="FORMATTED_TIME" /></translation>
 <translation id="8598235756057743477">Sorter apper etter navn eller farge</translation>
 <translation id="8614517853887502247">Varsler fra <ph name="APP_1_TITLE" /> og <ph name="APP_2_TITLE" /> er skjult fordi visningsbeskyttelse er på</translation>
diff --git a/ash/strings/ash_strings_or.xtb b/ash/strings/ash_strings_or.xtb
index ef5bbfff..5ef1d425 100644
--- a/ash/strings/ash_strings_or.xtb
+++ b/ash/strings/ash_strings_or.xtb
@@ -1240,6 +1240,7 @@
 <translation id="828708037801473432">ବନ୍ଦ</translation>
 <translation id="8297006494302853456">ଦୁର୍ବଳ</translation>
 <translation id="8308637677604853869">ପୂର୍ବବର୍ତ୍ତୀ ମେନୁ</translation>
+<translation id="830868413617744215">ବେଟା</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363"><ph name="WINDOW_TITLE" /> ୱିଣ୍ଡୋକୁ ଚୟନ କରାଯାଇଛି</translation>
 <translation id="8351131234907093545">ନୋଟ୍ ତିଆରି କରନ୍ତୁ</translation>
diff --git a/ash/strings/ash_strings_pa.xtb b/ash/strings/ash_strings_pa.xtb
index 05144ce..b08fe06 100644
--- a/ash/strings/ash_strings_pa.xtb
+++ b/ash/strings/ash_strings_pa.xtb
@@ -1251,6 +1251,7 @@
 <translation id="828708037801473432">ਬੰਦ</translation>
 <translation id="8297006494302853456">ਕਮਜ਼ੋਰ</translation>
 <translation id="8308637677604853869">ਪਿਛਲਾ ਮੀਨੂ</translation>
+<translation id="830868413617744215">ਬੀਟਾ</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363"><ph name="WINDOW_TITLE" /> ਵਿੰਡੋ ਨੂੰ ਚੁਣਿਆ ਗਿਆ</translation>
 <translation id="8351131234907093545">ਨੋਟ-ਕਥਨ ਬਣਾਓ</translation>
diff --git a/ash/strings/ash_strings_pl.xtb b/ash/strings/ash_strings_pl.xtb
index e2d7836..1ce4a97 100644
--- a/ash/strings/ash_strings_pl.xtb
+++ b/ash/strings/ash_strings_pl.xtb
@@ -1169,6 +1169,7 @@
 <translation id="7842569679327885685">Ostrzeżenie: funkcja eksperymentalna</translation>
 <translation id="7846634333498149051">Klawiatura</translation>
 <translation id="7848989271541991537">Przeniesiono do strony <ph name="PAGE_NUMBER" />, wiersza <ph name="ROW_NUMBER" />, kolumny <ph name="COLUMN_NUMBER" />.</translation>
+<translation id="7851768487828137624">Canary</translation>
 <translation id="7860671499921112077">Przesuń 3 palcami w górę, aby otworzyć Przegląd</translation>
 <translation id="7866482334467279021">włączono</translation>
 <translation id="7868900307798234037">Odblokowano odciskiem palca</translation>
@@ -1249,6 +1250,7 @@
 <translation id="828708037801473432">Wyłączono</translation>
 <translation id="8297006494302853456">Słaby</translation>
 <translation id="8308637677604853869">Poprzednie menu</translation>
+<translation id="830868413617744215">Beta</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">Wybrano okno <ph name="WINDOW_TITLE" /></translation>
 <translation id="8351131234907093545">Utwórz notatkę</translation>
diff --git a/ash/strings/ash_strings_pt-BR.xtb b/ash/strings/ash_strings_pt-BR.xtb
index c26e759..40acde0 100644
--- a/ash/strings/ash_strings_pt-BR.xtb
+++ b/ash/strings/ash_strings_pt-BR.xtb
@@ -307,6 +307,7 @@
 <translation id="2805756323405976993">Apps</translation>
 <translation id="2814448776515246190">Captura parcial</translation>
 <translation id="2819276065543622893">Você sairá agora.</translation>
+<translation id="2822551631199737692">Câmera em uso</translation>
 <translation id="2825224105325558319"><ph name="DISPLAY_NAME" /> não é compatível com <ph name="SPECIFIED_RESOLUTION" />. A resolução foi modificada para <ph name="FALLBACK_RESOLUTION" />.</translation>
 <translation id="2825619548187458965">Estante</translation>
 <translation id="2831035692318564937">Ativado até o amanhecer</translation>
@@ -809,6 +810,7 @@
 <translation id="5682642926269496722">O Google Assistente não está disponível para a conta de usuário atual.</translation>
 <translation id="5689633613396158040">O Modo noturno facilita a visualização da sua tela ou a leitura com pouca luz. Toque para mudar o horário de ativação do Modo noturno ou desative-o completamente.</translation>
 <translation id="5691772641933328258">Impressão digital não reconhecida</translation>
+<translation id="5693255400847650006">Microfone em uso</translation>
 <translation id="570390244361237317">Todos os apps: use as teclas de seta para acessar todos os apps</translation>
 <translation id="5707775774148071965">Seu dispositivo oferece suporte a uma taxa de dados mais alta do que seu cabo. O desempenho do dispositivo pode ser limitado.</translation>
 <translation id="5710450975648804523">O "Não perturbe" está ativado</translation>
@@ -984,6 +986,7 @@
 <translation id="6723839937902243910">Energia</translation>
 <translation id="6727969043791803658">Conectado, <ph name="BATTERY_PERCENTAGE" />% de bateria</translation>
 <translation id="6732800389263199929">+<ph name="COUNT" /></translation>
+<translation id="6737983188036277605">Câmera e microfone em uso</translation>
 <translation id="6739144137573853180">IR PARA CONFIGURAÇÕES</translation>
 <translation id="6751052314767925245">Aplicado pelo seu administrador</translation>
 <translation id="6751826523481687655">O acompanhamento de desempenho está ativado</translation>
@@ -1167,6 +1170,7 @@
 <translation id="7842569679327885685">Aviso: recurso experimental</translation>
 <translation id="7846634333498149051">Teclado</translation>
 <translation id="7848989271541991537">Movido para página <ph name="PAGE_NUMBER" />, linha <ph name="ROW_NUMBER" />, coluna <ph name="COLUMN_NUMBER" />.</translation>
+<translation id="7851768487828137624">Canary</translation>
 <translation id="7860671499921112077">Deslize com três dedos para cima para abrir a Visão geral</translation>
 <translation id="7866482334467279021">ativada</translation>
 <translation id="7868900307798234037">Desbloqueio por impressão digital</translation>
@@ -1247,6 +1251,7 @@
 <translation id="828708037801473432">Desativada</translation>
 <translation id="8297006494302853456">Fraco</translation>
 <translation id="8308637677604853869">Menu anterior</translation>
+<translation id="830868413617744215">Beta</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">Janela <ph name="WINDOW_TITLE" /> selecionada</translation>
 <translation id="8351131234907093545">Criar nota</translation>
diff --git a/ash/strings/ash_strings_pt-PT.xtb b/ash/strings/ash_strings_pt-PT.xtb
index 34e6a20..b6a251b 100644
--- a/ash/strings/ash_strings_pt-PT.xtb
+++ b/ash/strings/ash_strings_pt-PT.xtb
@@ -1165,6 +1165,7 @@
 <translation id="7842569679327885685">Aviso: funcionalidade experimental</translation>
 <translation id="7846634333498149051">Teclado</translation>
 <translation id="7848989271541991537">A aplicação foi movida para a página <ph name="PAGE_NUMBER" />, linha <ph name="ROW_NUMBER" />, coluna <ph name="COLUMN_NUMBER" />.</translation>
+<translation id="7851768487828137624">Canary</translation>
 <translation id="7860671499921112077">Deslize rapidamente para cima com três dedos para aceder à Vista geral.</translation>
 <translation id="7866482334467279021">ativado</translation>
 <translation id="7868900307798234037">Desbloqueado com a impressão digital</translation>
@@ -1244,6 +1245,7 @@
 <translation id="828708037801473432">Desativada</translation>
 <translation id="8297006494302853456">Fraca</translation>
 <translation id="8308637677604853869">Menu anterior</translation>
+<translation id="830868413617744215">Beta</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">Janela <ph name="WINDOW_TITLE" /> selecionada</translation>
 <translation id="8351131234907093545">Criar nota</translation>
diff --git a/ash/strings/ash_strings_ro.xtb b/ash/strings/ash_strings_ro.xtb
index 36777d6..0f73f6f 100644
--- a/ash/strings/ash_strings_ro.xtb
+++ b/ash/strings/ash_strings_ro.xtb
@@ -1165,6 +1165,7 @@
 <translation id="7842569679327885685">Avertisment: funcție experimentală</translation>
 <translation id="7846634333498149051">Tastatură</translation>
 <translation id="7848989271541991537">S-a mutat în pagina <ph name="PAGE_NUMBER" />, rândul <ph name="ROW_NUMBER" />, coloana <ph name="COLUMN_NUMBER" />.</translation>
+<translation id="7851768487828137624">Canary</translation>
 <translation id="7860671499921112077">Glisează cu trei degete în sus pentru a intra în modul Prezentare generală</translation>
 <translation id="7866482334467279021">activată</translation>
 <translation id="7868900307798234037">Deblochează cu amprenta</translation>
@@ -1244,6 +1245,7 @@
 <translation id="828708037801473432">Dezactivat</translation>
 <translation id="8297006494302853456">Slab</translation>
 <translation id="8308637677604853869">Meniul anterior</translation>
+<translation id="830868413617744215">Beta</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363"><ph name="WINDOW_TITLE" /> fereastră selectată</translation>
 <translation id="8351131234907093545">Creează o notă</translation>
diff --git a/ash/strings/ash_strings_ru.xtb b/ash/strings/ash_strings_ru.xtb
index bee919bc..ffc36575 100644
--- a/ash/strings/ash_strings_ru.xtb
+++ b/ash/strings/ash_strings_ru.xtb
@@ -1165,6 +1165,7 @@
 <translation id="7842569679327885685">Внимание! Экспериментальная функция</translation>
 <translation id="7846634333498149051">Клавиатура</translation>
 <translation id="7848989271541991537">Приложение перенесено на страницу <ph name="PAGE_NUMBER" />, строка <ph name="ROW_NUMBER" />, столбец <ph name="COLUMN_NUMBER" />.</translation>
+<translation id="7851768487828137624">Canary</translation>
 <translation id="7860671499921112077">Чтобы перейти в режим обзора, проведите тремя пальцами вверх.</translation>
 <translation id="7866482334467279021">включена</translation>
 <translation id="7868900307798234037">Экран разблокирован с помощью отпечатка пальца</translation>
@@ -1244,6 +1245,7 @@
 <translation id="828708037801473432">Отключено</translation>
 <translation id="8297006494302853456">Слабый</translation>
 <translation id="8308637677604853869">Предыдущее меню</translation>
+<translation id="830868413617744215">Бета</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">Выбрано окно "<ph name="WINDOW_TITLE" />"</translation>
 <translation id="8351131234907093545">Создать заметку</translation>
diff --git a/ash/strings/ash_strings_si.xtb b/ash/strings/ash_strings_si.xtb
index 0a718e9..471b0618 100644
--- a/ash/strings/ash_strings_si.xtb
+++ b/ash/strings/ash_strings_si.xtb
@@ -1241,6 +1241,7 @@
 <translation id="828708037801473432">අක්‍රියයි</translation>
 <translation id="8297006494302853456">දුර්වලයි</translation>
 <translation id="8308637677604853869">පෙර මෙනුව</translation>
+<translation id="830868413617744215">බීටා</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363"><ph name="WINDOW_TITLE" /> කවුළුව තෝරා ගන්නා ලදී</translation>
 <translation id="8351131234907093545">සටහන සාදන්න</translation>
diff --git a/ash/strings/ash_strings_sk.xtb b/ash/strings/ash_strings_sk.xtb
index d7b4396..78d055b 100644
--- a/ash/strings/ash_strings_sk.xtb
+++ b/ash/strings/ash_strings_sk.xtb
@@ -1170,6 +1170,7 @@
 <translation id="7842569679327885685">Upozornenie: Experimentálna funkcia</translation>
 <translation id="7846634333498149051">Klávesnica</translation>
 <translation id="7848989271541991537">Prechod na <ph name="PAGE_NUMBER" />. stránku, <ph name="ROW_NUMBER" />. riadok,<ph name="COLUMN_NUMBER" />. stĺpec.</translation>
+<translation id="7851768487828137624">Canary</translation>
 <translation id="7860671499921112077">Prehľad otvoríte potiahnutím troma prstami nahor</translation>
 <translation id="7866482334467279021">zapnuté</translation>
 <translation id="7868900307798234037">Odomyká sa pomocou odtlačku prsta</translation>
@@ -1250,6 +1251,7 @@
 <translation id="828708037801473432">Vypnuté</translation>
 <translation id="8297006494302853456">Slabé</translation>
 <translation id="8308637677604853869">Predchádzajúca ponuka</translation>
+<translation id="830868413617744215">Beta</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">Bolo vybrané okno <ph name="WINDOW_TITLE" /></translation>
 <translation id="8351131234907093545">Vytvoriť poznámku</translation>
diff --git a/ash/strings/ash_strings_sl.xtb b/ash/strings/ash_strings_sl.xtb
index 7f7cfda..70cd831 100644
--- a/ash/strings/ash_strings_sl.xtb
+++ b/ash/strings/ash_strings_sl.xtb
@@ -1165,6 +1165,7 @@
 <translation id="7842569679327885685">Opozorilo: poskusna funkcija</translation>
 <translation id="7846634333498149051">Tipkovnica</translation>
 <translation id="7848989271541991537">Premaknjeno na <ph name="PAGE_NUMBER" />. stran, <ph name="ROW_NUMBER" />. vrstico, <ph name="COLUMN_NUMBER" />. stolpec.</translation>
+<translation id="7851768487828137624">Delovna različica</translation>
 <translation id="7860671499921112077">Če želite odpreti pregled, povlecite s tremi prsti navzgor.</translation>
 <translation id="7866482334467279021">vklopljeno</translation>
 <translation id="7868900307798234037">Odklepanje s prstnim odtisom</translation>
@@ -1244,6 +1245,7 @@
 <translation id="828708037801473432">Izklopljeno</translation>
 <translation id="8297006494302853456">Šibek</translation>
 <translation id="8308637677604853869">Prejšnji meni</translation>
+<translation id="830868413617744215">Beta</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">Izbrano je okno <ph name="WINDOW_TITLE" /></translation>
 <translation id="8351131234907093545">Ustvarjanje zapiska</translation>
diff --git a/ash/strings/ash_strings_sq.xtb b/ash/strings/ash_strings_sq.xtb
index d773ced..71f8a57 100644
--- a/ash/strings/ash_strings_sq.xtb
+++ b/ash/strings/ash_strings_sq.xtb
@@ -1244,6 +1244,7 @@
 <translation id="828708037801473432">Joaktiv</translation>
 <translation id="8297006494302853456">I dobët</translation>
 <translation id="8308637677604853869">Menyja e mëparshme</translation>
+<translation id="830868413617744215">Beta</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">U zgjodh dritarja <ph name="WINDOW_TITLE" /></translation>
 <translation id="8351131234907093545">Krijo një shënim</translation>
diff --git a/ash/strings/ash_strings_sr-Latn.xtb b/ash/strings/ash_strings_sr-Latn.xtb
index 7d80121..d08468d7 100644
--- a/ash/strings/ash_strings_sr-Latn.xtb
+++ b/ash/strings/ash_strings_sr-Latn.xtb
@@ -1170,6 +1170,7 @@
 <translation id="7842569679327885685">Upozorenje: Eksperimentalna funkcija</translation>
 <translation id="7846634333498149051">Tastatura</translation>
 <translation id="7848989271541991537">Premešteno je na <ph name="PAGE_NUMBER" />. stranicu, <ph name="ROW_NUMBER" />. red, <ph name="COLUMN_NUMBER" />. kolona.</translation>
+<translation id="7851768487828137624">Canary</translation>
 <translation id="7860671499921112077">Prevucite nagore pomoću tri prsta da biste ušli u Pregled</translation>
 <translation id="7866482334467279021">uključeno</translation>
 <translation id="7868900307798234037">Otključavanje otiskom prsta</translation>
@@ -1250,6 +1251,7 @@
 <translation id="828708037801473432">Isključeno</translation>
 <translation id="8297006494302853456">Slab</translation>
 <translation id="8308637677604853869">Prethodni meni</translation>
+<translation id="830868413617744215">Beta</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">Prozor <ph name="WINDOW_TITLE" /> je izabran</translation>
 <translation id="8351131234907093545">Napravite belešku</translation>
diff --git a/ash/strings/ash_strings_sr.xtb b/ash/strings/ash_strings_sr.xtb
index 7753d02..a9a39dcc 100644
--- a/ash/strings/ash_strings_sr.xtb
+++ b/ash/strings/ash_strings_sr.xtb
@@ -1170,6 +1170,7 @@
 <translation id="7842569679327885685">Упозорење: Експериментална функција</translation>
 <translation id="7846634333498149051">Тастатура</translation>
 <translation id="7848989271541991537">Премештено је на <ph name="PAGE_NUMBER" />. страницу, <ph name="ROW_NUMBER" />. ред, <ph name="COLUMN_NUMBER" />. колона.</translation>
+<translation id="7851768487828137624">Canary</translation>
 <translation id="7860671499921112077">Превуците нагоре помоћу три прста да бисте ушли у Преглед</translation>
 <translation id="7866482334467279021">укључено</translation>
 <translation id="7868900307798234037">Откључавање отискoм прста</translation>
@@ -1250,6 +1251,7 @@
 <translation id="828708037801473432">Искључено</translation>
 <translation id="8297006494302853456">Слаб</translation>
 <translation id="8308637677604853869">Претходни мени</translation>
+<translation id="830868413617744215">Beta</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">Прозор <ph name="WINDOW_TITLE" /> је изабран</translation>
 <translation id="8351131234907093545">Направите белешку</translation>
diff --git a/ash/strings/ash_strings_sv.xtb b/ash/strings/ash_strings_sv.xtb
index ac8c14b..a7171fc 100644
--- a/ash/strings/ash_strings_sv.xtb
+++ b/ash/strings/ash_strings_sv.xtb
@@ -1170,6 +1170,7 @@
 <translation id="7842569679327885685">Varning: Experimentfunktion</translation>
 <translation id="7846634333498149051">Tangentbord</translation>
 <translation id="7848989271541991537">Flyttades till sidan<ph name="PAGE_NUMBER" />, rad <ph name="ROW_NUMBER" />, kolumn <ph name="COLUMN_NUMBER" />.</translation>
+<translation id="7851768487828137624">Canary</translation>
 <translation id="7860671499921112077">Öppna översikten genom att svepa uppåt med tre fingrar</translation>
 <translation id="7866482334467279021">på</translation>
 <translation id="7868900307798234037">Låser upp med fingeravtryck</translation>
@@ -1250,6 +1251,7 @@
 <translation id="828708037801473432">Av</translation>
 <translation id="8297006494302853456">Svag</translation>
 <translation id="8308637677604853869">Föregående meny</translation>
+<translation id="830868413617744215">Beta</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">Fönstret <ph name="WINDOW_TITLE" /> har valts</translation>
 <translation id="8351131234907093545">Skapa anteckning</translation>
diff --git a/ash/strings/ash_strings_sw.xtb b/ash/strings/ash_strings_sw.xtb
index 8d38798..05725f4 100644
--- a/ash/strings/ash_strings_sw.xtb
+++ b/ash/strings/ash_strings_sw.xtb
@@ -1166,6 +1166,7 @@
 <translation id="7842569679327885685">Ilani: Kipengele cha majaribio</translation>
 <translation id="7846634333498149051">Kibodi</translation>
 <translation id="7848989271541991537">Imehamishiwa kwenye Ukurasa wa <ph name="PAGE_NUMBER" />, safu mlalo ya <ph name="ROW_NUMBER" />, safu wima ya <ph name="COLUMN_NUMBER" />.</translation>
+<translation id="7851768487828137624">Kanari</translation>
 <translation id="7860671499921112077">Telezesha vidole vitatu juu ili ufungue Muhtasari</translation>
 <translation id="7866482334467279021">imewashwa</translation>
 <translation id="7868900307798234037">Inafungua kwa kutumia alama ya kidole</translation>
@@ -1245,6 +1246,7 @@
 <translation id="828708037801473432">Imezimwa</translation>
 <translation id="8297006494302853456">Dhaifu</translation>
 <translation id="8308637677604853869">Menyu ya awali</translation>
+<translation id="830868413617744215">Beta</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">Umechagua dirisha la <ph name="WINDOW_TITLE" /></translation>
 <translation id="8351131234907093545">Unda kidokezo</translation>
diff --git a/ash/strings/ash_strings_ta.xtb b/ash/strings/ash_strings_ta.xtb
index 2747465..f5befa7 100644
--- a/ash/strings/ash_strings_ta.xtb
+++ b/ash/strings/ash_strings_ta.xtb
@@ -1162,6 +1162,7 @@
 <translation id="7842569679327885685">எச்சரிக்கை: பரிசோதனை அம்சம்</translation>
 <translation id="7846634333498149051">கீபோர்டு</translation>
 <translation id="7848989271541991537">பக்கம் <ph name="PAGE_NUMBER" />, வரிசை <ph name="ROW_NUMBER" />, நெடுவரிசை <ph name="COLUMN_NUMBER" />க்கு நகர்த்தப்பட்டது.</translation>
+<translation id="7851768487828137624">கேனரி</translation>
 <translation id="7860671499921112077">மேலோட்டப் பயன்முறைக்குச் செல்ல, மேல்நோக்கி மூன்று விரல்களால் ஸ்வைப் செய்யவும்</translation>
 <translation id="7866482334467279021">இயக்கப்பட்டுள்ளது</translation>
 <translation id="7868900307798234037">கைரேகை மூலம் திறக்கிறது</translation>
@@ -1241,6 +1242,7 @@
 <translation id="828708037801473432">முடக்கப்பட்டுள்ளது</translation>
 <translation id="8297006494302853456">வலுவாக இல்லை</translation>
 <translation id="8308637677604853869">முந்தைய மெனு</translation>
+<translation id="830868413617744215">பீட்டா</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363"><ph name="WINDOW_TITLE" /> சாளரம் தேர்ந்தெடுக்கப்பட்டது</translation>
 <translation id="8351131234907093545">குறிப்பை உருவாக்கு</translation>
diff --git a/ash/strings/ash_strings_te.xtb b/ash/strings/ash_strings_te.xtb
index ea95208..2460f11 100644
--- a/ash/strings/ash_strings_te.xtb
+++ b/ash/strings/ash_strings_te.xtb
@@ -27,6 +27,7 @@
 <translation id="1111021433905331574">మీరు మీ కీబోర్డ్ బ్యాక్‌లైట్ రంగును సెట్టింగ్‌లు &gt; <ph name="APP_TITLE" />‌లో మార్చవచ్చు</translation>
 <translation id="112308213915226829">అరను ఆటోమేటిక్‌గా దాచు</translation>
 <translation id="1142002900084379065">ఇటీవలి ఫోటోలు</translation>
+<translation id="114451698114044150">ఆటోమేటిక్ జూమ్ ఆన్‌లో ఉంది.</translation>
 <translation id="1148499908455722006"><ph name="USER_NAME" /> కోసం సమాచార డైలాగ్‌ను తెరవండి</translation>
 <translation id="1150989369772528668">క్యాలెండర్</translation>
 <translation id="1153356358378277386">జత చేసిన పరికరాలు</translation>
@@ -449,6 +450,7 @@
 <translation id="3593039967545720377">మీ క్లిప్‌బోర్డ్‌ను చూడడానికి, <ph name="SHORTCUT_KEY_NAME" /> + V నొక్కడం ద్వారా మీ క్లిప్‌బోర్డ్ హిస్టరీని యాక్సెస్ చేయండి. ప్రారంభించడానికి, ఐటెమ్‌ను కాపీ చేయండి.</translation>
 <translation id="3593646411856133110">తెరిచి ఉన్న యాప్‌లను చూడటానికి పైకి స్వైప్ చేసి, పట్టుకోండి</translation>
 <translation id="3595596368722241419">బ్యాటరీ నిండింది</translation>
+<translation id="3600061223661453002">ఆఫ్ చేయండి</translation>
 <translation id="3604801046548457007">"<ph name="DESK_TITILE" />" డెస్క్ క్రియేట్ చేయబడింది</translation>
 <translation id="3606978283550408104">బ్రెయిలీ డిస్‌ప్లే కనెక్ట్ చేయబడింది.</translation>
 <translation id="3615926715408477684">మొబైల్ డేటాను ఎనేబుల్ చేస్తే బ్లూటూత్ ఎనేబుల్ అవుతుంది</translation>
@@ -968,6 +970,7 @@
 <translation id="6637729079642709226">సమయాన్ని మార్చండి</translation>
 <translation id="6641720045729354415">లైవ్ క్యాప్షన్‌ను టోగుల్ చేయి. <ph name="STATE_TEXT" /></translation>
 <translation id="6643169293433369663">పేరు ఆధారంగా క్రమపద్ధతిలో అమర్చిన దానిని రద్దు చేశారు</translation>
+<translation id="6649641931981131786">మిమ్మల్ని స్క్రీన్ మధ్యలో ఉంచడానికి కెమెరాను సర్దుబాటు చేస్తుంది.</translation>
 <translation id="6650072551060208490"><ph name="ORIGIN_NAME" /> అది మీరేనని నిర్ధారించాలనుకుంటుంది</translation>
 <translation id="6650933572246256093">బ్లూటూత్ పరికరం "<ph name="DEVICE_NAME" />" జత కావడానికి అనుమతి కోరుతోంది. దయచేసి ఆ పరికరంలో ఈ పాస్‌కీని నమోదు చేయండి: <ph name="PASSKEY" /></translation>
 <translation id="6657585470893396449">పాస్‌వర్డ్</translation>
@@ -1009,6 +1012,7 @@
 <translation id="685782768769951078">{NUM_DIGITS,plural, =1{ఒక అంకె మిగిలింది}other{# అంకెలు మిగిలాయి}}</translation>
 <translation id="6867938213751067702"><ph name="FILENAME" /> డౌన్‌లోడ్ పాజ్ చేయబడింది</translation>
 <translation id="6878400149835617132">షార్ట్‌కట్ ఆఫ్ చేయబడింది</translation>
+<translation id="6878709625737492815">ఆటోమేటిక్ జూమ్ ఆఫ్‌లో ఉంది.</translation>
 <translation id="6884665277231944629">ఈరోజుకు తిరిగి వెళ్లండి</translation>
 <translation id="6886172995547742638">మీ <ph name="DEVICE_TYPE" /> తక్కువ పనితీరుకు లోనవ్వొచ్చు. సర్టిఫై చేయబడిన <ph name="PREFERRED_MINIMUM_POWER" />W లేదా అంతకంటే ఎక్కువ USB-C పవర్ అడాప్టర్‌ను ఉపయోగించండి.</translation>
 <translation id="688631446150864480">విండోలను మధ్య మారడానికి కింది వైపు బాణాన్ని నొక్కండి</translation>
@@ -1088,6 +1092,7 @@
 <translation id="7378203170292176219">రికార్డ్ చేసేందుకు ప్రదేశాన్ని ఎంచుకోవడానికి లాగండి</translation>
 <translation id="7378594059915113390">మీడియా నియంత్రణలు</translation>
 <translation id="7378889811480108604">బ్యాటరీ సేవర్ మోడ్ ఆఫ్‌లో ఉంది</translation>
+<translation id="7382680553121047388">ఆన్ చేయండి</translation>
 <translation id="7384028040782072252">మీ యాప్‌ల క్రమాన్ని మార్చడానికి, ఎక్కడైనా కుడి క్లిక్ ఇవ్వండి</translation>
 <translation id="7392563512730092880">మీరు సెట్టింగ్‌ల నుండి తర్వాత ఎప్పుడైనా సెటప్ చేయవచ్చు.</translation>
 <translation id="7405710164030118432">పరికరాన్ని అన్‌లాక్ చేయడానికి, మీ Family Link తల్లి/తండ్రి యాక్సెస్ కోడ్‌ను నమోదు చేయండి</translation>
@@ -1166,11 +1171,13 @@
 <translation id="7842569679327885685">హెచ్చరిక: ప్రయోగాత్మక ఫీచర్</translation>
 <translation id="7846634333498149051">కీబోర్డ్</translation>
 <translation id="7848989271541991537"><ph name="PAGE_NUMBER" />వ పేజీలో <ph name="ROW_NUMBER" />వ అడ్డు వరుస, '<ph name="COLUMN_NUMBER" />' నిలువు వరుసకు తరలించబడింది.</translation>
+<translation id="7851768487828137624">కెనరీ</translation>
 <translation id="7860671499921112077">ఓవర్‌వ్యూకు ఎంటర్ అవ్వడానికి మూడు వేళ్లతో పైకి స్వైప్ చేయండి</translation>
 <translation id="7866482334467279021">ఆన్‌లో ఉంది</translation>
 <translation id="7868900307798234037">వేలిముద్రతో అన్‌లాక్ చేస్తోంది</translation>
 <translation id="7872195908557044066">మీ అడ్మినిస్ట్రేటర్ మీ eSIMను రీసెట్ చేస్తున్నారు. కొన్ని నిమిషాలు వేచి ఉండండి.</translation>
 <translation id="7872786842639831132">ఆఫ్</translation>
+<translation id="7875280185395705476">ఆటోమేటిక్ జూమ్</translation>
 <translation id="7875575368831396199">మీ <ph name="DEVICE_TYPE" />లో మీ బ్లూటూత్ ఆఫ్ చేయబడి ఉన్నట్లుగా అనిపిస్తోంది. ఫోన్ హబ్‌ను ఉపయోగించడానికి దయచేసి బ్లూటూత్‌ను ఆన్ చేయండి.</translation>
 <translation id="7877557217297072640">{0,plural, =0{పరికరాన్ని ఇప్పుడు మునుపటి వెర్షన్‌కు మార్చండి}=1{1 సెకనులోపు పరికరాన్ని మునపటి వెర్షన్‌కు మార్చండి}other{# సెకన్లలోపు పరికరాన్ని మునపటి వెర్షన్‌కు మార్చండి}}</translation>
 <translation id="7886169021410746335">గోప్యతా సెట్టింగ్‌లను సర్దుబాటు చేయండి</translation>
@@ -1245,6 +1252,7 @@
 <translation id="828708037801473432">ఆఫ్</translation>
 <translation id="8297006494302853456">బలహీనం</translation>
 <translation id="8308637677604853869">మునుపటి మెనూ</translation>
+<translation id="830868413617744215">బీటా</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363"><ph name="WINDOW_TITLE" /> విండో ఎంచుకోబడింది</translation>
 <translation id="8351131234907093545">గమనికను క్రియేట్ చేయండి</translation>
@@ -1290,6 +1298,7 @@
 <translation id="856298576161209842">ఈ <ph name="DEVICE_TYPE" />ను అప్‌డేట్ చేయమని <ph name="MANAGER" /> మీకు సిఫార్సు చేస్తోంది</translation>
 <translation id="8563862697512465947">నోటిఫికేషన్ సెట్టింగ్‌లు</translation>
 <translation id="857201607579416096">స్క్రీన్‌లో కింద కుడి వైపు మూలకు మెనూ తరలించబడింది.</translation>
+<translation id="8576288697319745668">ఆటోమేటిక్ జూమ్‌ను టోగుల్ చేయండి. <ph name="STATE_TEXT" /></translation>
 <translation id="8594115950068821369">-<ph name="FORMATTED_TIME" /></translation>
 <translation id="8598235756057743477">పేరు లేదా రంగు ఆధారంగా మీ యాప్‌లను క్రమపద్ధతిలో అమర్చండి</translation>
 <translation id="8614517853887502247">వీక్షణ ప్రొటెక్షన్ ఆన్‌లో ఉంది కాబట్టి <ph name="APP_1_TITLE" />, <ph name="APP_2_TITLE" /> నోటిఫికేషన్‌లు దాచబడ్డాయి</translation>
diff --git a/ash/strings/ash_strings_th.xtb b/ash/strings/ash_strings_th.xtb
index ca199244..95163ad 100644
--- a/ash/strings/ash_strings_th.xtb
+++ b/ash/strings/ash_strings_th.xtb
@@ -1170,6 +1170,7 @@
 <translation id="7842569679327885685">คำเตือน: ฟีเจอร์ทดลอง</translation>
 <translation id="7846634333498149051">แป้นพิมพ์</translation>
 <translation id="7848989271541991537">ย้ายไปที่หน้า <ph name="PAGE_NUMBER" /> แถว <ph name="ROW_NUMBER" /> คอลัมน์<ph name="COLUMN_NUMBER" /></translation>
+<translation id="7851768487828137624">สีเหลืองอ่อน</translation>
 <translation id="7860671499921112077">ใช้ 3 นิ้วเลื่อนขึ้นเพื่อเข้าสู่ "ภาพรวม"</translation>
 <translation id="7866482334467279021">เปิด</translation>
 <translation id="7868900307798234037">กำลังปลดล็อกด้วยลายนิ้วมือ</translation>
@@ -1250,6 +1251,7 @@
 <translation id="828708037801473432">ปิด</translation>
 <translation id="8297006494302853456">อ่อน</translation>
 <translation id="8308637677604853869">เมนูก่อนหน้า</translation>
+<translation id="830868413617744215">เบต้า</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">เลือกหน้าต่าง <ph name="WINDOW_TITLE" /> ไว้</translation>
 <translation id="8351131234907093545">สร้างโน้ต</translation>
diff --git a/ash/strings/ash_strings_tr.xtb b/ash/strings/ash_strings_tr.xtb
index 653cda1..d9ee82a 100644
--- a/ash/strings/ash_strings_tr.xtb
+++ b/ash/strings/ash_strings_tr.xtb
@@ -1162,6 +1162,7 @@
 <translation id="7842569679327885685">Uyarı: Deneysel özellik</translation>
 <translation id="7846634333498149051">Klavye</translation>
 <translation id="7848989271541991537"><ph name="PAGE_NUMBER" />. sayfa, <ph name="ROW_NUMBER" />. satır, <ph name="COLUMN_NUMBER" />. sütuna taşındı.</translation>
+<translation id="7851768487828137624">Canary</translation>
 <translation id="7860671499921112077">Genel Bakış'a girmek için üç parmakla yukarı kaydırın</translation>
 <translation id="7866482334467279021">açık</translation>
 <translation id="7868900307798234037">Parmak iziyle kilit açılıyor</translation>
@@ -1241,6 +1242,7 @@
 <translation id="828708037801473432">Kapalı</translation>
 <translation id="8297006494302853456">Zayıf</translation>
 <translation id="8308637677604853869">Önceki menü</translation>
+<translation id="830868413617744215">Beta</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363"><ph name="WINDOW_TITLE" /> penceresi seçildi</translation>
 <translation id="8351131234907093545">Not oluştur</translation>
diff --git a/ash/strings/ash_strings_uk.xtb b/ash/strings/ash_strings_uk.xtb
index 7e0d6da3..738be049 100644
--- a/ash/strings/ash_strings_uk.xtb
+++ b/ash/strings/ash_strings_uk.xtb
@@ -1165,6 +1165,7 @@
 <translation id="7842569679327885685">Попередження. Експериментальна функція</translation>
 <translation id="7846634333498149051">Клавіатура</translation>
 <translation id="7848989271541991537">Переміщено на сторінку <ph name="PAGE_NUMBER" />, рядок <ph name="ROW_NUMBER" />, стовпець <ph name="COLUMN_NUMBER" />.</translation>
+<translation id="7851768487828137624">Canary</translation>
 <translation id="7860671499921112077">Щоб відкрити режим огляду, проведіть трьома пальцями вгору</translation>
 <translation id="7866482334467279021">ввімкнено</translation>
 <translation id="7868900307798234037">Розблокування відбитком</translation>
@@ -1244,6 +1245,7 @@
 <translation id="828708037801473432">Вимкнено</translation>
 <translation id="8297006494302853456">Слабкий</translation>
 <translation id="8308637677604853869">Попереднє меню</translation>
+<translation id="830868413617744215">Бета-версія</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">Вибрано вікно "<ph name="WINDOW_TITLE" />"</translation>
 <translation id="8351131234907093545">Створити нотатку</translation>
diff --git a/ash/strings/ash_strings_ur.xtb b/ash/strings/ash_strings_ur.xtb
index 89400d9..c759d34 100644
--- a/ash/strings/ash_strings_ur.xtb
+++ b/ash/strings/ash_strings_ur.xtb
@@ -1240,6 +1240,7 @@
 <translation id="828708037801473432">آف</translation>
 <translation id="8297006494302853456">کمزور</translation>
 <translation id="8308637677604853869">پچھلا مینو</translation>
+<translation id="830868413617744215">بی ٹا</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363"><ph name="WINDOW_TITLE" /> ونڈو کا انتخاب کیا گیا</translation>
 <translation id="8351131234907093545">نوٹ بنائیں</translation>
diff --git a/ash/strings/ash_strings_uz.xtb b/ash/strings/ash_strings_uz.xtb
index 5d9c90a..4718713 100644
--- a/ash/strings/ash_strings_uz.xtb
+++ b/ash/strings/ash_strings_uz.xtb
@@ -1251,6 +1251,7 @@
 <translation id="828708037801473432">Yoqilmagan</translation>
 <translation id="8297006494302853456">Zaif</translation>
 <translation id="8308637677604853869">Avvalgi menyu</translation>
+<translation id="830868413617744215">Beta</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363"><ph name="WINDOW_TITLE" /> oynasi tanlandi</translation>
 <translation id="8351131234907093545">Qayd yaratish</translation>
diff --git a/ash/strings/ash_strings_vi.xtb b/ash/strings/ash_strings_vi.xtb
index c0f1249..0960e5f 100644
--- a/ash/strings/ash_strings_vi.xtb
+++ b/ash/strings/ash_strings_vi.xtb
@@ -1166,6 +1166,7 @@
 <translation id="7842569679327885685">Cảnh báo: Tính năng thử nghiệm</translation>
 <translation id="7846634333498149051">Bàn phím</translation>
 <translation id="7848989271541991537">Đã di chuyển sang Trang <ph name="PAGE_NUMBER" />, hàng <ph name="ROW_NUMBER" />, cột <ph name="COLUMN_NUMBER" />.</translation>
+<translation id="7851768487828137624">Canary</translation>
 <translation id="7860671499921112077">Vuốt lên bằng 3 ngón tay để chuyển sang chế độ Tổng quan</translation>
 <translation id="7866482334467279021">đang bật</translation>
 <translation id="7868900307798234037">Mở khóa bằng vân tay</translation>
@@ -1245,6 +1246,7 @@
 <translation id="828708037801473432">Đang tắt</translation>
 <translation id="8297006494302853456">Yếu</translation>
 <translation id="8308637677604853869">Menu trước</translation>
+<translation id="830868413617744215">Beta</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">Đã chọn cửa sổ <ph name="WINDOW_TITLE" /></translation>
 <translation id="8351131234907093545">Tạo ghi chú</translation>
diff --git a/ash/strings/ash_strings_zh-CN.xtb b/ash/strings/ash_strings_zh-CN.xtb
index 858eeefd..78a824c3 100644
--- a/ash/strings/ash_strings_zh-CN.xtb
+++ b/ash/strings/ash_strings_zh-CN.xtb
@@ -306,6 +306,7 @@
 <translation id="2805756323405976993">应用</translation>
 <translation id="2814448776515246190">截取/录制局部屏幕</translation>
 <translation id="2819276065543622893">您将立即退出。</translation>
+<translation id="2822551631199737692">摄像头正在使用中</translation>
 <translation id="2825224105325558319">“<ph name="DISPLAY_NAME" />”不支持 <ph name="SPECIFIED_RESOLUTION" />。分辨率已改为 <ph name="FALLBACK_RESOLUTION" />。</translation>
 <translation id="2825619548187458965">任务栏</translation>
 <translation id="2831035692318564937">已开启,直到日出</translation>
@@ -807,6 +808,7 @@
 <translation id="5682642926269496722">当前用户帐号无法使用 Google 助理。</translation>
 <translation id="5689633613396158040">护眼模式可让您更舒适地在黯淡的光线下查看屏幕或阅读文字。点按即可更改护眼模式的开启时间或彻底关闭护眼模式。</translation>
 <translation id="5691772641933328258">无法识别指纹</translation>
+<translation id="5693255400847650006">麦克风正在使用中</translation>
 <translation id="570390244361237317">“所有应用”:若要访问各个应用,请使用箭头键导航</translation>
 <translation id="5707775774148071965">您的设备支持的数据传输速率高于数据线的数据传输速率。设备性能可能会受到限制。</translation>
 <translation id="5710450975648804523">“请勿打扰”模式已开启</translation>
@@ -981,6 +983,7 @@
 <translation id="6723839937902243910">电源</translation>
 <translation id="6727969043791803658">已连接,剩余电量为 <ph name="BATTERY_PERCENTAGE" />%</translation>
 <translation id="6732800389263199929">+<ph name="COUNT" /></translation>
+<translation id="6737983188036277605">摄像头和麦克风正在使用中</translation>
 <translation id="6739144137573853180">转到“设置”</translation>
 <translation id="6751052314767925245">由您的管理员强制执行</translation>
 <translation id="6751826523481687655">已启用性能跟踪</translation>
@@ -1159,6 +1162,7 @@
 <translation id="7842569679327885685">警告:实验性功能</translation>
 <translation id="7846634333498149051">键盘</translation>
 <translation id="7848989271541991537">已移至第 <ph name="PAGE_NUMBER" /> 页中第 <ph name="ROW_NUMBER" /> 行与第 <ph name="COLUMN_NUMBER" /> 列的相交处。</translation>
+<translation id="7851768487828137624">Canary</translation>
 <translation id="7860671499921112077">若要进入“概览”模式,请用三根手指向上滑动</translation>
 <translation id="7866482334467279021">开启</translation>
 <translation id="7868900307798234037">正在使用指纹解锁</translation>
@@ -1238,6 +1242,7 @@
 <translation id="828708037801473432">已关闭</translation>
 <translation id="8297006494302853456">弱</translation>
 <translation id="8308637677604853869">上一菜单</translation>
+<translation id="830868413617744215">测试版</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">已选择‘<ph name="WINDOW_TITLE" />’窗口</translation>
 <translation id="8351131234907093545">创建记事</translation>
diff --git a/ash/strings/ash_strings_zh-HK.xtb b/ash/strings/ash_strings_zh-HK.xtb
index e25d48861..84f720b 100644
--- a/ash/strings/ash_strings_zh-HK.xtb
+++ b/ash/strings/ash_strings_zh-HK.xtb
@@ -1168,6 +1168,7 @@
 <translation id="7842569679327885685">警告:實驗性功能</translation>
 <translation id="7846634333498149051">鍵盤</translation>
 <translation id="7848989271541991537">移咗去第 <ph name="PAGE_NUMBER" /> 頁,第 <ph name="ROW_NUMBER" /> 行,第<ph name="COLUMN_NUMBER" /> 欄。</translation>
+<translation id="7851768487828137624">Canary</translation>
 <translation id="7860671499921112077">用三隻手指向上滑動即可進入「概覽」</translation>
 <translation id="7866482334467279021">開啟</translation>
 <translation id="7868900307798234037">用緊指紋解鎖</translation>
@@ -1248,6 +1249,7 @@
 <translation id="828708037801473432">已關閉</translation>
 <translation id="8297006494302853456">弱</translation>
 <translation id="8308637677604853869">前一個選單</translation>
+<translation id="830868413617744215">測試版</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">揀咗「<ph name="WINDOW_TITLE" />」視窗</translation>
 <translation id="8351131234907093545">建立筆記</translation>
diff --git a/ash/strings/ash_strings_zh-TW.xtb b/ash/strings/ash_strings_zh-TW.xtb
index b474e36..74fd0923 100644
--- a/ash/strings/ash_strings_zh-TW.xtb
+++ b/ash/strings/ash_strings_zh-TW.xtb
@@ -1169,6 +1169,7 @@
 <translation id="7842569679327885685">警告:實驗功能</translation>
 <translation id="7846634333498149051">鍵盤</translation>
 <translation id="7848989271541991537">已移至第 <ph name="PAGE_NUMBER" /> 頁,第 <ph name="ROW_NUMBER" /> 列,第 <ph name="COLUMN_NUMBER" /> 欄。</translation>
+<translation id="7851768487828137624">Canary</translation>
 <translation id="7860671499921112077">以三指向上滑動即可進入「總覽」</translation>
 <translation id="7866482334467279021">開啟</translation>
 <translation id="7868900307798234037">指紋辨識成功,正在解鎖</translation>
@@ -1249,6 +1250,7 @@
 <translation id="828708037801473432">關閉</translation>
 <translation id="8297006494302853456">弱</translation>
 <translation id="8308637677604853869">前一個選單</translation>
+<translation id="830868413617744215">測試版</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">已選取「<ph name="WINDOW_TITLE" />」視窗</translation>
 <translation id="8351131234907093545">寫筆記</translation>
diff --git a/ash/strings/ash_strings_zu.xtb b/ash/strings/ash_strings_zu.xtb
index 9598982..c8999c4 100644
--- a/ash/strings/ash_strings_zu.xtb
+++ b/ash/strings/ash_strings_zu.xtb
@@ -1244,6 +1244,7 @@
 <translation id="828708037801473432">Valiwe</translation>
 <translation id="8297006494302853456">Buthakathaka</translation>
 <translation id="8308637677604853869">Imenyu yangaphambilini</translation>
+<translation id="830868413617744215">I-Beta</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">iwindi le-<ph name="WINDOW_TITLE" /> likhethiwe</translation>
 <translation id="8351131234907093545">Dala inothi</translation>
diff --git a/ash/system/bluetooth/bluetooth_detailed_view_impl.cc b/ash/system/bluetooth/bluetooth_detailed_view_impl.cc
index 8e91f44..7ed9f73 100644
--- a/ash/system/bluetooth/bluetooth_detailed_view_impl.cc
+++ b/ash/system/bluetooth/bluetooth_detailed_view_impl.cc
@@ -104,7 +104,7 @@
   // device views. When |view| is a child of |pair_new_device_view_| we know the
   // "pair new device" button was clicked, otherwise it must have been an
   // individual device view.
-  if (pair_new_device_view_->GetIndexOf(view) != -1) {
+  if (pair_new_device_view_->GetIndexOf(view).has_value()) {
     delegate()->OnPairNewDeviceRequested();
     return;
   }
@@ -124,8 +124,8 @@
   // spacing of views::ScrollView when it is not the last child.
   DCHECK(scroller());
 
-  disabled_view_ =
-      AddChildViewAt(new BluetoothDisabledDetailedView, GetIndexOf(scroller()));
+  disabled_view_ = AddChildViewAt(new BluetoothDisabledDetailedView,
+                                  GetIndexOf(scroller()).value());
   disabled_view_->SetID(
       static_cast<int>(BluetoothDetailedViewChildId::kDisabledView));
 
@@ -142,7 +142,7 @@
   DCHECK(scroller());
 
   pair_new_device_view_ =
-      AddChildViewAt(new views::View(), GetIndexOf(scroller()));
+      AddChildViewAt(new views::View(), GetIndexOf(scroller()).value());
   pair_new_device_view_->SetLayoutManager(std::make_unique<views::BoxLayout>(
       views::BoxLayout::Orientation::kVertical));
   pair_new_device_view_->SetID(
diff --git a/ash/system/bluetooth/bluetooth_detailed_view_legacy.cc b/ash/system/bluetooth/bluetooth_detailed_view_legacy.cc
index 7dd85e1..ec63bd7 100644
--- a/ash/system/bluetooth/bluetooth_detailed_view_legacy.cc
+++ b/ash/system/bluetooth/bluetooth_detailed_view_legacy.cc
@@ -165,7 +165,7 @@
     disabled_panel_ = CreateDisabledPanel();
     // Insert |disabled_panel_| before the scroller, since the scroller will
     // have unnecessary bottom border when it is not the last child.
-    AddChildViewAt(disabled_panel_, GetIndexOf(scroller()));
+    AddChildViewAt(disabled_panel_, GetIndexOf(scroller()).value());
     // |disabled_panel_| need to fill the remaining space below the title row
     // so that the inner contents of |disabled_panel_| are placed properly.
     box_layout()->SetFlexForView(disabled_panel_, 1);
diff --git a/ash/system/bluetooth/bluetooth_device_list_controller_unittest.cc b/ash/system/bluetooth/bluetooth_device_list_controller_unittest.cc
index 58c3d4b4..d3d0b6d 100644
--- a/ash/system/bluetooth/bluetooth_device_list_controller_unittest.cc
+++ b/ash/system/bluetooth/bluetooth_device_list_controller_unittest.cc
@@ -113,12 +113,12 @@
       EXPECT_TRUE(previously_connected_sub_header);
       EXPECT_TRUE(device_list_separator);
 
-      const unsigned int connected_index =
-          device_list()->GetIndexOf(connected_sub_header);
-      const unsigned int previously_connected_index =
-          device_list()->GetIndexOf(previously_connected_sub_header);
-      const unsigned int separator_index =
-          device_list()->GetIndexOf(device_list_separator);
+      const size_t connected_index =
+          device_list()->GetIndexOf(connected_sub_header).value();
+      const size_t previously_connected_index =
+          device_list()->GetIndexOf(previously_connected_sub_header).value();
+      const size_t separator_index =
+          device_list()->GetIndexOf(device_list_separator).value();
 
       EXPECT_EQ(0u, connected_index);
       EXPECT_EQ(connected_device_count + 1, separator_index);
@@ -129,7 +129,7 @@
     if (connected_device_count) {
       const TriView* connected_sub_header = FindConnectedSubHeader();
       EXPECT_TRUE(connected_sub_header);
-      EXPECT_EQ(0, device_list()->GetIndexOf(connected_sub_header));
+      EXPECT_EQ(0u, device_list()->GetIndexOf(connected_sub_header));
       EXPECT_EQ(connected_device_count + 1, device_list()->children().size());
       return;
     }
@@ -138,7 +138,7 @@
       const TriView* previously_connected_sub_header =
           FindPreviouslyConnectedSubHeader();
       EXPECT_TRUE(previously_connected_sub_header);
-      EXPECT_EQ(0, device_list()->GetIndexOf(previously_connected_sub_header));
+      EXPECT_EQ(0u, device_list()->GetIndexOf(previously_connected_sub_header));
       EXPECT_EQ(previously_connected_device_count + 1,
                 device_list()->children().size());
       return;
@@ -147,7 +147,7 @@
     const TriView* no_device_connected_sub_header =
         FindNoDeviceConnectedSubHeader();
     EXPECT_TRUE(no_device_connected_sub_header);
-    EXPECT_EQ(0, device_list()->GetIndexOf(no_device_connected_sub_header));
+    EXPECT_EQ(0u, device_list()->GetIndexOf(no_device_connected_sub_header));
     EXPECT_EQ(1u, device_list()->children().size());
   }
 
@@ -295,7 +295,7 @@
   CheckNotifyDeviceListChangedCount(/*call_count=*/2u);
 
   EXPECT_EQ(2u, device_list()->children().size());
-  EXPECT_EQ(1, device_list()->GetIndexOf(first_item));
+  EXPECT_EQ(1u, device_list()->GetIndexOf(first_item));
   EXPECT_TRUE(first_item->device_properties()->nickname.has_value());
   EXPECT_STREQ(kDeviceNickname,
                first_item->device_properties()->nickname.value().c_str());
diff --git a/ash/system/message_center/ash_notification_view.cc b/ash/system/message_center/ash_notification_view.cc
index 9c06e375..65eaec06 100644
--- a/ash/system/message_center/ash_notification_view.cc
+++ b/ash/system/message_center/ash_notification_view.cc
@@ -1520,8 +1520,8 @@
 
   int group_container_previous_height =
       grouped_notifications_container_->height();
-  int removed_index =
-      grouped_notifications_container_->GetIndexOf(to_be_removed);
+  size_t removed_index =
+      grouped_notifications_container_->GetIndexOf(to_be_removed).value();
   LOG(ERROR) << "Removed after animation";
   grouped_notifications_container_->RemoveChildViewT(to_be_removed).reset();
 
diff --git a/ash/system/message_center/ash_notification_view_unittest.cc b/ash/system/message_center/ash_notification_view_unittest.cc
index 9e1bf21..ef81cf0 100644
--- a/ash/system/message_center/ash_notification_view_unittest.cc
+++ b/ash/system/message_center/ash_notification_view_unittest.cc
@@ -336,9 +336,9 @@
 TEST_F(AshNotificationViewTest, UpdateViewsOrderingTest) {
   EXPECT_NE(nullptr, title_row());
   EXPECT_NE(nullptr, GetMessageLabel(notification_view()));
-  EXPECT_EQ(0, GetLeftContent(notification_view())->GetIndexOf(title_row()));
-  EXPECT_EQ(1, GetLeftContent(notification_view())
-                   ->GetIndexOf(GetMessageLabel(notification_view())));
+  EXPECT_EQ(0u, GetLeftContent(notification_view())->GetIndexOf(title_row()));
+  EXPECT_EQ(1u, GetLeftContent(notification_view())
+                    ->GetIndexOf(GetMessageLabel(notification_view())));
 
   std::unique_ptr<Notification> notification = CreateTestNotification();
   notification->set_title(std::u16string());
@@ -347,8 +347,8 @@
 
   EXPECT_EQ(nullptr, title_row());
   EXPECT_NE(nullptr, GetMessageLabel(notification_view()));
-  EXPECT_EQ(0, GetLeftContent(notification_view())
-                   ->GetIndexOf(GetMessageLabel(notification_view())));
+  EXPECT_EQ(0u, GetLeftContent(notification_view())
+                    ->GetIndexOf(GetMessageLabel(notification_view())));
 
   notification->set_title(u"title");
 
@@ -356,9 +356,9 @@
 
   EXPECT_NE(nullptr, title_row());
   EXPECT_NE(nullptr, GetMessageLabel(notification_view()));
-  EXPECT_EQ(0, GetLeftContent(notification_view())->GetIndexOf(title_row()));
-  EXPECT_EQ(1, GetLeftContent(notification_view())
-                   ->GetIndexOf(GetMessageLabel(notification_view())));
+  EXPECT_EQ(0u, GetLeftContent(notification_view())->GetIndexOf(title_row()));
+  EXPECT_EQ(1u, GetLeftContent(notification_view())
+                    ->GetIndexOf(GetMessageLabel(notification_view())));
 }
 
 TEST_F(AshNotificationViewTest, CreateOrUpdateTitle) {
diff --git a/ash/system/message_center/unified_message_list_view.cc b/ash/system/message_center/unified_message_list_view.cc
index 174e060c..2204dd49f 100644
--- a/ash/system/message_center/unified_message_list_view.cc
+++ b/ash/system/message_center/unified_message_list_view.cc
@@ -284,7 +284,7 @@
 
     // Also update `above_view_`'s bottom and `below_view_`'s top corner radius
     // when sliding.
-    int index = list_view_->GetIndexOf(this);
+    size_t index = list_view_->GetIndexOf(this).value();
     auto list_child_views = list_view_->children();
 
     above_view_ = (index == 0) ? nullptr : AsMVC(list_child_views[index - 1]);
@@ -292,7 +292,7 @@
       above_view_->message_view()->UpdateCornerRadius(
           kMessageCenterNotificationCornerRadius, kBubbleCornerRadius);
 
-    below_view_ = (index == static_cast<int>(list_child_views.size()) - 1)
+    below_view_ = (index == list_child_views.size() - 1)
                       ? nullptr
                       : AsMVC(list_child_views[index + 1]);
     if (below_view_)
@@ -305,14 +305,16 @@
         notification_id != GetNotificationId())
       return;
 
-    int index = list_view_->GetIndexOf(this);
-    if (index < 0)
+    absl::optional<size_t> index = list_view_->GetIndexOf(this);
+    if (!index.has_value())
       return;
     auto list_child_views = list_view_->children();
-    above_view_ = (index == 0) ? nullptr : AsMVC(list_child_views[index - 1]);
-    below_view_ = (index == static_cast<int>(list_child_views.size()) - 1)
+    above_view_ = (index == size_t{0})
                       ? nullptr
-                      : AsMVC(list_child_views[index + 1]);
+                      : AsMVC(list_child_views[index.value() - 1]);
+    below_view_ = (index == list_child_views.size() - 1)
+                      ? nullptr
+                      : AsMVC(list_child_views[index.value() + 1]);
 
     // Reset the corner radius of views to their normal state.
     ResetCornerRadius();
diff --git a/ash/system/privacy_hub/microphone_privacy_switch_controller.cc b/ash/system/privacy_hub/microphone_privacy_switch_controller.cc
new file mode 100644
index 0000000..38758fc
--- /dev/null
+++ b/ash/system/privacy_hub/microphone_privacy_switch_controller.cc
@@ -0,0 +1,49 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ash/system/privacy_hub/microphone_privacy_switch_controller.h"
+
+#include <memory>
+
+#include "ash/components/audio/cras_audio_handler.h"
+#include "ash/constants/ash_pref_names.h"
+#include "ash/public/cpp/session/session_observer.h"
+#include "ash/session/session_controller_impl.h"
+#include "ash/shell.h"
+#include "base/bind.h"
+#include "components/prefs/pref_service.h"
+
+namespace ash {
+
+MicrophonePrivacySwitchController::MicrophonePrivacySwitchController() {
+  Shell::Get()->session_controller()->AddObserver(this);
+}
+
+MicrophonePrivacySwitchController::~MicrophonePrivacySwitchController() {
+  Shell::Get()->session_controller()->RemoveObserver(this);
+}
+
+void MicrophonePrivacySwitchController::OnActiveUserPrefServiceChanged(
+    PrefService* pref_service) {
+  // Subscribing again to pref changes.
+  pref_change_registrar_ = std::make_unique<PrefChangeRegistrar>();
+  pref_change_registrar_->Init(pref_service);
+  pref_change_registrar_->Add(
+      prefs::kUserMicrophoneAllowed,
+      base::BindRepeating(
+          &MicrophonePrivacySwitchController::OnPreferenceChanged,
+          base::Unretained(this)));
+}
+
+void MicrophonePrivacySwitchController::OnPreferenceChanged() {
+  SetSystemMute();
+}
+
+void MicrophonePrivacySwitchController::SetSystemMute() {
+  const bool allowed = pref_change_registrar_->prefs()->GetBoolean(
+      prefs::kUserMicrophoneAllowed);
+  CrasAudioHandler::Get()->SetInputMute(!allowed);
+}
+
+}  // namespace ash
diff --git a/ash/system/privacy_hub/microphone_privacy_switch_controller.h b/ash/system/privacy_hub/microphone_privacy_switch_controller.h
new file mode 100644
index 0000000..76bf61b3
--- /dev/null
+++ b/ash/system/privacy_hub/microphone_privacy_switch_controller.h
@@ -0,0 +1,43 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef ASH_SYSTEM_PRIVACY_HUB_MICROPHONE_PRIVACY_SWITCH_CONTROLLER_H_
+#define ASH_SYSTEM_PRIVACY_HUB_MICROPHONE_PRIVACY_SWITCH_CONTROLLER_H_
+
+#include <memory>
+
+#include "ash/public/cpp/session/session_observer.h"
+#include "components/prefs/pref_change_registrar.h"
+
+namespace ash {
+
+// This controller keeps the KUserMicrophoneAllowed preference and the state of
+// the system input mute in sync.
+class MicrophonePrivacySwitchController : public SessionObserver {
+ public:
+  MicrophonePrivacySwitchController();
+  ~MicrophonePrivacySwitchController() override;
+
+  MicrophonePrivacySwitchController(const MicrophonePrivacySwitchController&) =
+      delete;
+  MicrophonePrivacySwitchController& operator=(
+      const MicrophonePrivacySwitchController&) = delete;
+
+  // SessionObserver:
+  void OnActiveUserPrefServiceChanged(PrefService* pref_service) override;
+
+ private:
+  // A callback that is invoked when the user changes KUserMicrophoneAllowed
+  // preference from the Privacy Hub UI.
+  void OnPreferenceChanged();
+
+  // Updates the microphone mute status according to the user preference.
+  void SetSystemMute();
+
+  std::unique_ptr<PrefChangeRegistrar> pref_change_registrar_;
+};
+
+}  // namespace ash
+
+#endif  // ASH_SYSTEM_PRIVACY_HUB_MICROPHONE_PRIVACY_SWITCH_CONTROLLER_H_
diff --git a/ash/system/privacy_hub/microphone_privacy_switch_controller_unittest.cc b/ash/system/privacy_hub/microphone_privacy_switch_controller_unittest.cc
new file mode 100644
index 0000000..dfff985
--- /dev/null
+++ b/ash/system/privacy_hub/microphone_privacy_switch_controller_unittest.cc
@@ -0,0 +1,57 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ash/system/privacy_hub/microphone_privacy_switch_controller.h"
+
+#include "ash/components/audio/cras_audio_handler.h"
+#include "ash/constants/ash_pref_names.h"
+#include "ash/public/cpp/microphone_mute_notification_delegate.h"
+#include "ash/session/session_controller_impl.h"
+#include "ash/shell.h"
+#include "ash/test/ash_test_base.h"
+
+namespace ash {
+
+class FakeMicrophoneMuteNotificationDelegate
+    : public MicrophoneMuteNotificationDelegate {
+ public:
+  absl::optional<std::u16string> GetAppAccessingMicrophone() override {
+    return absl::nullopt;
+  }
+};
+
+class MicrophonePrivacySwitchControllerTest : public AshTestBase {
+ public:
+  MicrophonePrivacySwitchControllerTest() = default;
+  ~MicrophonePrivacySwitchControllerTest() override = default;
+
+  // AshTestBase:
+  void SetUp() override {
+    AshTestBase::SetUp();
+
+    // This makes sure a globale instance of MicrophoneMuteNotificationDelegate
+    // is created before running tests.
+    delegate_ = std::make_unique<FakeMicrophoneMuteNotificationDelegate>();
+  }
+
+ protected:
+  void SetUserPref(bool allowed) {
+    Shell::Get()->session_controller()->GetActivePrefService()->SetBoolean(
+        prefs::kUserMicrophoneAllowed, allowed);
+  }
+
+ private:
+  std::unique_ptr<FakeMicrophoneMuteNotificationDelegate> delegate_;
+};
+
+TEST_F(MicrophonePrivacySwitchControllerTest, OnPreferenceChanged) {
+  static constexpr bool user_preferences[] = {false, true, false};
+
+  for (bool microphone_allowed : user_preferences) {
+    SetUserPref(microphone_allowed);
+    EXPECT_EQ(CrasAudioHandler::Get()->IsInputMuted(), !microphone_allowed);
+  }
+}
+
+}  // namespace ash
diff --git a/ash/webui/diagnostics_ui/backend/session_log_handler_unittest.cc b/ash/webui/diagnostics_ui/backend/session_log_handler_unittest.cc
index ea8fa7b..c0a2832 100644
--- a/ash/webui/diagnostics_ui/backend/session_log_handler_unittest.cc
+++ b/ash/webui/diagnostics_ui/backend/session_log_handler_unittest.cc
@@ -47,6 +47,7 @@
 namespace {
 
 constexpr char kHandlerFunctionName[] = "handlerFunctionName";
+constexpr char kRoutineLogFileName[] = "diagnostic_routine_log";
 
 mojom::SystemInfoPtr CreateSystemInfoPtr(const std::string& board_name,
                                          const std::string& marketing_name,
@@ -168,49 +169,38 @@
   base::FilePath selected_path_;
 };
 
-// Test class using NoSessionAshTestBase to ensure shell is available for
-// tests requiring DiagnosticsLogController singleton.
-class SessionLogHandlerTest : public NoSessionAshTestBase {
+class SessionLogHandlerTest : public testing::Test {
  public:
   SessionLogHandlerTest()
-      : NoSessionAshTestBase(
-            base::test::TaskEnvironment::TimeSource::MOCK_TIME),
+      : task_environment_(),
         task_runner_(new base::TestSimpleTaskRunner()),
         web_ui_(),
-        session_log_handler_() {}
-  ~SessionLogHandlerTest() override = default;
-
-  void SetUp() override {
+        session_log_handler_() {
     EXPECT_TRUE(temp_dir_.CreateUniqueTempDir());
-    // Setup to ensure ash::Shell can configure for tests.
-    ui::ResourceBundle::CleanupSharedInstance();
-    AshTestSuite::LoadTestResources();
-    NoSessionAshTestBase::SetUp();
-    DiagnosticsLogController::Initialize(
-        std::make_unique<FakeDiagnosticsBrowserDelegate>());
-    auto* controller = DiagnosticsLogController::Get();
-    telemetry_log_ = controller->GetTelemetryLog();
-    routine_log_ = controller->GetRoutineLog();
-    networking_log_ = controller->GetNetworkingLog();
+    base::FilePath routine_log_path =
+        temp_dir_.GetPath().AppendASCII(kRoutineLogFileName);
+    auto telemetry_log = std::make_unique<TelemetryLog>();
+    auto routine_log = std::make_unique<RoutineLog>(routine_log_path);
+    auto networking_log = std::make_unique<NetworkingLog>(temp_dir_.GetPath());
+    telemetry_log_ = telemetry_log.get();
+    routine_log_ = routine_log.get();
+    networking_log_ = networking_log.get();
     session_log_handler_ = std::make_unique<diagnostics::SessionLogHandler>(
         base::BindRepeating(&CreateTestSelectFilePolicy),
-        /*telemetry_log*/ nullptr, /*routine_log*/ nullptr,
-        /*networking_log*/ nullptr, &holding_space_client_);
+        std::move(telemetry_log), std::move(routine_log),
+        std::move(networking_log), &holding_space_client_);
     session_log_handler_->SetWebUIForTest(&web_ui_);
     session_log_handler_->RegisterMessages();
     session_log_handler_->SetTaskRunnerForTesting(task_runner_);
 
-    // Call handler to enable Javascript.
     base::ListValue args;
     web_ui_.HandleReceivedMessage("initialize", &args);
   }
 
-  void TearDown() override {
+  ~SessionLogHandlerTest() override {
     task_runner_.reset();
-    task_environment()->RunUntilIdle();
+    task_environment_.RunUntilIdle();
     ui::SelectFileDialog::SetFactory(nullptr);
-
-    NoSessionAshTestBase::TearDown();
   }
 
   void RunTasks() { task_runner_->RunPendingTasks(); }
@@ -224,15 +214,18 @@
   }
 
  protected:
+  base::test::TaskEnvironment task_environment_{
+      base::test::TaskEnvironment::TimeSource::MOCK_TIME};
   // Task runner for tasks posted by save session log handler.
   scoped_refptr<base::TestSimpleTaskRunner> task_runner_;
+
   content::TestWebUI web_ui_;
-  std::unique_ptr<SessionLogHandler> session_log_handler_;
-  base::ScopedTempDir temp_dir_;
+  std::unique_ptr<diagnostics::SessionLogHandler> session_log_handler_;
   TelemetryLog* telemetry_log_;
   RoutineLog* routine_log_;
   NetworkingLog* networking_log_;
   testing::NiceMock<ash::MockHoldingSpaceClient> holding_space_client_;
+  base::ScopedTempDir temp_dir_;
 };
 
 // Flaky; see crbug.com/1336726
@@ -240,7 +233,7 @@
   base::RunLoop run_loop;
   // Populate routine log
   routine_log_->LogRoutineStarted(mojom::RoutineType::kCpuStress);
-  task_environment()->RunUntilIdle();
+  task_environment_.RunUntilIdle();
 
   // Populate telemetry log
   const std::string expected_board_name = "board_name";
@@ -311,8 +304,52 @@
   EXPECT_EQ("--- Network Events ---", log_lines[17]);
 }
 
+// Test class using NoSessionAshTestBase to ensure shell is available for
+// tests requiring DiagnosticsLogController singleton.
+class SessionLogHandlerAshTest : public NoSessionAshTestBase {
+ public:
+  SessionLogHandlerAshTest() : task_runner_(new base::TestSimpleTaskRunner()) {}
+  ~SessionLogHandlerAshTest() override = default;
+
+  void SetUp() override {
+    // Setup to ensure ash::Shell can configure for tests.
+    ui::ResourceBundle::CleanupSharedInstance();
+    AshTestSuite::LoadTestResources();
+    // Setup feature list before setting up ash::Shell.
+    feature_list_.InitAndEnableFeature(
+        ash::features::kEnableLogControllerForDiagnosticsApp);
+    NoSessionAshTestBase::SetUp();
+    DiagnosticsLogController::Initialize(
+        std::make_unique<FakeDiagnosticsBrowserDelegate>());
+    session_log_handler_ = std::make_unique<SessionLogHandler>(
+        base::BindRepeating(&CreateTestSelectFilePolicy),
+        /*telemetry_log*/ nullptr,
+        /*routine_log*/ nullptr,
+        /*networking_log*/ nullptr,
+        /*holding_space_client*/ &holding_space_client_);
+    ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
+    session_log_handler_->SetWebUIForTest(&web_ui_);
+    session_log_handler_->RegisterMessages();
+    session_log_handler_->SetTaskRunnerForTesting(task_runner_);
+    // Call handler to enable Javascript.
+    base::ListValue args;
+    web_ui_.HandleReceivedMessage("initialize", &args);
+  }
+
+  void RunTasks() { task_runner_->RunPendingTasks(); }
+
+ protected:
+  base::test::ScopedFeatureList feature_list_;
+  std::unique_ptr<SessionLogHandler> session_log_handler_;
+  content::TestWebUI web_ui_;
+  base::ScopedTempDir temp_dir_;
+  testing::NiceMock<ash::MockHoldingSpaceClient> holding_space_client_;
+  // Task runner for tasks posted by save session log handler.
+  scoped_refptr<base::TestSimpleTaskRunner> task_runner_;
+};
+
 // Validates behavior when log controller is used to generate session log.
-TEST_F(SessionLogHandlerTest, SaveHeaderOnlySessionLog) {
+TEST_F(SessionLogHandlerAshTest, SaveSessionLogFlagEnabled) {
   base::RunLoop run_loop;
 
   // Simulate select file
diff --git a/ash/webui/shimless_rma/backend/shimless_rma_service.cc b/ash/webui/shimless_rma/backend/shimless_rma_service.cc
index abc058d..d860bc08 100644
--- a/ash/webui/shimless_rma/backend/shimless_rma_service.cc
+++ b/ash/webui/shimless_rma/backend/shimless_rma_service.cc
@@ -1372,6 +1372,8 @@
       case update_engine::Operation::NEED_PERMISSION_TO_UPDATE:
       case update_engine::Operation::UPDATED_NEED_REBOOT:
       case update_engine::Operation::VERIFYING:
+      case update_engine::Operation::CLEANUP_PREVIOUS_UPDATE:
+      case update_engine::Operation::UPDATED_BUT_DEFERRED:
         break;
       // Added to avoid lint error
       case update_engine::Operation::Operation_INT_MIN_SENTINEL_DO_NOT_USE_:
diff --git a/ash/webui/shimless_rma/backend/version_updater.cc b/ash/webui/shimless_rma/backend/version_updater.cc
index 193f707f..66ddd48 100644
--- a/ash/webui/shimless_rma/backend/version_updater.cc
+++ b/ash/webui/shimless_rma/backend/version_updater.cc
@@ -191,6 +191,8 @@
     case update_engine::Operation::NEED_PERMISSION_TO_UPDATE:
     case update_engine::Operation::UPDATED_NEED_REBOOT:
     case update_engine::Operation::VERIFYING:
+    case update_engine::Operation::CLEANUP_PREVIOUS_UPDATE:
+    case update_engine::Operation::UPDATED_BUT_DEFERRED:
       break;
     // Added to avoid lint error
     case update_engine::Operation::Operation_INT_MIN_SENTINEL_DO_NOT_USE_:
diff --git a/ash/webui/shimless_rma/mojom/shimless_rma.mojom b/ash/webui/shimless_rma/mojom/shimless_rma.mojom
index 8558d33..8400f196 100644
--- a/ash/webui/shimless_rma/mojom/shimless_rma.mojom
+++ b/ash/webui/shimless_rma/mojom/shimless_rma.mojom
@@ -227,6 +227,8 @@
   kAttemptingRollback = 8,
   kDisabled = 9,
   kNeedPermissionToUpdate = 10,
+  kCleanupPreviousUpdate = 11,
+  kUpdatedButDeferred = 12,
 };
 
 enum UpdateErrorCode {
diff --git a/ash/webui/shimless_rma/mojom/shimless_rma_mojom_traits.cc b/ash/webui/shimless_rma/mojom/shimless_rma_mojom_traits.cc
index b1d4f1a..ad1b8ce 100644
--- a/ash/webui/shimless_rma/mojom/shimless_rma_mojom_traits.cc
+++ b/ash/webui/shimless_rma/mojom/shimless_rma_mojom_traits.cc
@@ -403,6 +403,10 @@
       return MojomOsUpdateOperation::kDisabled;
     case update_engine::NEED_PERMISSION_TO_UPDATE:
       return MojomOsUpdateOperation::kNeedPermissionToUpdate;
+    case update_engine::CLEANUP_PREVIOUS_UPDATE:
+      return MojomOsUpdateOperation::kCleanupPreviousUpdate;
+    case update_engine::UPDATED_BUT_DEFERRED:
+      return MojomOsUpdateOperation::kUpdatedButDeferred;
     case update_engine::ERROR:
     case update_engine::Operation_INT_MIN_SENTINEL_DO_NOT_USE_:
     case update_engine::Operation_INT_MAX_SENTINEL_DO_NOT_USE_:
@@ -451,6 +455,12 @@
     case MojomOsUpdateOperation::kNeedPermissionToUpdate:
       *out = update_engine::NEED_PERMISSION_TO_UPDATE;
       return true;
+    case MojomOsUpdateOperation::kCleanupPreviousUpdate:
+      *out = update_engine::CLEANUP_PREVIOUS_UPDATE;
+      return true;
+    case MojomOsUpdateOperation::kUpdatedButDeferred:
+      *out = update_engine::UPDATED_BUT_DEFERRED;
+      return true;
   }
   NOTREACHED();
   return false;
diff --git a/base/values.cc b/base/values.cc
index 642373c..cbc1de9 100644
--- a/base/values.cc
+++ b/base/values.cc
@@ -138,21 +138,44 @@
   return json;
 }
 
-// This set of overloads are used to unwrap arguments from the reference
-// wrapper, and are used by ValueView when visiting its members and cloning
-// them.
-template <typename T>
-const T& UnwrapReference(std::reference_wrapper<const T> value) {
-  return value.get();
-}
-
-template <typename T>
-const T& UnwrapReference(const T& value) {
-  return value;
-}
-
 }  // namespace
 
+// A helper used to provide templated functions for cloning to Value, and
+// ValueView. This private class is used so the cloning method may have access
+// to the special private constructors in Value, created specifically for
+// cloning.
+class Value::CloningHelper {
+ public:
+  // This set of overloads are used to unwrap the reference wrappers, which are
+  // presented when cloning a ValueView.
+  template <typename T>
+  static const T& UnwrapReference(std::reference_wrapper<const T> value) {
+    return value.get();
+  }
+
+  template <typename T>
+  static const T& UnwrapReference(const T& value) {
+    return value;
+  }
+
+  // Returns a new Value object using the contents of the |storage| variant.
+  template <typename Storage>
+  static Value Clone(const Storage& storage) {
+    return absl::visit(
+        [](const auto& member) {
+          const auto& value = UnwrapReference(member);
+          using T = std::decay_t<decltype(value)>;
+          if constexpr (std::is_same_v<T, Value::Dict> ||
+                        std::is_same_v<T, Value::List>) {
+            return Value(value.Clone());
+          } else {
+            return Value(value);
+          }
+        },
+        storage);
+  }
+};
+
 // static
 Value Value::FromUniquePtrValue(std::unique_ptr<Value> val) {
   return std::move(*val);
@@ -275,7 +298,7 @@
 }
 
 Value Value::Clone() const {
-  return ValueView(*this).ToValue();
+  return CloningHelper::Clone(data_);
 }
 
 Value::~Value() = default;
@@ -1786,19 +1809,8 @@
     : data_view_(
           value.Visit([](const auto& member) { return ViewType(member); })) {}
 
-base::Value ValueView::ToValue() const {
-  return absl::visit(
-      [](const auto& member) {
-        const auto& value = UnwrapReference(member);
-        using T = std::decay_t<decltype(value)>;
-        if constexpr (std::is_same_v<T, Value::Dict> ||
-                      std::is_same_v<T, Value::List>) {
-          return Value(value.Clone());
-        } else {
-          return Value(value);
-        }
-      },
-      data_view_);
+Value ValueView::ToValue() const {
+  return Value::CloningHelper::Clone(data_view_);
 }
 
 ValueSerializer::~ValueSerializer() = default;
diff --git a/base/values.h b/base/values.h
index 04ca224..f49c3c0 100644
--- a/base/values.h
+++ b/base/values.h
@@ -1236,6 +1236,9 @@
   explicit Value(absl::monostate);
   explicit Value(DoubleStorage storage);
 
+  // A helper for static functions used for cloning a Value or a ValueView.
+  class CloningHelper;
+
   absl::variant<absl::monostate,
                 bool,
                 int,
diff --git a/build/config/c++/BUILD.gn b/build/config/c++/BUILD.gn
index e6d08c8d..90486ef 100644
--- a/build/config/c++/BUILD.gn
+++ b/build/config/c++/BUILD.gn
@@ -34,10 +34,6 @@
     "_LIBCPP_ABI_VERSION=2",
   ]
 
-  # Disable usages of __builtin_assume(...) when building libc++, as it causes
-  # some msan errors (crbug.com/1344905).
-  defines += [ "_LIBCPP_ASSERTIONS_DISABLE_ASSUME" ]
-
   if (!libcxx_is_shared) {
     # Don't leak any symbols on a static build.
     defines += [ "_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS" ]
diff --git a/build/config/fuchsia/test/fonts.shard.test-cml b/build/config/fuchsia/test/fonts.shard.test-cml
index 97569849..4928095 100644
--- a/build/config/fuchsia/test/fonts.shard.test-cml
+++ b/build/config/fuchsia/test/fonts.shard.test-cml
@@ -1,9 +1,27 @@
 {
+  children: [
+    {
+      name: "isolated_font_provider",
+      url: "fuchsia-pkg://fuchsia.com/fonts#meta/fonts.cm",
+    },
+  ],
+  offer: [
+    {
+      directory: "config-data",
+      subdir: "fonts",
+      from: "parent",
+      to: "#isolated_font_provider",
+    },
+    {
+      protocol: "fuchsia.logger.LogSink",
+      from: "parent",
+      to: "#isolated_font_provider",
+    },
+  ],
   use: [
     {
-      protocol: [
-        "fuchsia.fonts.Provider",
-      ],
+      protocol: "fuchsia.fonts.Provider",
+      from: "#isolated_font_provider",
     },
   ],
 }
diff --git a/build/fuchsia/linux_internal.sdk.sha1 b/build/fuchsia/linux_internal.sdk.sha1
index abbc422..9c240c5 100644
--- a/build/fuchsia/linux_internal.sdk.sha1
+++ b/build/fuchsia/linux_internal.sdk.sha1
@@ -1 +1 @@
-9.20220725.0.1
+9.20220725.1.1
diff --git a/chrome/android/java/res/menu/history_manager_menu.xml b/chrome/android/java/res/menu/history_manager_menu.xml
index d566968d..db3372e 100644
--- a/chrome/android/java/res/menu/history_manager_menu.xml
+++ b/chrome/android/java/res/menu/history_manager_menu.xml
@@ -27,12 +27,12 @@
             android:title="@string/close"
             app:showAsAction="ifRoom"
             app:iconTint="@color/default_icon_color_secondary_tint_list" />
-     </group>
         <item
             android:id="@+id/optout_menu_id"
             android:title="@string/history_clusters_disable_menu_item_label"
             android:visible="false"
             app:showAsAction="never" />
+     </group>
      <group
          android:id="@+id/selection_mode_menu_group"
          android:visible="false" >
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
index 329efa80..be56a01 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
@@ -815,12 +815,10 @@
             mUndoBarPopupController.initialize();
 
             OnClickListener tabSwitcherClickHandler = v -> {
-                if (ChromeFeatureList.isEnabled(ChromeFeatureList.TOOLBAR_IPH_ANDROID)) {
-                    Profile profile = mTabModelProfileSupplier.get();
-                    if (profile != null) {
-                        TrackerFactory.getTrackerForProfile(profile).notifyEvent(
-                                EventConstants.TAB_SWITCHER_BUTTON_CLICKED);
-                    }
+                Profile profile = mTabModelProfileSupplier.get();
+                if (profile != null) {
+                    TrackerFactory.getTrackerForProfile(profile).notifyEvent(
+                            EventConstants.TAB_SWITCHER_BUTTON_CLICKED);
                 }
 
                 if (getFullscreenManager().getPersistentFullscreenMode()) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/PartialCustomTabHeightStrategy.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/PartialCustomTabHeightStrategy.java
index 9550533..953b94c 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/PartialCustomTabHeightStrategy.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/PartialCustomTabHeightStrategy.java
@@ -784,6 +784,8 @@
         return displayMetrics.heightPixels;
     }
 
+    // status_bar_height is not a public framework resource, so we have to getIdentifier()
+    @SuppressWarnings("DiscouragedApi")
     private @Px int getStatusBarHeight() {
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
             return mActivity.getWindowManager()
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manager/AccountChooserDialog.java b/chrome/android/java/src/org/chromium/chrome/browser/password_manager/AccountChooserDialog.java
index 2ab613f..74e88df 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/password_manager/AccountChooserDialog.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/password_manager/AccountChooserDialog.java
@@ -213,6 +213,8 @@
         mDialog.show();
     }
 
+    // status_bar_height is not a public framework resource, so we have to getIdentifier()
+    @SuppressWarnings("DiscouragedApi")
     private void showTooltip(View view, String message, int layoutId) {
         Context context = view.getContext();
         Resources resources = context.getResources();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabUtils.java
index 73a20e3..78b944f 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabUtils.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabUtils.java
@@ -97,6 +97,8 @@
      * @param context The application context.
      * @return The estimated prerender size in pixels.
      */
+    // status_bar_height is not a public framework resource, so we have to getIdentifier()
+    @SuppressWarnings("DiscouragedApi")
     public static Rect estimateContentSize(Context context) {
         // The size is estimated as:
         // X = screenSizeX
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java
index 88cabaa..24f1334 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java
@@ -673,9 +673,7 @@
                         mAppMenuCoordinator.getAppMenuHandler(), R.id.manage_all_windows_menu_id);
             }
         }
-        if (ChromeFeatureList.isEnabled(ChromeFeatureList.TOOLBAR_IPH_ANDROID)) {
-            mPromoShownOneshotSupplier.set(didTriggerPromo);
-        }
+        mPromoShownOneshotSupplier.set(didTriggerPromo);
 
         if (mOfflineIndicatorController != null) {
             // Initialize the OfflineIndicatorInProductHelpController if the
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java
index 5e5e547..6f59d90 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java
@@ -364,8 +364,7 @@
      * @param startSurfaceSupplier Supplier of the StartSurface.
      * @param omniboxFocusStateSupplier Supplier to access the focus state of the omnibox.
      * @param intentMetadataOneshotSupplier Supplier with info about the launching intent.
-     * @param promoShownOneshotSupplier Supplier for whether a promo was shown on startup. Will only
-     *                                  be fulfilled when feature TOOLBAR_IPH_ANDROID is enabled.
+     * @param promoShownOneshotSupplier Supplier for whether a promo was shown on startup.
      * @param windowAndroid The {@link WindowAndroid} associated with the ToolbarManager.
      * @param isInOverviewModeSupplier Supplies whether the app is currently in overview mode.
      * @param modalDialogManagerSupplier Supplies the {@link ModalDialogManager}.
@@ -1368,22 +1367,20 @@
             mControlContainer.setReadyForBitmapCapture(true);
         }
 
-        if (ChromeFeatureList.isEnabled(ChromeFeatureList.TOOLBAR_IPH_ANDROID)) {
-            UserEducationHelper userEducationHelper = new UserEducationHelper(mActivity, mHandler);
-            View homeButton = mControlContainer.findViewById(R.id.home_button);
-            mHomeButtonCoordinator = new HomeButtonCoordinator(mActivity, homeButton,
-                    userEducationHelper, mIncognitoStateProvider::isIncognitoSelected,
-                    mIntentMetadataOneshotSupplier, mPromoShownOneshotSupplier,
-                    HomepageManager::isHomepageNonNtp, FeedFeatures::isFeedEnabled,
-                    mActivityTabProvider);
-            ToggleTabStackButton toggleTabStackButton =
-                    mControlContainer.findViewById(R.id.tab_switcher_button);
-            mToggleTabStackButtonCoordinator = new ToggleTabStackButtonCoordinator(mActivity,
-                    toggleTabStackButton, userEducationHelper,
-                    mIncognitoStateProvider::isIncognitoSelected, mIntentMetadataOneshotSupplier,
-                    mPromoShownOneshotSupplier, mLayoutStateProviderSupplier,
-                    mToolbar::setNewTabButtonHighlight, mActivityTabProvider);
-        }
+        UserEducationHelper userEducationHelper = new UserEducationHelper(mActivity, mHandler);
+        View homeButton = mControlContainer.findViewById(R.id.home_button);
+        mHomeButtonCoordinator = new HomeButtonCoordinator(mActivity, homeButton,
+                userEducationHelper, mIncognitoStateProvider::isIncognitoSelected,
+                mIntentMetadataOneshotSupplier, mPromoShownOneshotSupplier,
+                HomepageManager::isHomepageNonNtp, FeedFeatures::isFeedEnabled,
+                mActivityTabProvider);
+        ToggleTabStackButton toggleTabStackButton =
+                mControlContainer.findViewById(R.id.tab_switcher_button);
+        mToggleTabStackButtonCoordinator = new ToggleTabStackButtonCoordinator(mActivity,
+                toggleTabStackButton, userEducationHelper,
+                mIncognitoStateProvider::isIncognitoSelected, mIntentMetadataOneshotSupplier,
+                mPromoShownOneshotSupplier, mLayoutStateProviderSupplier,
+                mToolbar::setNewTabButtonHighlight, mActivityTabProvider);
         TraceEvent.end("ToolbarManager.initializeWithNative");
     }
 
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 69a8e2ab..d0467e17 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
@@ -260,7 +260,6 @@
     private ChromeMessageQueueMediator mMessageQueueMediator;
     private LayoutManagerImpl mLayoutManager;
     protected OneshotSupplier<ToolbarIntentMetadata> mIntentMetadataOneshotSupplier;
-    // This supplier only ever updated when feature TOOLBAR_IPH_ANDROID is enabled.
     protected OneshotSupplierImpl<Boolean> mPromoShownOneshotSupplier = new OneshotSupplierImpl<>();
     protected Supplier<Tab> mStartSurfaceParentTabSupplier;
     @Nullable
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkIntentDataProviderFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkIntentDataProviderFactory.java
index 8823de1..a209483e 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkIntentDataProviderFactory.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkIntentDataProviderFactory.java
@@ -162,6 +162,8 @@
      * @param resources
      * @return A list of shortcut items derived from the parser.
      */
+    // looking up resources from other apps requires the use of getIdentifier()
+    @SuppressWarnings("DiscouragedApi")
     private static List<ShortcutItem> parseShortcutItems(String webApkPackageName, Resources res) {
         int shortcutsResId =
                 res.getIdentifier(RESOURCE_SHORTCUTS, RESOURCE_XML_TYPE, webApkPackageName);
@@ -223,6 +225,8 @@
      * @param shareData Shared information from the share intent.
      * @param shareDataActivityClassName Name of WebAPK activity which received share intent.
      */
+    // looking up resources from other apps requires the use of getIdentifier()
+    @SuppressWarnings("DiscouragedApi")
     public static BrowserServicesIntentDataProvider create(Intent intent, String webApkPackageName,
             String url, int source, boolean forceNavigation,
             boolean canUseSplashFromContentProvider, ShareData shareData,
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/toolbar/top/ToolbarButtonIphTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/toolbar/top/ToolbarButtonIphTest.java
index a86fb79..8d931916 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/toolbar/top/ToolbarButtonIphTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/toolbar/top/ToolbarButtonIphTest.java
@@ -10,7 +10,6 @@
 
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doAnswer;
-import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
@@ -54,7 +53,7 @@
 /** Integration tests for showing IPH bubbles on the toolbar. */
 @RunWith(ChromeJUnit4ClassRunner.class)
 @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE})
-@Features.EnableFeatures({ChromeFeatureList.TOOLBAR_IPH_ANDROID, ChromeFeatureList.ENABLE_IPH})
+@Features.EnableFeatures({ChromeFeatureList.ENABLE_IPH})
 public class ToolbarButtonIphTest {
     @Rule
     public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule();
@@ -137,17 +136,6 @@
     @Test
     @MediumTest
     @Restriction({UiRestriction.RESTRICTION_TYPE_PHONE})
-    @Features.DisableFeatures(ChromeFeatureList.TOOLBAR_IPH_ANDROID)
-    public void testTabSwitcherEventDisabled() {
-        TestThreadUtils.runOnUiThreadBlocking(() -> {
-            mActivityTestRule.getActivity().findViewById(R.id.tab_switcher_button).performClick();
-        });
-        verify(mTracker, never()).notifyEvent(EventConstants.TAB_SWITCHER_BUTTON_CLICKED);
-    }
-
-    @Test
-    @MediumTest
-    @Restriction({UiRestriction.RESTRICTION_TYPE_PHONE})
     @FlakyTest(message = "https://crbug.com/1142979")
     public void testTabSwitcherButtonIph() throws InterruptedException {
         when(mTracker.shouldTriggerHelpUI(FeatureConstants.TAB_SWITCHER_BUTTON_FEATURE))
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/history_clusters/HistoryClustersMediatorTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/history_clusters/HistoryClustersMediatorTest.java
index 2b971748..7074d4c 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/history_clusters/HistoryClustersMediatorTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/history_clusters/HistoryClustersMediatorTest.java
@@ -545,15 +545,39 @@
         mMediator.setQueryState(QueryState.forQuery("query", ""));
         mMediator.startQuery("query");
         fulfillPromise(promise, mHistoryClustersResultWithQuery);
+        int initialSize = mModelList.size();
 
-        mMediator.deleteVisits(Arrays.asList(mVisit1, mVisit2, mVisit3));
-        assertThat(mVisitsForRemoval, Matchers.containsInAnyOrder(mVisit1, mVisit2, mVisit3));
+        mMediator.deleteVisits(Arrays.asList(mVisit1, mVisit3));
+        assertThat(mVisitsForRemoval, Matchers.containsInAnyOrder(mVisit1, mVisit3));
         verify(mMetricsLogger)
                 .recordVisitAction(HistoryClustersMetricsLogger.VisitAction.DELETED, mVisit1);
         verify(mMetricsLogger)
-                .recordVisitAction(HistoryClustersMetricsLogger.VisitAction.DELETED, mVisit2);
-        verify(mMetricsLogger)
                 .recordVisitAction(HistoryClustersMetricsLogger.VisitAction.DELETED, mVisit3);
+        // Deleting all of the visits in a cluster should also delete the ModelList entry for the
+        // cluster itself.
+        assertEquals(initialSize - 3, mModelList.size());
+
+        ListItem clusterItem = mModelList.get(0);
+        assertEquals(clusterItem.type, ItemType.CLUSTER);
+
+        ListItem visitItem = mModelList.get(1);
+        assertEquals(visitItem.type, ItemType.VISIT);
+        PropertyModel visitModel = visitItem.model;
+        assertEquals(mMediator.applyBolding(mVisit2.getTitle(), mVisit2.getTitleMatchPositions()),
+                visitModel.get(HistoryClustersItemProperties.TITLE));
+        assertEquals(
+                mMediator.applyBolding(mVisit2.getUrlForDisplay(), mVisit2.getUrlMatchPositions()),
+                visitModel.get(HistoryClustersItemProperties.URL));
+
+        ListItem relatedSearchesItem = mModelList.get(2);
+        assertEquals(relatedSearchesItem.type, ItemType.RELATED_SEARCHES);
+        PropertyModel relatedSearchesModel = relatedSearchesItem.model;
+        assertEquals(mCluster1.getRelatedSearches(),
+                relatedSearchesModel.get(HistoryClustersItemProperties.RELATED_SEARCHES));
+
+        mMediator.deleteVisits(Arrays.asList(mVisit2));
+        // Deleting the final visit should result in an entirely empty list.
+        assertEquals(0, mModelList.size());
     }
 
     @Test
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/toolbar/ToolbarTabControllerImplTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/toolbar/ToolbarTabControllerImplTest.java
index 9fcf062d..c1af5e9 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/toolbar/ToolbarTabControllerImplTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/toolbar/ToolbarTabControllerImplTest.java
@@ -31,7 +31,6 @@
 import org.chromium.base.test.BaseRobolectricTestRunner;
 import org.chromium.base.test.util.JniMocker;
 import org.chromium.chrome.browser.feature_engagement.TrackerFactory;
-import org.chromium.chrome.browser.flags.ChromeFeatureList;
 import org.chromium.chrome.browser.homepage.HomepageManager;
 import org.chromium.chrome.browser.profiles.Profile;
 import org.chromium.chrome.browser.profiles.ProfileJni;
@@ -167,7 +166,6 @@
     }
 
     @Test
-    @Features.EnableFeatures(ChromeFeatureList.TOOLBAR_IPH_ANDROID)
     public void openHomepage_handledByStartSurfaceNoProfile() {
         doReturn(true).when(mOverrideHomePageSupplier).get();
 
@@ -178,7 +176,6 @@
     }
 
     @Test
-    @Features.EnableFeatures(ChromeFeatureList.TOOLBAR_IPH_ANDROID)
     public void openHomepage_handledByStartSurfaceWithProfile() {
         doReturn(true).when(mOverrideHomePageSupplier).get();
         doReturn(mTracker).when(mTrackerSupplier).get();
@@ -190,18 +187,6 @@
     }
 
     @Test
-    @Features.DisableFeatures(ChromeFeatureList.TOOLBAR_IPH_ANDROID)
-    public void openHomepage_handledByStartSurface_disabledNtpButtonFeature() {
-        doReturn(true).when(mOverrideHomePageSupplier).get();
-        doReturn(mTracker).when(mTrackerSupplier).get();
-
-        mToolbarTabController.openHomepage();
-
-        verify(mTab, never()).loadUrl(any());
-        verify(mTracker, never()).notifyEvent(EventConstants.HOMEPAGE_BUTTON_CLICKED);
-    }
-
-    @Test
     public void openHomepage_loadsHomePage() {
         mToolbarTabController.openHomepage();
         String homePageUrl = HomepageManager.getHomepageUri();
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index e341545..67e0a81 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -9749,6 +9749,20 @@
         </message>
       </if>
 
+      <!--  Sync Confirmation section of the Signin Intercept first run experience flow -->
+      <message name="IDS_SYNC_CONFIRMATION_WELCOME_TITLE_SIGNIN_INTERCEPT" desc="Title of the sync confirmation dialog in the Signin Intercept flow, after the user creates a new profile through this flow.">
+        Welcome, <ph name="USERNAME">$1<ex>Bob</ex></ph>
+      </message>
+      <message name="IDS_SYNC_CONFIRMATION_SYNC_INFO_SIGNIN_INTERCEPT" desc="Information about sync on the sync confirmation dialog in the Signin Intercept flow">
+        Turn on sync to get your bookmarks, passwords, history, and more on this device and anywhere else you're syncing.
+      </message>
+      <message name="IDS_SYNC_CONFIRMATION_MANAGE_SYNC_BUTTON_LABEL" desc="Label of the button in the sync confirmation dialog of the Signin Intercept flow to open settings">
+        Manage sync
+      </message>
+      <message name="IDS_SYNC_CONFIRMATION_TURN_ON_SYNC_BUTTON_LABEL" desc="Label of the confirmation button in the sync confirmation dialog of the Signin Intercept flow">
+        Turn on sync
+      </message>
+
       <!--- Sync Confirmation section of the tab modal signin flow when sync is disabled by policy -->
       <message name="IDS_SYNC_DISABLED_CONFIRMATION_CHROME_SYNC_TITLE" desc="Title of the chrome sync section of the sync confirmation dialog in the tab modal signin flow when sync is disabled by policy">
         Sync is disabled by your administrator
diff --git a/chrome/app/generated_resources_grd/IDS_SYNC_CONFIRMATION_MANAGE_SYNC_BUTTON_LABEL.png.sha1 b/chrome/app/generated_resources_grd/IDS_SYNC_CONFIRMATION_MANAGE_SYNC_BUTTON_LABEL.png.sha1
new file mode 100644
index 0000000..fdde7d2
--- /dev/null
+++ b/chrome/app/generated_resources_grd/IDS_SYNC_CONFIRMATION_MANAGE_SYNC_BUTTON_LABEL.png.sha1
@@ -0,0 +1 @@
+11db154e7594e1cd147316ad6fecc3b9ab4cfc6a
\ No newline at end of file
diff --git a/chrome/app/generated_resources_grd/IDS_SYNC_CONFIRMATION_SYNC_INFO_SIGNIN_INTERCEPT.png.sha1 b/chrome/app/generated_resources_grd/IDS_SYNC_CONFIRMATION_SYNC_INFO_SIGNIN_INTERCEPT.png.sha1
new file mode 100644
index 0000000..fdde7d2
--- /dev/null
+++ b/chrome/app/generated_resources_grd/IDS_SYNC_CONFIRMATION_SYNC_INFO_SIGNIN_INTERCEPT.png.sha1
@@ -0,0 +1 @@
+11db154e7594e1cd147316ad6fecc3b9ab4cfc6a
\ No newline at end of file
diff --git a/chrome/app/generated_resources_grd/IDS_SYNC_CONFIRMATION_TURN_ON_SYNC_BUTTON_LABEL.png.sha1 b/chrome/app/generated_resources_grd/IDS_SYNC_CONFIRMATION_TURN_ON_SYNC_BUTTON_LABEL.png.sha1
new file mode 100644
index 0000000..fdde7d2
--- /dev/null
+++ b/chrome/app/generated_resources_grd/IDS_SYNC_CONFIRMATION_TURN_ON_SYNC_BUTTON_LABEL.png.sha1
@@ -0,0 +1 @@
+11db154e7594e1cd147316ad6fecc3b9ab4cfc6a
\ No newline at end of file
diff --git a/chrome/app/generated_resources_grd/IDS_SYNC_CONFIRMATION_WELCOME_TITLE_SIGNIN_INTERCEPT.png.sha1 b/chrome/app/generated_resources_grd/IDS_SYNC_CONFIRMATION_WELCOME_TITLE_SIGNIN_INTERCEPT.png.sha1
new file mode 100644
index 0000000..fdde7d2
--- /dev/null
+++ b/chrome/app/generated_resources_grd/IDS_SYNC_CONFIRMATION_WELCOME_TITLE_SIGNIN_INTERCEPT.png.sha1
@@ -0,0 +1 @@
+11db154e7594e1cd147316ad6fecc3b9ab4cfc6a
\ No newline at end of file
diff --git a/chrome/app/resources/chromium_strings_am.xtb b/chrome/app/resources/chromium_strings_am.xtb
index 3a42799..78ed760 100644
--- a/chrome/app/resources/chromium_strings_am.xtb
+++ b/chrome/app/resources/chromium_strings_am.xtb
@@ -43,6 +43,7 @@
 <translation id="2018879682492276940">መጫን አልተሳካም። እባክዎ እንደገና ይሞክሩ።</translation>
 <translation id="2020032459870799438">ሌሎች የእርስዎ ይለፍ ቃላት ከውሂብ ጥሰቶች እና ሌሎች የደህንነት ችግሮች ነጻ መሆናቸውን ለማረጋገጥ <ph name="BEGIN_LINK" />በመለያ ወደ Chromium ይግቡ<ph name="END_LINK" />።</translation>
 <translation id="2049376729098081731">በGoogle አገልግሎቶች ውስጥ ተጨማሪ ግላዊነት የተላበሱ ተሞክሮዎችን ለማግኘት የChromium ታሪክን ለማካተት እና ላለማካተት ይምረጡ</translation>
+<translation id="2088953378266246249">Chromium እንዴት የስር እውቅና ማረጋገጫዎቹን እንደሚያስተዳድር ላይ መረጃ</translation>
 <translation id="2174178932569897599">Chromiumን አብጅ</translation>
 <translation id="2174917724755363426">መጫኑ አልተጠናቀቀም። እርግጠኛ ነዎት መሰረዝ ይፈልጋሉ?</translation>
 <translation id="2185166961232948079">Chromium - በአውታረ መረብ ወደ መለያ መግባት - <ph name="PAGE_TITLE" /></translation>
@@ -365,6 +366,7 @@
 <translation id="9185526690718004400">&amp;Chromiumን ለማዘመን ዳግም ያስነሱት</translation>
 <translation id="9190841055450128916">Chromium (mDNS-In)</translation>
 <translation id="93478295209880648">Chromium በWindows XP ወይም Windows Vista ላይ ከእንግዲህ ስለማይደገፍ በአግባቡ ላይሰራ ይችላል</translation>
+<translation id="942598560705308788">በChromium የሚተዳደሩ የእውቅና ማረጋገጫዎች</translation>
 <translation id="945990405696787151">የወደፊቱን የChromium ዝመኔዎችን ለማግኘት፣ macOS 10.13 ወይም ከዚያ በኋላ ያለው ያስፈልግዎታል። ይህ ኮምፒተር OS X 10.11 እየተጠቀመ ነው።</translation>
 <translation id="965162752251293939">ማነው Chromiumን የሚጠቀመው?</translation>
 <translation id="967427899662692980">የChromiumን ጠንካራ ደህንነት ያግኙ</translation>
diff --git a/chrome/app/resources/chromium_strings_be.xtb b/chrome/app/resources/chromium_strings_be.xtb
index 61e3e5f..8130b48 100644
--- a/chrome/app/resources/chromium_strings_be.xtb
+++ b/chrome/app/resources/chromium_strings_be.xtb
@@ -43,6 +43,7 @@
 <translation id="2018879682492276940">Збой усталявання. Паўтарыце спробу.</translation>
 <translation id="2020032459870799438">Каб праверыць, ці не пагражае вашым іншым паролям раскрыццё ў выніку ўцечкі даных або іншых праблем з бяспекай, <ph name="BEGIN_LINK" />увайдзіце ў Chromium<ph name="END_LINK" />.</translation>
 <translation id="2049376729098081731">Выберыце, ці выкарыстоўваць гісторыю Chromium для персаналізацыі сэрвісаў Google</translation>
+<translation id="2088953378266246249">Інфармацыя пра тое, як Chromium кіруе сваімі каранёвымі сертыфікатамі</translation>
 <translation id="2174178932569897599">Наладзіць Chromium</translation>
 <translation id="2174917724755363426">Усталяванне не завершана. Вы сапраўды хочаце скасаваць яго?</translation>
 <translation id="2185166961232948079">Chromium – Уваход у сетку – <ph name="PAGE_TITLE" /></translation>
@@ -365,6 +366,7 @@
 <translation id="9185526690718004400">Перазапусціць, каб абнавіць &amp;Chromium</translation>
 <translation id="9190841055450128916">Chromium (mDNS-In)</translation>
 <translation id="93478295209880648">Браўзер Chromium больш не падтрымліваецца на Windows XP і Windows Vista, таму можа працаваць няправільна</translation>
+<translation id="942598560705308788">Сертыфікаты, якімі кіруе Chromium</translation>
 <translation id="945990405696787151">Каб атрымліваць наступныя абнаўленні Chromium, вам патрэбная версія macOS 10.13 ці пазнейшая. На гэтым камп'ютары выкарыстоўваецца OS X 10.11.</translation>
 <translation id="965162752251293939">Хто выкарыстоўвае Chromium?</translation>
 <translation id="967427899662692980">Засцеражыце браўзер Chromium ад небяспек</translation>
diff --git a/chrome/app/resources/chromium_strings_de.xtb b/chrome/app/resources/chromium_strings_de.xtb
index 8b65a53..742bf087 100644
--- a/chrome/app/resources/chromium_strings_de.xtb
+++ b/chrome/app/resources/chromium_strings_de.xtb
@@ -41,6 +41,7 @@
 <translation id="2018879682492276940">Fehler bei der Installation. Bitte versuch es noch einmal.</translation>
 <translation id="2020032459870799438">Wenn du prüfen möchtest, ob deine anderen Passwörter von Datenpannen und anderen Sicherheitsproblemen betroffen sind, <ph name="BEGIN_LINK" />melde dich in Chromium an<ph name="END_LINK" />.</translation>
 <translation id="2049376729098081731">Wähle, ob der Chromium-Verlauf dafür verwendet werden soll, die Google-Dienste stärker für dich zu personalisieren</translation>
+<translation id="2088953378266246249">Informationen zur Verwaltung von Root-Zertifikaten in Chromium</translation>
 <translation id="2174178932569897599">Chromium anpassen</translation>
 <translation id="2174917724755363426">Die Installation wurde nicht abgeschlossen. Möchtest du den Vorgang wirklich abbrechen?</translation>
 <translation id="2185166961232948079">Chromium – Netzwerkanmeldung – <ph name="PAGE_TITLE" /></translation>
@@ -363,6 +364,7 @@
 <translation id="9185526690718004400">Neu starten, um &amp;Chromium zu aktualisieren</translation>
 <translation id="9190841055450128916">Chromium (mDNS-In)</translation>
 <translation id="93478295209880648">Chromium funktioniert unter Umständen nicht ordnungsgemäß, da es unter Windows XP und Windows Vista nicht mehr unterstützt wird</translation>
+<translation id="942598560705308788">Von Chromium verwaltete Zertifikate</translation>
 <translation id="945990405696787151">Du benötigst macOS 10.13 oder höher, um zukünftige Chromium-Updates zu erhalten. Auf diesem Computer wird OS X 10.11 ausgeführt.</translation>
 <translation id="965162752251293939">Wer verwendet gerade Chromium?</translation>
 <translation id="967427899662692980">Höchste Sicherheit in Chromium erhalten</translation>
diff --git a/chrome/app/resources/chromium_strings_et.xtb b/chrome/app/resources/chromium_strings_et.xtb
index 01e082b5..f9bc2ef5 100644
--- a/chrome/app/resources/chromium_strings_et.xtb
+++ b/chrome/app/resources/chromium_strings_et.xtb
@@ -41,6 +41,7 @@
 <translation id="2018879682492276940">Installimine ebaõnnestus. Proovige uuesti.</translation>
 <translation id="2020032459870799438">Kui soovite kontrollida, kas teie muud paroolid on andmetega seotud rikkumiste ja muude turvaprobleemide eest kaitstud, <ph name="BEGIN_LINK" />logige Chromiumi sisse<ph name="END_LINK" />.</translation>
 <translation id="2049376729098081731">Valige, kas Google'i teenustes rohkem isikupärastatud kasutuskogemuse saamiseks kaasata Chromiumi ajalugu</translation>
+<translation id="2088953378266246249">Teave selle kohta, kuidas Chromium oma juursertifikaate haldab</translation>
 <translation id="2174178932569897599">Chromiumi kohandamine</translation>
 <translation id="2174917724755363426">Installimine ei ole lõpetatud. Kas soovite kindlasti tühistada?</translation>
 <translation id="2185166961232948079">Chromium – võrku sisselogimine – <ph name="PAGE_TITLE" /></translation>
@@ -364,6 +365,7 @@
 <translation id="9185526690718004400">Taaskäivitage &amp;Chromiumi värskendamiseks</translation>
 <translation id="9190841055450128916">Chromium (mDNS-In)</translation>
 <translation id="93478295209880648">Chromium ei pruugi õigesti töötada, kuna seda ei toetata enam Windows XP-s ega Windows Vistas</translation>
+<translation id="942598560705308788">Chromiumi hallatavad sertifikaadid</translation>
 <translation id="945990405696787151">Chromiumi tulevaste värskenduste saamiseks on teil vaja operatsioonisüsteemi macOS 10.13 või uuemat versiooni. See arvuti kasutab operatsioonisüsteemi OS X 10.11.</translation>
 <translation id="965162752251293939">Kes kasutab Chromiumi?</translation>
 <translation id="967427899662692980">Hankige Chromiumi parimad turbefunktsioonid</translation>
diff --git a/chrome/app/resources/chromium_strings_eu.xtb b/chrome/app/resources/chromium_strings_eu.xtb
index a8cbe330..31727633 100644
--- a/chrome/app/resources/chromium_strings_eu.xtb
+++ b/chrome/app/resources/chromium_strings_eu.xtb
@@ -43,6 +43,7 @@
 <translation id="2018879682492276940">Ezin izan da instalatu. Saiatu berriro.</translation>
 <translation id="2020032459870799438">Gainerako pasahitzak datuen isilpekotasunaren urratzeen eta beste segurtasun-arazoen aurka babestuta dauden egiaztatzeko, <ph name="BEGIN_LINK" />hasi saioa Chromium-en<ph name="END_LINK" />.</translation>
 <translation id="2049376729098081731">Aukeratu ea Chromium-eko historia kontuan hartu nahi duzun ala ez Google-ren zerbitzuak modu pertsonalizatuago batean erabiltzeko</translation>
+<translation id="2088953378266246249">Chromium-ek erroko ziurtagiriak kudeatzeko moduari buruzko informazioa</translation>
 <translation id="2174178932569897599">Pertsonalizatu Chromium</translation>
 <translation id="2174917724755363426">Ez da osatu instalazioa. Ziur bertan behera utzi nahi duzula?</translation>
 <translation id="2185166961232948079">Chromium - Hasi saioa sarean - <ph name="PAGE_TITLE" /></translation>
@@ -365,6 +366,7 @@
 <translation id="9185526690718004400">Abiaraz ezazu berriro &amp;Chromium eguneratzeko</translation>
 <translation id="9190841055450128916">Chromium (mDNS-In)</translation>
 <translation id="93478295209880648">Chromium-ek agian ez du behar bezala funtzionatuko, jada ez baita bateragarria Windows XP eta Windows Vista-rekin</translation>
+<translation id="942598560705308788">Chromium-ek kudeatutako ziurtagiriak</translation>
 <translation id="945990405696787151">Etorkizunean Chromium-en eguneratzeak eskuratzeko, macOS 10.13 edo bertsio berriago bat beharko duzu. Ordenagailu hau OS X 10.11 erabiltzen ari da.</translation>
 <translation id="965162752251293939">Nor erabiltzen ari da Chromium?</translation>
 <translation id="967427899662692980">Lortu Chromium-en segurtasun-aukerarik sendoena</translation>
diff --git a/chrome/app/resources/chromium_strings_fi.xtb b/chrome/app/resources/chromium_strings_fi.xtb
index 05d1828f..403da3b 100644
--- a/chrome/app/resources/chromium_strings_fi.xtb
+++ b/chrome/app/resources/chromium_strings_fi.xtb
@@ -41,6 +41,7 @@
 <translation id="2018879682492276940">Asennus epäonnistui. Yritä uudelleen.</translation>
 <translation id="2020032459870799438">Jos haluat tarkistaa, ovatko muut salasanasi turvassa tietosuojaloukkauksilta ja muilta tietoturvaongelmilta, <ph name="BEGIN_LINK" />kirjaudu Chromiumiin<ph name="END_LINK" />.</translation>
 <translation id="2049376729098081731">Valitse, käytetäänkö Chromium-historiaa personoituun kokemukseen Google-palveluissa</translation>
+<translation id="2088953378266246249">Tietoa siitä, miten Chromium hallinnoi juurivarmenteitaan</translation>
 <translation id="2174178932569897599">Yksilöi Chromiumia</translation>
 <translation id="2174917724755363426">Asennus ei ole valmis. Haluatko varmasti perua sen?</translation>
 <translation id="2185166961232948079">Chromium – Kirjautuminen verkkoon – <ph name="PAGE_TITLE" /></translation>
@@ -365,6 +366,7 @@
 <translation id="9185526690718004400">Päivitä &amp;Chromium käynnistämällä se uudelleen</translation>
 <translation id="9190841055450128916">Chromium (saapuva mDNS)</translation>
 <translation id="93478295209880648">Chromium ei välttämättä toimi oikein, koska se ei enää tue Windows XP:tä tai Windows Vistaa.</translation>
+<translation id="942598560705308788">Chromiumin hallinnoimat varmenteet</translation>
 <translation id="945990405696787151">Jotta saat tulevia Chromiumin päivityksiä, sinulla on oltava macOS 10.13 tai uudempi. Tällä tietokoneella on OS X 10.11.</translation>
 <translation id="965162752251293939">Kuka käyttää Chromiumia?</translation>
 <translation id="967427899662692980">Ota Chromiumin tehokkain suojaus käyttöön</translation>
diff --git a/chrome/app/resources/chromium_strings_gu.xtb b/chrome/app/resources/chromium_strings_gu.xtb
index 3dbdda6..b069269 100644
--- a/chrome/app/resources/chromium_strings_gu.xtb
+++ b/chrome/app/resources/chromium_strings_gu.xtb
@@ -43,6 +43,7 @@
 <translation id="2018879682492276940">ઇન્સ્ટૉલ કરવામાં નિષ્ફળ રહ્યાં. કૃપા કરીને ફરી પ્રયાસ કરો.</translation>
 <translation id="2020032459870799438">ડેટા ઉલ્લંઘન અને અન્ય સુરક્ષાની સમસ્યાથી તમારા અન્ય પાસવર્ડ સુરક્ષિત છે કે નહીં તે ચેક કરવા માટે, <ph name="BEGIN_LINK" />Chromiumમાં સાઇન ઇન કરો<ph name="END_LINK" />.</translation>
 <translation id="2049376729098081731">Googleની સેવાઓમાં વધુ મનગમતા બનાવેલા અનુભવો આપવા માટે, Chromium ઇતિહાસ શામેલ કરવો કે નહીં, તે પસંદ કરો</translation>
+<translation id="2088953378266246249">Chromium તેના રૂટ પ્રમાણપત્રો કેવી રીતે મેનેજ કરે છે તે વિશેની માહિતી</translation>
 <translation id="2174178932569897599">Chromium કસ્ટમાઇઝ કરો</translation>
 <translation id="2174917724755363426">ઇન્સ્ટૉલેશનની પ્રક્રિયા પૂર્ણ થઈ નથી. શું તમે ખરેખર રદ કરવા માગો છો?</translation>
 <translation id="2185166961232948079">Chromium - નેટવર્ક સાઇન ઇન - <ph name="PAGE_TITLE" /></translation>
@@ -367,6 +368,7 @@
 <translation id="9185526690718004400">&amp;Chromium અપડેટ કરવા માટે, ફરીથી લૉન્ચ કરો</translation>
 <translation id="9190841055450128916">Chromium (mDNS-In)</translation>
 <translation id="93478295209880648">Chromium યોગ્ય રીતે કાર્ય ન કરે તેવું બની શકે કારણ કે તે હવેથી Windows XP અથવા Windows Vista પર સમર્થિત નથી</translation>
+<translation id="942598560705308788">Chromium દ્વારા મેનેજ કરવામાં આવતા પ્રમાણપત્રો</translation>
 <translation id="945990405696787151">Chromiumની ભાવિ અપડેટ મેળવવા માટે, તમારે macOS 10.13 કે તે પછીના વર્ઝન પર અપડેટ કરવું જરૂરી રહેશે. આ કમ્પ્યુટર OS X 10.11નો ઉપયોગ કરે છે.</translation>
 <translation id="965162752251293939">કોણ Chromiumનો ઉપયોગ કરે છે?</translation>
 <translation id="967427899662692980">Chromiumની સૌથી વધુ મજબૂત સુરક્ષા મેળવો</translation>
diff --git a/chrome/app/resources/chromium_strings_ky.xtb b/chrome/app/resources/chromium_strings_ky.xtb
index 35c95c3..c448a61 100644
--- a/chrome/app/resources/chromium_strings_ky.xtb
+++ b/chrome/app/resources/chromium_strings_ky.xtb
@@ -43,6 +43,7 @@
 <translation id="2018879682492276940">Орнотулбай калды. Кайталап көрүңүз.</translation>
 <translation id="2020032459870799438">Башка сырсөздөрүңүздүн бекем корголгонун, ошондой эле коопсуздукка байланыштуу көйгөйлөрдү текшерүү үчүн <ph name="BEGIN_LINK" />Chromium'га кириңиз<ph name="END_LINK" />.</translation>
 <translation id="2049376729098081731">Chromium таржымалын Google кызматтарын жекелештирүү үчүн колдонуп же колдонбоону тандаңыз</translation>
+<translation id="2088953378266246249">Chromium негизги тастыктамаларын кантип башкара тургандыгы жөнүндө маалымат</translation>
 <translation id="2174178932569897599">Chromium'ду ыңгайлаштыруу</translation>
 <translation id="2174917724755363426">Орнотулган жок. Чын эле токтотосузбу?</translation>
 <translation id="2185166961232948079">Chromium – Тармакка кирүү – <ph name="PAGE_TITLE" /></translation>
@@ -367,6 +368,7 @@
 <translation id="9185526690718004400">&amp;Chromium'ду жаңыртуу үчүн кайра иштетиңиз</translation>
 <translation id="9190841055450128916">Chromium (mDNS-In)</translation>
 <translation id="93478295209880648">Chromium туура эмес иштеши мүмкүн, себеби ал Windows XP же Windows Vista'да мындан ары колдоого алынбайт.</translation>
+<translation id="942598560705308788">Chromium башкарган тастыктамалар</translation>
 <translation id="945990405696787151">Chromium жаңыртууларын алып туруу үчүн macOS 10.13 же андан кийинки версиясын орнотушуңуз керек. Бул компьютерде OS X 10.11 версиясы колдонулууда.</translation>
 <translation id="965162752251293939">Chromium'ду ким колдонуп жатат?</translation>
 <translation id="967427899662692980">Chromium'дун эң күчтүү коопсуздук тутумун орнотуп алыңыз</translation>
diff --git a/chrome/app/resources/chromium_strings_mr.xtb b/chrome/app/resources/chromium_strings_mr.xtb
index 89763b0..c5bd3df 100644
--- a/chrome/app/resources/chromium_strings_mr.xtb
+++ b/chrome/app/resources/chromium_strings_mr.xtb
@@ -42,6 +42,7 @@
 <translation id="2018879682492276940">इंस्टॉलेशन करता आले नाही. कृपया पुन्हा प्रयत्न करा.</translation>
 <translation id="2020032459870799438">तुमचे इतर पासवर्ड डेटा भंग आणि इतर सुरक्षा समस्यांपासून सुरक्षित आहेत हे तपासण्यासाठी, <ph name="BEGIN_LINK" />Chromium मध्ये साइन इन करा<ph name="END_LINK" />.</translation>
 <translation id="2049376729098081731">Google सेवांमध्ये आणखी पर्सनलाइझ केलेल्या अनुभवासाठी Chromium इतिहासाचा समावेश करायचा की नाही हे ठरवा</translation>
+<translation id="2088953378266246249">Chromium त्याची रूट सर्टिफिकेट कशी व्यवस्थापित करते याबद्दल माहिती</translation>
 <translation id="2174178932569897599">Chromium कस्टमाइझ करा</translation>
 <translation id="2174917724755363426">इंस्टॉलेशन पूर्ण झाले नाही. तुम्हाला नक्की रद्द करायचे आहे का?</translation>
 <translation id="2185166961232948079">Chromium - नेटवर्क साइन इन - <ph name="PAGE_TITLE" /></translation>
@@ -366,6 +367,7 @@
 <translation id="9185526690718004400">&amp;Chromium अपडेट करण्यासाठी पुन्हा लाँच करा</translation>
 <translation id="9190841055450128916">Chromium (mDNS-मध्ये)</translation>
 <translation id="93478295209880648">Chromium ला आता Windows XP किंवा Windows Vista चा सपोर्ट नसल्यामुळे ते आता कदाचित अचूकपणे काम करणार नाही</translation>
+<translation id="942598560705308788">Chromium द्वारे व्यवस्थापित केलेली सर्टिफिकेट</translation>
 <translation id="945990405696787151">भविष्यातील Chromium अपडेट मिळवण्यासाठी, तुमच्याकडे macOS 10.13 किंवा त्यावरील आवृत्ती असणे आवश्यक आहे. हा कॉंप्युटर OS X 10.11 ही आवृत्ती वापरत आहे.</translation>
 <translation id="965162752251293939">Chromium कोण वापरत आहे?</translation>
 <translation id="967427899662692980">Chrome ची सर्वात मजबूत सुरक्षा मिळवा</translation>
diff --git a/chrome/app/resources/chromium_strings_pt-BR.xtb b/chrome/app/resources/chromium_strings_pt-BR.xtb
index ee3f024..7183261 100644
--- a/chrome/app/resources/chromium_strings_pt-BR.xtb
+++ b/chrome/app/resources/chromium_strings_pt-BR.xtb
@@ -41,6 +41,7 @@
 <translation id="2018879682492276940">Falha na instalação. Tente novamente.</translation>
 <translation id="2020032459870799438">Para verificar se suas outras senhas estão protegidas contra violações de dados e outros problemas de segurança, <ph name="BEGIN_LINK" />faça login no Chromium<ph name="END_LINK" />.</translation>
 <translation id="2049376729098081731">Escolha se você quer incluir o histórico do Chromium para ter experiências mais personalizadas nos Serviços do Google</translation>
+<translation id="2088953378266246249">Informações sobre como o Chromium gerencia os certificados raiz</translation>
 <translation id="2174178932569897599">Personalizar o Chromium</translation>
 <translation id="2174917724755363426">A instalação não foi concluída. Tem certeza de que quer cancelar?</translation>
 <translation id="2185166961232948079">Chromium - Login na rede - <ph name="PAGE_TITLE" /></translation>
@@ -359,6 +360,7 @@
 <translation id="9185526690718004400">Reinicializar para atualizar o &amp;Chromium</translation>
 <translation id="9190841055450128916">Chromium (mDNS-In)</translation>
 <translation id="93478295209880648">É possível que o Chromium não funcione corretamente, porque ele não é mais compatível com o Windows XP ou Windows Vista</translation>
+<translation id="942598560705308788">Certificados gerenciados pelo Chromium</translation>
 <translation id="945990405696787151">Para receber as próximas atualizações do Chromium, você vai precisar do macOS 10.13 ou mais recente. Este computador está usando o OS X 10.11.</translation>
 <translation id="965162752251293939">Quem está usando o Chromium?</translation>
 <translation id="967427899662692980">Use o nível mais alto de segurança do Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_zh-CN.xtb b/chrome/app/resources/chromium_strings_zh-CN.xtb
index 782ae954..5f479b44 100644
--- a/chrome/app/resources/chromium_strings_zh-CN.xtb
+++ b/chrome/app/resources/chromium_strings_zh-CN.xtb
@@ -41,6 +41,7 @@
 <translation id="2018879682492276940">安装失败。请重试。</translation>
 <translation id="2020032459870799438">若要检查您的其他密码是否未曾遭遇数据泄露和其他安全问题,请<ph name="BEGIN_LINK" />登录 Chromium<ph name="END_LINK" />。</translation>
 <translation id="2049376729098081731">选择是否要包含 Chromium 历史记录以便在各款 Google 服务中获享更个性化的体验</translation>
+<translation id="2088953378266246249">与 Chromium 如何管理其根证书有关的信息</translation>
 <translation id="2174178932569897599">自定义 Chromium</translation>
 <translation id="2174917724755363426">尚未完成安装,确定要取消吗?</translation>
 <translation id="2185166961232948079">Chromium - 网络登录 - <ph name="PAGE_TITLE" /></translation>
@@ -363,6 +364,7 @@
 <translation id="9185526690718004400">重新启动以更新 Chromium(&amp;C)</translation>
 <translation id="9190841055450128916">Chromium (mDNS-In)</translation>
 <translation id="93478295209880648">Chromium 可能无法正常运行,因为它不再支持 Windows XP 和 Windows Vista</translation>
+<translation id="942598560705308788">由 Chromium 管理的证书</translation>
 <translation id="945990405696787151">若要接收后续 Chromium 更新,您需使用 macOS 10.13 或更高版本。该计算机目前使用的是 OS X 10.11。</translation>
 <translation id="965162752251293939">谁在使用 Chromium?</translation>
 <translation id="967427899662692980">获享 Chromium 的最强安全保护</translation>
diff --git a/chrome/app/resources/generated_resources_af.xtb b/chrome/app/resources/generated_resources_af.xtb
index d277ec83..0c6eb9cd 100644
--- a/chrome/app/resources/generated_resources_af.xtb
+++ b/chrome/app/resources/generated_resources_af.xtb
@@ -992,6 +992,7 @@
 <translation id="1916502483199172559">Verstek- rooi avatar</translation>
 <translation id="1918141783557917887">Kleiner</translation>
 <translation id="1920390473494685033">Kontakte</translation>
+<translation id="1921544956190977703">Jy het Chromse se sterkste sekuriteit teen gevaarlike webwerwe, aflaaie en uitbreidings</translation>
 <translation id="1921584744613111023"><ph name="DPI" /> dpi</translation>
 <translation id="1923468477587371721">Google-werwe soos Gmail, Drive en YouTube gebruik jou Google-rekeningtaal, tensy jy die individuele produk se taal verander het</translation>
 <translation id="1923539912171292317">Outomatiese klikke</translation>
@@ -1289,7 +1290,6 @@
 <translation id="2191754378957563929">Aan</translation>
 <translation id="2192505247865591433">Van:</translation>
 <translation id="2193365732679659387">Vertrou instellings</translation>
-<translation id="2194554416429452547">Chrome verken tydens proeflopies maniere om strooipos, bedrog, en deling tussen werwe te beperk. Chrome kan ook <ph name="ESTIMATE_INTERESTS_LINK" /> wat werwe kan gebruik om vir jou advertensies te wys. Jy kan jou belangstellings in Instellings bestuur.</translation>
 <translation id="2194856509914051091">Dinge om in ag te neem</translation>
 <translation id="2195331105963583686">Jy sal hierdie <ph name="DEVICE_TYPE" /> ná daardie tyd steeds kan gebruik, maar dit sal nie meer outomaties sagteware- en sekuriteitopdaterings kry nie</translation>
 <translation id="2195729137168608510">E-posbeskerming</translation>
@@ -1968,7 +1968,6 @@
 <translation id="2806891468525657116">Kortpad bestaan reeds</translation>
 <translation id="2807517655263062534">Lêers wat jy aflaai, verskyn hier</translation>
 <translation id="2809586584051668049">en nog <ph name="NUMBER_ADDITIONAL_DISABLED" /></translation>
-<translation id="2810235462964014915">Het versoek om <ph name="SITE_NAME" /> te lees en te verander</translation>
 <translation id="2811205483104563968">Rekeninge</translation>
 <translation id="2811564570599779918">Vermindering van strooipos en bedrog</translation>
 <translation id="2812049959647166806">Thunderbolt word nie gesteun nie</translation>
@@ -2093,6 +2092,7 @@
 <ph name="DOMAIN" /> vereis dat jy jou slimkaart ingesteek hou.</translation>
 <translation id="2923234477033317484">Verwyder hierdie rekening</translation>
 <translation id="2923644930701689793">Kry toegang tot jou foon se kameraspoel</translation>
+<translation id="292371311537977079">Chrome-instellings</translation>
 <translation id="2925658782192398150">Klaar; geen kwessies gekry nie</translation>
 <translation id="2926085873880284723">Laai verstekkortpaaie terug</translation>
 <translation id="2926620265753325858"><ph name="DEVICE_NAME" /> word nie gesteun nie.</translation>
@@ -2676,6 +2676,7 @@
 <translation id="3511528412952710609">Kort</translation>
 <translation id="3514335087372914653">Speletjiebeheer</translation>
 <translation id="3514373592552233661">Voorkeurnetwerke sal verkies word bo ander bekende netwerke indien meer as een beskikbaar is</translation>
+<translation id="3514647716686280777">Jy kry standaardsekuriteitbeskerming. Skakel Verbeterde Veiligblaai in Chrome-instellings aan om meer beskerming teen gevaarlike webwerwe, aflaaie en uitbreidings te kry.</translation>
 <translation id="3515983984924808886">Raak weer jou sekuriteitsleutel om terugstelling te bevestig. Alle inligting wat op die sekuriteitsleutel geberg is, insluitend sy PIN, sal uitgevee word.</translation>
 <translation id="3518985090088779359">Aanvaar, gaan voort</translation>
 <translation id="3519564332031442870">Drukbedienerkantdiens</translation>
@@ -5284,6 +5285,7 @@
 <translation id="6086846494333236931">Deur jou administrateur geïnstalleer</translation>
 <translation id="6087746524533454243">Soek jy na die blaaier se Meer Oor Bladsy? Besoek</translation>
 <translation id="6087960857463881712">Ongelooflike gesig</translation>
+<translation id="6088535503330933227">Chrome verken tans maniere om strooipos, bedrog, en deling tussen werwe te beperk. Chrome kan ook <ph name="ESTIMATE_INTERESTS_LINK" /> wat werwe kan gebruik om vir jou advertensies te wys. Jy kan jou belangstellings in Instellings bestuur.</translation>
 <translation id="608912389580139775">Klik die Boekmerk-ikoon om hierdie bladsy by jou leeslys te voeg</translation>
 <translation id="6091761513005122595">Deling is suksesvol gemonteer.</translation>
 <translation id="6093888419484831006">Kanselleer tans opdatering …</translation>
@@ -5472,6 +5474,7 @@
 <translation id="6278428485366576908">Tema</translation>
 <translation id="6278776436938569440">Verander ligging</translation>
 <translation id="6279183038361895380">Druk |<ph name="ACCELERATOR" />| om jou merker te wys</translation>
+<translation id="6279595948631688299">Voer geselekteerde sertifikaat uit …</translation>
 <translation id="6280215091796946657">Meld aan met 'n ander rekening</translation>
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6282180787514676874">{COUNT,plural, =1{Oorskry limiet van 1 vel papier}other{Oorskry limiet van {COUNT} velle papier}}</translation>
@@ -5586,6 +5589,7 @@
 <translation id="6398715114293939307">Verwyder Google Play Winkel</translation>
 <translation id="6398765197997659313">Gaan by volskerm uit</translation>
 <translation id="6399774419735315745">Spioen</translation>
+<translation id="6401458660421980302">Om hierdie oortjie na ’n ander toestel toe te stuur, moet jy daar by Chrome aanmeld</translation>
 <translation id="6401597285454423070">Jou rekenaar bevat ’n Vertroude Platform-module- (TPM)-sekuriteitstoestel, wat gebruik word om talle kritieke sekuriteitskenmerke in Chrome-bedryfstelsel te implementeer. Besoek die Chromebook-hulpsentrum om meer te wete te kom: https://support.google.com/chromebook/?p=tpm</translation>
 <translation id="6404187344102273690">Chromebook-speletjies</translation>
 <translation id="6404511346730675251">Wysig boekmerk</translation>
@@ -5822,6 +5826,7 @@
 <translation id="6619801788773578757">Voeg kioskprogram by</translation>
 <translation id="6619990499523117484">Bevestig jou PIN</translation>
 <translation id="6620254580880484313">Houernaam</translation>
+<translation id="6621391692573306628">Om hierdie oortjie na ’n ander toestel toe te stuur, moet jy op albei toestelle by Chrome aanmeld</translation>
 <translation id="6622980291894852883">Hou aan om prente te blokkeer</translation>
 <translation id="6624036901798307345">Tik in tabletmodus op die oortjietellernutsbalkknoppie om die nuwe oortjiestrook oop te maak wat miniprente van elke oortjie wys.</translation>
 <translation id="6624535038674360844"><ph name="FILE_NAME" /> het sensitiewe of gevaarlike inhoud. Vra sy eienaar om dit reg te stel.</translation>
diff --git a/chrome/app/resources/generated_resources_am.xtb b/chrome/app/resources/generated_resources_am.xtb
index c30ad0d..90662a5 100644
--- a/chrome/app/resources/generated_resources_am.xtb
+++ b/chrome/app/resources/generated_resources_am.xtb
@@ -1285,7 +1285,6 @@
 <translation id="2191754378957563929">አብራ</translation>
 <translation id="2192505247865591433">ከ፦</translation>
 <translation id="2193365732679659387">የእምነት ቅንብሮች</translation>
-<translation id="2194554416429452547">በሙከራዎች ጊዜ ላይ Chrome አይፈለጌ መልዕክትን፣ ማጭበርበርን እና በጣቢያዎች መካከል መጋራትን የሚገድብበትን መንገዶች እያሰሰ ነው። Chrome እንዲሁም ጣቢያዎች ማስታወቂያዎችን ለእርስዎ ለማሳየት ሊጠቀሙባቸው የሚችሏቸውን <ph name="ESTIMATE_INTERESTS_LINK" />። የእርስዎን ዝንባሌዎች በቅንብሮች ውስጥ ማቀናበር ይችላሉ።</translation>
 <translation id="2194856509914051091">ከግምት ውስጥ መግባት ያለባቸው ነገሮች</translation>
 <translation id="2195331105963583686">ከዚያ ጊዜ በኋላ አሁንም ይህን <ph name="DEVICE_TYPE" /> መጠቀም ይችላሉ፣ ነገር ግን ከእንግዲህ ራስ-ሰር የሶፍትዌር እና የደህንነት ዝማኔዎችን አያገኝም</translation>
 <translation id="2195729137168608510">የኢሜይል መከላከያ</translation>
@@ -1962,7 +1961,6 @@
 <translation id="2806891468525657116">አቋራጭ አስቀድሞ አለ</translation>
 <translation id="2807517655263062534">እርስዎ የሚያወርዷቸው ፋይሎች እዚህ ይመጣሉ</translation>
 <translation id="2809586584051668049">እና <ph name="NUMBER_ADDITIONAL_DISABLED" /> ተጨማሪ</translation>
-<translation id="2810235462964014915"><ph name="SITE_NAME" />ን አንብቦ ለመቀየር ተጠይቋል</translation>
 <translation id="2811205483104563968">መለያዎች</translation>
 <translation id="2811564570599779918">የአይፈለጌ መልዕክት እና የማጭበርበር ቅነሳ</translation>
 <translation id="2812049959647166806">Thunderbolt አይደገፍም</translation>
@@ -5274,6 +5272,7 @@
 <translation id="6086846494333236931">በእርስዎ አስተዳዳሪ የተጫነ</translation>
 <translation id="6087746524533454243">የአሳሹን ስለ ገጽ እየፈለጉ ነው? ይጎብኙ</translation>
 <translation id="6087960857463881712">ግሩም ፊት</translation>
+<translation id="6088535503330933227">Chrome የማስታወቂያ አይፈለጌ መልዕክትን፣ መጭበርበርን እና በጣቢያዎች መካከል መጋራትን የሚገድብባቸውን መንገዶች እያሰሰ ነው። Chrome ጣቢያዎች ማስታወቂያዎችን ለእርስዎ ለማሳየት ሊጠቀሙባቸው የሚችሏቸውንም <ph name="ESTIMATE_INTERESTS_LINK" />። የእርስዎን ዝንባሌዎች በቅንብሮች ውስጥ ማቀናበር ይችላሉ።</translation>
 <translation id="608912389580139775">ይህን ገጽ ወደ የንባብ ዝርዝርዎ ለማከል የዕልባት አዶውን ጠቅ ያድርጉ</translation>
 <translation id="6091761513005122595">አጋራ በተሳካ ሁኔታ ተፈናጥጧል።</translation>
 <translation id="6093888419484831006">ዝማኔን በመሰረዝ ላይ...</translation>
@@ -5900,6 +5899,7 @@
 <translation id="6709133671862442373">ዜና</translation>
 <translation id="6709357832553498500"><ph name="EXTENSIONNAME" />ን በመጠቀም አገናኝ</translation>
 <translation id="6710213216561001401">ቀዳሚ</translation>
+<translation id="6710394144992407503">በድረ-ገጾች ላይ ጽሑፍ በሚተይቡበት ጊዜ የፊደል ስህተቶችን ይፈትሹ</translation>
 <translation id="6711146141291425900">ለውርዶች <ph name="WEB_DRIVE" /> መለያን ያገናኙ</translation>
 <translation id="6712943853047024245">ለ<ph name="WEBSITE" /> ከዚህ የተጠቃሚ ስም ጋር የይለፍ ቃል አስቀድመው አስቀምጠዋል</translation>
 <translation id="6713233729292711163">የስራ መገለጫን አክል</translation>
@@ -6518,6 +6518,7 @@
 <translation id="7340757554212515731">የብልሽት ሪፖርቶችን እና የምርመራ እና የአጠቃቀም ውሂብን በራስ-ሰር ወደ Google ይልካል</translation>
 <translation id="7341834142292923918">የዚህ ጣቢያ መዳረሻ ይፈልጋል</translation>
 <translation id="7343372807593926528">እባክዎ ግብረመልስ ከመላክዎ በፊት ችግሩን ይግለጹ።</translation>
+<translation id="7344585835349671209">በመሣሪያዎ ላይ የኤችቲቲፒኤስ/ኤስኤስኤል የእውቅና ማረጋገጫዎችን ያስተዳድሩ</translation>
 <translation id="7345706641791090287">የይለፍ ቃልዎን ያረጋግጡ</translation>
 <translation id="7346909386216857016">እሺ፣ ገባኝ</translation>
 <translation id="7347452120014970266">ይህ በ<ph name="ORIGIN_NAME" /> እና የተጫኑ መተግበሪያዎች የተከማቹ ሁሉንም ውሂብ እና ኩኪዎች ያጠፋል።</translation>
@@ -6647,6 +6648,7 @@
 <translation id="7460045493116006516">እርስዎ የጫኑት አሁን ያለ ገጽታ</translation>
 <translation id="7461924472993315131">ሰካ</translation>
 <translation id="746216226901520237">በሚቀጥለው ጊዜ ስልክዎ የእርስዎን <ph name="DEVICE_TYPE" /> ይከፍታል። በቅንብሮች ውስጥ Smart Lock ማጥፋት ይችላሉ።</translation>
+<translation id="7464153996453281700">ክፍለ-አካሉ አስቀድሞ ወቅታዊ ነው</translation>
 <translation id="7464637891177137294">በGoogle መለያዎ <ph name="ACCOUNT" /> ውስጥ ያስቀምጡት</translation>
 <translation id="7465522323587461835">{NUM_OPEN_TABS,plural, =1{# ክፍት ትር፣ የትር ቅንጥብ ለመቀየር ይጫኑ}one{# ክፍት ትሮች፣ የትር ቅንጥብ ለመቀየር ይጫኑ}other{# ክፍት ትሮች፣ የትር ቅንጥብ ለመቀየር ይጫኑ}}</translation>
 <translation id="7465635034594602553">የሆነ ችግር ተፈጥሯል። እባክዎ ትንሽ ደቂቃዎች ይጠብቁና እንደገና <ph name="APP_NAME" />ን ያሂዱ።</translation>
@@ -7155,6 +7157,7 @@
 <translation id="793531125873261495">ምናባዊ ማሽንን በማውረድ ላይ ስህተት። እባክዎ እንደገና ይሞክሩ።</translation>
 <translation id="7935451262452051102"><ph name="PERCENT" />% ተጠናቅቋል</translation>
 <translation id="7939062555109487992">የላቁ አማራጮች</translation>
+<translation id="7939328347457537652">የመሣሪያ ማረጋገጫዎችን ያስተዳድሩ</translation>
 <translation id="7939412583708276221">ለማንኛውም አስቀምጥ</translation>
 <translation id="7942349550061667556">ቀይ</translation>
 <translation id="7943368935008348579">PDFዎችን አውርድ</translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb
index c350791..a8954ee4 100644
--- a/chrome/app/resources/generated_resources_ar.xtb
+++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -1280,7 +1280,6 @@
 <translation id="2191754378957563929">مفعّل</translation>
 <translation id="2192505247865591433">من:</translation>
 <translation id="2193365732679659387">إعدادات الثقة</translation>
-<translation id="2194554416429452547">‏يعمل Chrome خلال الفترات التجريبية على استكشاف طرق للحد من المحتوى غير المرغوب فيها وعمليات الاحتيال وعمليات مشاركة البيانات بين المواقع الإلكترونية. يعمل Chrome أيضًا على <ph name="ESTIMATE_INTERESTS_LINK" />، حيث يمكن أن تستخدم المواقع الإلكترونية تلك التقديرات لعرض إعلانات مخصَّصة لك. ويمكنك إدارة اهتماماتك من خلال الإعدادات.</translation>
 <translation id="2194856509914051091">ملاحظات مهمّة</translation>
 <translation id="2195331105963583686">سيظل بإمكانك استخدام هذا الجهاز <ph name="DEVICE_TYPE" /> بعد تلك الفترة، ولكن لن يتلقى الجهاز تحديثات تلقائية للبرامج والأمان بعد ذلك.</translation>
 <translation id="2195729137168608510">حماية البريد الإلكتروني</translation>
@@ -1957,7 +1956,6 @@
 <translation id="2806891468525657116">الاختصار موجود من قَبل</translation>
 <translation id="2807517655263062534">هنا تظهر الملفات التي تم تنزيلها</translation>
 <translation id="2809586584051668049">و<ph name="NUMBER_ADDITIONAL_DISABLED" /> من الإضافات الأخرى</translation>
-<translation id="2810235462964014915">الإضافات التي طلبت قراءة بيانات <ph name="SITE_NAME" /> وتغييرها</translation>
 <translation id="2811205483104563968">الحسابات</translation>
 <translation id="2811564570599779918">الحدّ من الرسائل غير المرغوب فيها والاحتيال</translation>
 <translation id="2812049959647166806">‏Thunderbolt غير متوافق.</translation>
@@ -5270,6 +5268,7 @@
 <translation id="6086846494333236931">تم التثبيت من قبل مشرفك</translation>
 <translation id="6087746524533454243">هل تبحث عن صفحة "لمحة عن" الخاصة بالمتصفِّح؟ انتقِل إلى</translation>
 <translation id="6087960857463881712">وجه رائع</translation>
+<translation id="6088535503330933227">‏يعمل Chrome على استكشاف طرق للحد من الإعلانات غير المرغوب فيها وعمليات الاحتيال وعمليات مشاركة البيانات بين المواقع الإلكترونية. يعمل Chrome أيضًا على <ph name="ESTIMATE_INTERESTS_LINK" />، حيث يمكن أن تستخدم المواقع الإلكترونية تلك التقديرات لعرض إعلانات مخصَّصة لك. ويمكنك إدارة اهتماماتك من خلال الإعدادات.</translation>
 <translation id="608912389580139775">لإضافة هذه الصفحة إلى "قائمة القراءة"، انقر على رمز الإشارات المرجعية.</translation>
 <translation id="6091761513005122595">تم تحميل المشاركة بنجاح.</translation>
 <translation id="6093888419484831006">جارٍ إلغاء التحديث...</translation>
@@ -7685,6 +7684,7 @@
 <translation id="8438566539970814960">تحسين عمليات البحث والتصفُّح</translation>
 <translation id="8439506636278576865">عرض ترجمة الصفحات المكتوبة بهذه اللغة</translation>
 <translation id="8440630305826533614">‏تطبيقات Linux</translation>
+<translation id="844063558976952706">إلغاء الحظر دومًا على الموقع الإلكتروني هذا</translation>
 <translation id="8443795068008423036">يُرجى التأكُّد من أنّ جهازك مُحدَّث، ثم إعادة المحاولة.</translation>
 <translation id="8446884382197647889">مزيد من المعلومات</translation>
 <translation id="8447409163267621480">‏تضمين إما مفتاح Ctrl أو Alt</translation>
diff --git a/chrome/app/resources/generated_resources_as.xtb b/chrome/app/resources/generated_resources_as.xtb
index 73ebbea..ffe5810 100644
--- a/chrome/app/resources/generated_resources_as.xtb
+++ b/chrome/app/resources/generated_resources_as.xtb
@@ -1287,7 +1287,6 @@
 <translation id="2191754378957563929">অন আছে</translation>
 <translation id="2192505247865591433">পৰা:</translation>
 <translation id="2193365732679659387">বিশ্বাসযোগ্যতাৰ ছেটিং</translation>
-<translation id="2194554416429452547">ট্ৰায়েলৰ সময়ত Chromeএ স্পাম, প্ৰৱঞ্চনা আৰু ছাইটৰ মাজত শ্বেয়াৰ কৰাটো সীমিত কৰাৰ উপায় বিচাৰি আছে। Chromeএ লগতে <ph name="ESTIMATE_INTERESTS_LINK" /> যাক ছাইটসমূহে আপোনাক বিজ্ঞাপন দেখুৱাবলৈ ব্যৱহাৰ কৰিব পাৰে। ছেটিঙত আপুনি আপোনাৰ আগ্ৰহ পৰিচালনা কৰিব পাৰে।</translation>
 <translation id="2194856509914051091">বিবেচনা কৰিব লগা বিষয়</translation>
 <translation id="2195331105963583686">আপুনি সেই সময়খিনিৰ পাছতো এই <ph name="DEVICE_TYPE" />টো ব্যৱহাৰ কৰি থাকিব পাৰিব কিন্তু এইটোৱে আৰু স্বয়ংক্ৰিয় ছফ্টৱেৰ আৰু সুৰক্ষাৰ আপডে’টসমূহ নাপাব</translation>
 <translation id="2195729137168608510">ইমেইল সুৰক্ষা</translation>
@@ -1966,7 +1965,6 @@
 <translation id="2806891468525657116">শ্বৰ্টকাট ইতিমধ্যে আছে</translation>
 <translation id="2807517655263062534">আপুনি ডাউনল’ড কৰা ফাইলসমূহ ইয়াত প্ৰদর্শিত হ’ব</translation>
 <translation id="2809586584051668049">আৰু <ph name="NUMBER_ADDITIONAL_DISABLED" />টা</translation>
-<translation id="2810235462964014915"><ph name="SITE_NAME" /> পঢ়িবলৈ আৰু সলনি কৰিবলৈ অনুৰোধ জনোৱা হৈছে</translation>
 <translation id="2811205483104563968">একাউণ্ট</translation>
 <translation id="2811564570599779918">স্পাম আৰু প্ৰৱঞ্চনা হ্ৰাসকৰণ</translation>
 <translation id="2812049959647166806">থাণ্ডাৰব’ল্টটো সমৰ্থিত নহয়</translation>
@@ -5280,6 +5278,7 @@
 <translation id="6086846494333236931">আপোনাৰ প্ৰশাসকে ইনষ্টল কৰিছে</translation>
 <translation id="6087746524533454243">ব্ৰাউজাৰৰ বিষয়ে পৃষ্ঠাখন বিচাৰিছে নেকি? ইয়ালৈ যাওক</translation>
 <translation id="6087960857463881712">অনন্য মুখমণ্ডল</translation>
+<translation id="6088535503330933227">Chromeএ বিজ্ঞাপনৰ স্পাম, প্ৰৱঞ্চনা আৰু ছাইটৰ মাজত শ্বেয়াৰ কৰাটো সীমিত কৰাৰ উপায় বিচাৰি আছে। Chromeএ লগতে <ph name="ESTIMATE_INTERESTS_LINK" /> যাক ছাইটসমূহে আপোনাক বিজ্ঞাপন দেখুৱাবলৈ ব্যৱহাৰ কৰিব পাৰে। ছেটিঙত আপুনি আপোনাৰ আগ্ৰহ পৰিচালনা কৰিব পাৰে।</translation>
 <translation id="608912389580139775">এই পৃষ্ঠাখন আপোনাৰ পঢ়াৰ সূচীখনত যোগ দিবলৈ, বুকমাৰ্ক চিহ্নটোত ক্লিক কৰক</translation>
 <translation id="6091761513005122595">শ্বেয়াৰ সফলভাৱে মাউণ্ট কৰা হ’ল।</translation>
 <translation id="6093888419484831006">আপডে'ট বাতিল কৰি থকা হৈছে...</translation>
diff --git a/chrome/app/resources/generated_resources_az.xtb b/chrome/app/resources/generated_resources_az.xtb
index 118b8406..e66febf 100644
--- a/chrome/app/resources/generated_resources_az.xtb
+++ b/chrome/app/resources/generated_resources_az.xtb
@@ -1281,7 +1281,6 @@
 <translation id="2191754378957563929">Aktiv</translation>
 <translation id="2192505247865591433">Kimdən:</translation>
 <translation id="2193365732679659387">Güvənlik ayarları</translation>
-<translation id="2194554416429452547">Sınaqlar zamanı Chrome spam, fırıldaqçılıq və saytlar arasında paylaşımı məhdudlaşdırmaq yollarını araşdırır. Chrome həmçinin saytların sizə reklam göstərmək üçün istifadə edə biləcəyi <ph name="ESTIMATE_INTERESTS_LINK" />. Maraqlarınızı Ayarlarda idarə edə bilərsiniz.</translation>
 <translation id="2194856509914051091">Nəzərə alınmalı amillər</translation>
 <translation id="2195331105963583686">Daha sonra bu <ph name="DEVICE_TYPE" /> cıhazını istifadə edə biləcəksiniz lakin, artıq avtomatik proqram təminatı və təhlükəsizlik güncəlləmələri almayacaqsınız.</translation>
 <translation id="2195729137168608510">E-poçt Müdafiəsi</translation>
@@ -1965,7 +1964,6 @@
 <translation id="2806891468525657116">Qısayol artıq mövcuddur</translation>
 <translation id="2807517655263062534">Endirilən fayllar burada görünür</translation>
 <translation id="2809586584051668049">və <ph name="NUMBER_ADDITIONAL_DISABLED" /> daha</translation>
-<translation id="2810235462964014915"><ph name="SITE_NAME" /> saytını oxumaq və dəyişmək tələb edilib</translation>
 <translation id="2811205483104563968">Hesablar</translation>
 <translation id="2811564570599779918">Spam və dələduzluğun azaldılması</translation>
 <translation id="2812049959647166806">Thunderbolt dəstəklənmir</translation>
@@ -5291,6 +5289,7 @@
 <translation id="6086846494333236931">Administratorunuz tərəfindən quraşdırılıb</translation>
 <translation id="6087746524533454243">Brauzerin haqqında səhifəsini axtarırsınız? Ziyarət edin</translation>
 <translation id="6087960857463881712">Zəhmli üz</translation>
+<translation id="6088535503330933227">Chrome reklam spamı, fırıldaqçılıq və saytlar arasında paylaşımı məhdudlaşdırmaq yollarını araşdırır. Chrome həmçinin saytların sizə reklam göstərmək üçün istifadə edə biləcəyi <ph name="ESTIMATE_INTERESTS_LINK" />. Maraqlarınızı Ayarlarda idarə edə bilərsiniz.</translation>
 <translation id="608912389580139775">Bu səhifəni oxu siyahınıza əlavə etmək üçün Əlfəcin ikonasına toxunun</translation>
 <translation id="6091761513005122595">Paylaşım başladı.</translation>
 <translation id="6093888419484831006">Güncəllənmə ləğv edilir...</translation>
diff --git a/chrome/app/resources/generated_resources_be.xtb b/chrome/app/resources/generated_resources_be.xtb
index 1cb8c1079..d8105d3 100644
--- a/chrome/app/resources/generated_resources_be.xtb
+++ b/chrome/app/resources/generated_resources_be.xtb
@@ -1280,7 +1280,6 @@
 <translation id="2191754378957563929">Уключана</translation>
 <translation id="2192505247865591433">Адкуль:</translation>
 <translation id="2193365732679659387">Налады надзейнасці</translation>
-<translation id="2194554416429452547">Пры тэсціраванні пробных функцый Chrome шукае спосабы абмежавання спама, махлярства і абмену данымі паміж сайтамі. Chrome таксама <ph name="ESTIMATE_INTERESTS_LINK" />, якія могуць выкарыстоўвацца іншымі сайтамі для паказу рэкламы. Кіраваць данымі пра свае інтарэсы можна ў наладах.</translation>
 <translation id="2194856509914051091">Інфармацыя для разгляду</translation>
 <translation id="2195331105963583686">Вы зможаце працягваць карыстацца гэтай прыладай <ph name="DEVICE_TYPE" />, але яна больш не будзе атрымліваць аўтаматычныя абнаўленні праграмнага забеспячэння і сістэмы бяспекі</translation>
 <translation id="2195729137168608510">Ахова электроннай пошты</translation>
@@ -1956,7 +1955,6 @@
 <translation id="2806891468525657116">Ярлык ужо існуе</translation>
 <translation id="2807517655263062534">Файлы, якія вы спампоўваеце, з'яўляюцца тут</translation>
 <translation id="2809586584051668049">і яшчэ <ph name="NUMBER_ADDITIONAL_DISABLED" /></translation>
-<translation id="2810235462964014915">Запыталі дазвол на чытанне і змяненне сайта <ph name="SITE_NAME" /></translation>
 <translation id="2811205483104563968">Уліковыя запісы</translation>
 <translation id="2811564570599779918">Змаганне са спамам і махлярствам</translation>
 <translation id="2812049959647166806">Thunderbolt не падтрымліваецца</translation>
@@ -5270,6 +5268,7 @@
 <translation id="6086846494333236931">Усталявана вашым адміністратарам</translation>
 <translation id="6087746524533454243">Шукаеце інфармацыю пра браўзер? Наведайце старонку</translation>
 <translation id="6087960857463881712">Захапленне</translation>
+<translation id="6088535503330933227">Chrome шукае спосабы абмежавання рэкламнага спама, махлярства і абмену данымі паміж сайтамі. Chrome таксама <ph name="ESTIMATE_INTERESTS_LINK" />, якія могуць выкарыстоўвацца іншымі сайтамі для паказу рэкламы. Кіраваць данымі пра свае інтарэсы можна ў наладах.</translation>
 <translation id="608912389580139775">Каб дадаць гэту старонку ў спіс на прагляд, націсніце на значок закладкі</translation>
 <translation id="6091761513005122595">Абагулены рэсурс падключаны.</translation>
 <translation id="6093888419484831006">Ідзе скасаванне абнаўлення...</translation>
@@ -5900,6 +5899,7 @@
 <translation id="6709133671862442373">Навіны</translation>
 <translation id="6709357832553498500">Падключыцца праз: <ph name="EXTENSIONNAME" /></translation>
 <translation id="6710213216561001401">Назад</translation>
+<translation id="6710394144992407503">Правяраць тэкст, які ўводзіцца на вэб-старонках, на арфаграфічныя памылкі</translation>
 <translation id="6711146141291425900">Звяжыце ўліковы запіс сэрвісу "<ph name="WEB_DRIVE" />", каб зрабіць магчымым спампоўванне на вэб-дыск</translation>
 <translation id="6712943853047024245">Вы ўжо захавалі пароль з гэтым імем карыстальніка для сайта <ph name="WEBSITE" /></translation>
 <translation id="6713233729292711163">Дадаць працоўны профіль</translation>
@@ -6518,6 +6518,7 @@
 <translation id="7340757554212515731">Аўтаматычна адпраўляе ў Google справаздачы аб збоях, а таксама даныя пра выкарыстанне і дыягностыку.</translation>
 <translation id="7341834142292923918">Запытвае доступ да гэтага сайта</translation>
 <translation id="7343372807593926528">Перш чым адправіць водгук, апішыце праблему.</translation>
+<translation id="7344585835349671209">Кіраванне сертыфікатамі HTTPS/SSL на прыладзе</translation>
 <translation id="7345706641791090287">Пацвердзіце пароль</translation>
 <translation id="7346909386216857016">OK</translation>
 <translation id="7347452120014970266">Будуць выдалены файлы cookie і даныя, захаваныя сайтам <ph name="ORIGIN_NAME" />, а таксама ўсталяваныя ім праграмы</translation>
@@ -6647,6 +6648,7 @@
 <translation id="7460045493116006516">Бягучая тэма, якую вы ўсталявалі</translation>
 <translation id="7461924472993315131">PIN-код</translation>
 <translation id="746216226901520237">Наступны раз прылада <ph name="DEVICE_TYPE" /> будзе разблакіравана з дапамогай вашага тэлефона. Вы можаце выключыць Smart Lock у Наладах.</translation>
+<translation id="7464153996453281700">Кампанент ужо абноўлены</translation>
 <translation id="7464637891177137294">Ён будзе захаваны ва Уліковым запісе Google <ph name="ACCOUNT" /></translation>
 <translation id="7465522323587461835">{NUM_OPEN_TABS,plural, =1{# адкрытая ўкладка. Націсніце, каб уключыць або выключыць панэль укладак}one{# адкрытая ўкладка. Націсніце, каб уключыць або выключыць панэль укладак}few{# адкрытыя ўкладкі. Націсніце, каб уключыць або выключыць панэль укладак}many{# адкрытых укладак. Націсніце, каб уключыць або выключыць панэль укладак}other{# адкрытай укладкі. Націсніце, каб уключыць або выключыць панэль укладак}}</translation>
 <translation id="7465635034594602553">Нешта пайшло не так. Пачакайце некалькі хвілін і запусціце праграму <ph name="APP_NAME" /> зноў.</translation>
@@ -7154,6 +7156,7 @@
 <translation id="793531125873261495">Памылка спампоўвання віртуальнай машыны. Паўтарыце спробу.</translation>
 <translation id="7935451262452051102">Завершана <ph name="PERCENT" />%</translation>
 <translation id="7939062555109487992">Дадатковыя параметры</translation>
+<translation id="7939328347457537652">Кіраванне сертыфікатамі прылады</translation>
 <translation id="7939412583708276221">Захаваць усё роўна</translation>
 <translation id="7942349550061667556">Чырвоны</translation>
 <translation id="7943368935008348579">Спампоўваць PDF-файлы</translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb
index 0f46036..a3a1b1b 100644
--- a/chrome/app/resources/generated_resources_bg.xtb
+++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -1285,7 +1285,6 @@
 <translation id="2191754378957563929">Включено</translation>
 <translation id="2192505247865591433">От:</translation>
 <translation id="2193365732679659387">Настройки за доверие</translation>
-<translation id="2194554416429452547">По време на експериментите Chrome проучва начини да ограничи спама, измамите и споделянето между сайтовете. Също така браузърът <ph name="ESTIMATE_INTERESTS_LINK" />, които сайтовете могат да използват, за да ви показват реклами. Имате възможност да управлявате интересите си от настройките.</translation>
 <translation id="2194856509914051091">Обмислете следните неща</translation>
 <translation id="2195331105963583686">След това пак ще можете да използвате устройството <ph name="DEVICE_TYPE" />, но то няма да получава повече автоматични актуализации на софтуера и сигурността</translation>
 <translation id="2195729137168608510">Защита за имейли</translation>
@@ -1964,7 +1963,6 @@
 <translation id="2806891468525657116">Прекият път вече съществува</translation>
 <translation id="2807517655263062534">Тук се показват изтеглените от вас файлове</translation>
 <translation id="2809586584051668049">и още <ph name="NUMBER_ADDITIONAL_DISABLED" /></translation>
-<translation id="2810235462964014915">Изпратена заявка за четене и промяна на <ph name="SITE_NAME" /></translation>
 <translation id="2811205483104563968">Профили</translation>
 <translation id="2811564570599779918">Намаляване на спама и измамите</translation>
 <translation id="2812049959647166806">Thunderbolt не се поддържа</translation>
@@ -5281,6 +5279,7 @@
 <translation id="6086846494333236931">Инсталирано от администратора ви</translation>
 <translation id="6087746524533454243">Търсите страницата с информация за браузъра? Посетете</translation>
 <translation id="6087960857463881712">Страхотно лице</translation>
+<translation id="6088535503330933227">Chrome проучва начини за ограничаване на рекламния спам, измамите и споделянето между сайтовете. Също така браузърът <ph name="ESTIMATE_INTERESTS_LINK" />, които сайтовете могат да използват, за да ви показват реклами. Имате възможност да управлявате интересите си от настройките.</translation>
 <translation id="608912389580139775">За да добавите тази страница към списъка си за четене, кликнете върху иконата на отметка</translation>
 <translation id="6091761513005122595">Дялът е свързан успешно.</translation>
 <translation id="6093888419484831006">Актуализирането се анулира...</translation>
@@ -7686,6 +7685,7 @@
 <translation id="8438566539970814960">Подобряване на търсенията и сърфирането</translation>
 <translation id="8439506636278576865">Предлагане страниците на този език да се превеждат</translation>
 <translation id="8440630305826533614">Приложения за Linux</translation>
+<translation id="844063558976952706">Винаги на този сайт</translation>
 <translation id="8443795068008423036">Проверете дали устройството ви е актуално и опитайте отново</translation>
 <translation id="8446884382197647889">Научете повече</translation>
 <translation id="8447409163267621480">Използвайте или Ctrl, или Alt</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb
index 553ea70..3c2cf3b 100644
--- a/chrome/app/resources/generated_resources_bn.xtb
+++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -1291,7 +1291,6 @@
 <translation id="2191754378957563929">চালু করা আছে</translation>
 <translation id="2192505247865591433">এর থেকে:</translation>
 <translation id="2193365732679659387">বিশ্বস্ততার সেটিংস</translation>
-<translation id="2194554416429452547">ট্রায়াল চলাকালীন, স্প্যাম, জালিয়াতি ও দুটি সাইটের মধ্যে শেয়ার সীমিত করার বিভিন্ন উপায় Chrome এক্সপ্লোর করছে। এছাড়া, Chrome <ph name="ESTIMATE_INTERESTS_LINK" /> লিঙ্কও দেখায় যা ব্যবহার করে সাইট আপনাকে বিজ্ঞাপন দেখাতে পারে। সেটিংস থেকে আপনার আগ্রহের বিষয় ম্যানেজ করতে পারবেন।</translation>
 <translation id="2194856509914051091">যা যা দেখে নেওয়া প্রয়োজন</translation>
 <translation id="2195331105963583686">সেই সময়ের পরে এখনও আপনি এই <ph name="DEVICE_TYPE" /> ব্যবহার করতে পারবেন, কিন্তু এখানে সফ্টওয়্যার এবং নিরাপত্তা সংক্রান্ত অটোমেটিক আপডেট আর পাবেন না</translation>
 <translation id="2195729137168608510">ইমেল আইডির সুরক্ষা</translation>
@@ -1970,7 +1969,6 @@
 <translation id="2806891468525657116">শর্টকাটটি আগে থেকেই আছে</translation>
 <translation id="2807517655263062534">ডাউনলোড করা ফাইল এখানে দেখা যাবে</translation>
 <translation id="2809586584051668049">এবং আরও <ph name="NUMBER_ADDITIONAL_DISABLED" />টি</translation>
-<translation id="2810235462964014915"><ph name="SITE_NAME" /> পড়ার জন্য এবং তাতে পরিবর্তন করার অনুরোধ করা হয়েছে</translation>
 <translation id="2811205483104563968">অ্যাকাউন্ট</translation>
 <translation id="2811564570599779918">স্প্যাম এবং জালিয়াতি হ্রাস</translation>
 <translation id="2812049959647166806">Thunderbolt কাজ করে না</translation>
@@ -5289,6 +5287,7 @@
 <translation id="6086846494333236931">আপনার প্রশাসক দ্বারা ইনস্টল করা হয়েছে</translation>
 <translation id="6087746524533454243">ব্রাউজার সম্পর্কিত পৃষ্ঠা খুঁজছেন? দেখুন</translation>
 <translation id="6087960857463881712">দুর্দান্ত চেহারা</translation>
+<translation id="6088535503330933227">বিজ্ঞাপন স্প্যাম, জালিয়াতি ও দুটি সাইটের মধ্যে শেয়ার সীমিত করার বিভিন্ন উপায় Chrome এক্সপ্লোর করছে। এছাড়া, Chrome <ph name="ESTIMATE_INTERESTS_LINK" /> লিঙ্কও দেখায় যা ব্যবহার করে সাইট আপনাকে বিজ্ঞাপন দেখাতে পারে। সেটিংস থেকে আপনার আগ্রহের বিষয় ম্যানেজ করতে পারবেন।</translation>
 <translation id="608912389580139775">আপনার পড়ার তালিকায় এই পৃষ্ঠাটি যোগ করতে বুকমার্ক আইকনে ক্লিক করুন</translation>
 <translation id="6091761513005122595">শেয়ার মাউন্ট করা হয়েছে।</translation>
 <translation id="6093888419484831006">আপডেট বাতিল হচ্ছে...</translation>
@@ -7703,6 +7702,7 @@
 <translation id="8438566539970814960">সার্চ এবং ব্রাউজিং অভিজ্ঞতা আরও উন্নত করুন</translation>
 <translation id="8439506636278576865">এই ভাষাতে পৃষ্ঠাগুলি অনুবাদ করার প্রস্তাব করে</translation>
 <translation id="8440630305826533614">Linux অ্যাপ</translation>
+<translation id="844063558976952706">সর্বদা এই সাইটে</translation>
 <translation id="8443795068008423036">আপনার ডিভাইসটি আপ-টু-ডেট আছে দেখে নিয়ে আবার চেষ্টা করুন</translation>
 <translation id="8446884382197647889">আরও জানুন</translation>
 <translation id="8447409163267621480">Ctrl অথবা Alt ব্যবহার করতে হবে</translation>
diff --git a/chrome/app/resources/generated_resources_bs.xtb b/chrome/app/resources/generated_resources_bs.xtb
index 78e0513f..6ae141c5 100644
--- a/chrome/app/resources/generated_resources_bs.xtb
+++ b/chrome/app/resources/generated_resources_bs.xtb
@@ -1289,7 +1289,6 @@
 <translation id="2191754378957563929">Uključeno</translation>
 <translation id="2192505247865591433">Šalje:</translation>
 <translation id="2193365732679659387">Postavke pouzdanosti</translation>
-<translation id="2194554416429452547">Tokom probnih perioda, Chrome istražuje načine da ograniči neželjenu poštu, prevaru i dijeljenje između web lokacija. Chrome također <ph name="ESTIMATE_INTERESTS_LINK" /> koja web lokacije mogu koristiti da vam prikazuju oglase. Interesovanjima možete upravljati u postavkama.</translation>
 <translation id="2194856509914051091">Stvari za razmatranje</translation>
 <translation id="2195331105963583686">I dalje ćete moći koristiti uređaj <ph name="DEVICE_TYPE" /> nakon tog datuma, ali on više neće primati automatska sigurnosna ažuriranja i ažuriranja softvera</translation>
 <translation id="2195729137168608510">Zaštita e-pošte</translation>
@@ -1968,7 +1967,6 @@
 <translation id="2806891468525657116">Prečica već postoji</translation>
 <translation id="2807517655263062534">Fajlovi koje preuzmete će se pojaviti ovdje</translation>
 <translation id="2809586584051668049">i još <ph name="NUMBER_ADDITIONAL_DISABLED" /></translation>
-<translation id="2810235462964014915">Zatraženo je čitanje i izmjena web lokacije <ph name="SITE_NAME" /></translation>
 <translation id="2811205483104563968">Računi</translation>
 <translation id="2811564570599779918">Smanjivanje neželjenog sadržaja i prevara</translation>
 <translation id="2812049959647166806">Thunderbolt nije podržan</translation>
@@ -5285,6 +5283,7 @@
 <translation id="6086846494333236931">Instalirao administrator</translation>
 <translation id="6087746524533454243">Tražite stranicu s informacijama o pregledniku? Posjetite</translation>
 <translation id="6087960857463881712">Oduševljeno lice</translation>
+<translation id="6088535503330933227">Chrome istražuje načine da ograniči neželjenu poštu oglasa, prevare i dijeljenje između web lokacija. Chrome također <ph name="ESTIMATE_INTERESTS_LINK" /> koja web lokacije mogu koristiti da vam prikazuju oglase. Interesovanjima možete upravljati u postavkama.</translation>
 <translation id="608912389580139775">Da dodate ovu stranicu na listu za čitanje, kliknite na ikonu Oznaka</translation>
 <translation id="6091761513005122595">Dijeljenje je uspješno aktivirano.</translation>
 <translation id="6093888419484831006">Otkazivanje ažuriranja...</translation>
@@ -7701,6 +7700,7 @@
 <translation id="8438566539970814960">Poboljšajte pretraživanje i pregledanje</translation>
 <translation id="8439506636278576865">Ponudi prijevod stranica na ovom jeziku</translation>
 <translation id="8440630305826533614">Linux aplikacije</translation>
+<translation id="844063558976952706">Uvijek na ovoj web-lokaciji</translation>
 <translation id="8443795068008423036">Provjerite je li uređaj ažuriran i pokušajte ponovo</translation>
 <translation id="8446884382197647889">Saznajte više</translation>
 <translation id="8447409163267621480">Uključite Ctrl ili Alt</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb
index 2add116..dacc732a 100644
--- a/chrome/app/resources/generated_resources_ca.xtb
+++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -1277,7 +1277,6 @@
 <translation id="2191754378957563929">Activat</translation>
 <translation id="2192505247865591433">De:</translation>
 <translation id="2193365732679659387">Configuració de confiança</translation>
-<translation id="2194554416429452547">Durant les proves, Chrome explora maneres de limitar el contingut brossa, el frau i la compartició entre llocs web. Chrome també <ph name="ESTIMATE_INTERESTS_LINK" />, que els llocs web poden utilitzar per mostrar-te anuncis. Pots gestionar els teus interessos a la configuració.</translation>
 <translation id="2194856509914051091">Aspectes que cal tenir en compte</translation>
 <translation id="2195331105963583686">Podràs continuar utilitzant aquest <ph name="DEVICE_TYPE" /> després d'aquest període de temps, pero no rebràs cap més actualització automàtica de programari i seguretat.</translation>
 <translation id="2195729137168608510">Protecció del correu electrònic</translation>
@@ -1953,7 +1952,6 @@
 <translation id="2806891468525657116">Aquesta drecera ja existeix</translation>
 <translation id="2807517655263062534">Aquí es mostren els fitxers baixats</translation>
 <translation id="2809586584051668049">i <ph name="NUMBER_ADDITIONAL_DISABLED" /> més</translation>
-<translation id="2810235462964014915">S'ha sol·licitat permís per llegir i canviar <ph name="SITE_NAME" /></translation>
 <translation id="2811205483104563968">Comptes</translation>
 <translation id="2811564570599779918">Reducció del frau i del contingut brossa</translation>
 <translation id="2812049959647166806">Els connectors Thunderbolt no s'admeten</translation>
@@ -5265,6 +5263,7 @@
 <translation id="6086846494333236931">Extensió instal·lada per l'administrador</translation>
 <translation id="6087746524533454243">Busques la pàgina d'informació del navegador? Ves a</translation>
 <translation id="6087960857463881712">Cara de fascinació</translation>
+<translation id="6088535503330933227">Chrome està explorant maneres de limitar el contingut brossa publicitari, el frau i la compartició entre llocs web. Chrome també <ph name="ESTIMATE_INTERESTS_LINK" />, que els llocs web poden utilitzar per mostrar-te anuncis. Pots gestionar els teus interessos a la configuració.</translation>
 <translation id="608912389580139775">Per afegir aquesta pàgina a la llista de lectura, fes clic a la icona d'adreça d'interès</translation>
 <translation id="6091761513005122595">L'ús compartit s'ha activat correctament.</translation>
 <translation id="6093888419484831006">S’està cancel·lant l’actualització...</translation>
@@ -7675,6 +7674,7 @@
 <translation id="8438566539970814960">Millora les cerques i la navegació</translation>
 <translation id="8439506636278576865">Proposa'm traduir pàgines en aquest idioma</translation>
 <translation id="8440630305826533614">Aplicacions per a Linux</translation>
+<translation id="844063558976952706">Sempre en aquest lloc</translation>
 <translation id="8443795068008423036">Comprova que el dispositiu estigui actualitzat i torna-ho a provar</translation>
 <translation id="8446884382197647889">Més informació</translation>
 <translation id="8447409163267621480">Inclou la tecla Ctrl o Alt</translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb
index 67b7f3c5..2f1a40a 100644
--- a/chrome/app/resources/generated_resources_cs.xtb
+++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -1280,7 +1280,6 @@
 <translation id="2191754378957563929">Zapnuto</translation>
 <translation id="2192505247865591433">Zdroj:</translation>
 <translation id="2193365732679659387">Nastavení důvěryhodnosti</translation>
-<translation id="2194554416429452547">Během zkušebních období Chrome zkoumá způsoby, jak omezit spam, podvody a sdílení mezi weby. Chrome také <ph name="ESTIMATE_INTERESTS_LINK" />, které mohou weby používat k zobrazování reklam. Své zájmy můžete spravovat v nastavení.</translation>
 <translation id="2194856509914051091">Co je třeba zvážit</translation>
 <translation id="2195331105963583686">I poté své zařízení <ph name="DEVICE_TYPE" /> budete moci nadále používat, ale již nebude dostávat automatické aktualizace softwaru a zabezpečení</translation>
 <translation id="2195729137168608510">Ochrana e-mailu</translation>
@@ -1956,7 +1955,6 @@
 <translation id="2806891468525657116">Zkratka už existuje</translation>
 <translation id="2807517655263062534">Zde se zobrazují stažené soubory</translation>
 <translation id="2809586584051668049">a další (<ph name="NUMBER_ADDITIONAL_DISABLED" />)</translation>
-<translation id="2810235462964014915">Vyžádáno čtení a změny webu <ph name="SITE_NAME" /></translation>
 <translation id="2811205483104563968">Účty</translation>
 <translation id="2811564570599779918">Omezení spamu a podvodů</translation>
 <translation id="2812049959647166806">Rozhraní Thunderbolt není podporováno</translation>
@@ -5268,6 +5266,7 @@
 <translation id="6086846494333236931">Nainstaloval administrátor</translation>
 <translation id="6087746524533454243">Hledáte stránku s informacemi o prohlížeči? Přejděte na stránku</translation>
 <translation id="6087960857463881712">Paráda</translation>
+<translation id="6088535503330933227">Chrome zkoumá způsoby, jak omezit reklamní spam, podvody a sdílení mezi weby. Chrome také <ph name="ESTIMATE_INTERESTS_LINK" />, které mohou weby používat k zobrazování reklam. Své zájmy můžete spravovat v nastavení.</translation>
 <translation id="608912389580139775">Pokud tuto stránku chcete přidat do seznamu ke čtení, klikněte na ikonu záložky</translation>
 <translation id="6091761513005122595">Sdílená složka byla úspěšně připojena.</translation>
 <translation id="6093888419484831006">Rušení aktualizace...</translation>
@@ -7683,6 +7682,7 @@
 <translation id="8438566539970814960">Vylepšit vyhledávání a procházení</translation>
 <translation id="8439506636278576865">Nabízet překlad stránek v tomto jazyce</translation>
 <translation id="8440630305826533614">Aplikace pro Linux</translation>
+<translation id="844063558976952706">Vždy na tomto webu</translation>
 <translation id="8443795068008423036">Aktualizujte zařízení a zkuste to znovu</translation>
 <translation id="8446884382197647889">Další informace</translation>
 <translation id="8447409163267621480">Zahrňte klávesu Ctrl nebo Alt</translation>
diff --git a/chrome/app/resources/generated_resources_cy.xtb b/chrome/app/resources/generated_resources_cy.xtb
index 339766d..f0dd3ad 100644
--- a/chrome/app/resources/generated_resources_cy.xtb
+++ b/chrome/app/resources/generated_resources_cy.xtb
@@ -1291,7 +1291,6 @@
 <translation id="2191754378957563929">Ymlaen</translation>
 <translation id="2192505247865591433">Gan:</translation>
 <translation id="2193365732679659387">Gosodiadau ymddiried</translation>
-<translation id="2194554416429452547">Yn ystod treialon, mae Chrome yn archwilio ffyrdd i gyfyngu ar sothach, twyll a rhannu rhwng gwefannau. Mae Chrome hefyd <ph name="ESTIMATE_INTERESTS_LINK" /> y gall gwefannau defnyddio i ddangos hysbysebion i chi. Gallwch reoli'ch diddordebau yn y gosodiadau.</translation>
 <translation id="2194856509914051091">Pethau i'w hystyried</translation>
 <translation id="2195331105963583686">Byddwch yn dal i allu defnyddio'r <ph name="DEVICE_TYPE" /> hwn ar ôl yr adeg honno, ond ni fydd yn derbyn diweddariadau meddalwedd a diogelwch yn awtomatig mwyach</translation>
 <translation id="2195729137168608510">Diogelwch E-bost</translation>
@@ -1970,7 +1969,6 @@
 <translation id="2806891468525657116">Mae'r llwybr byr yn bodoli eisoes</translation>
 <translation id="2807517655263062534">Mae'r ffeiliau rydych yn eu lawrlywytho'n ymddangos yma</translation>
 <translation id="2809586584051668049">a <ph name="NUMBER_ADDITIONAL_DISABLED" /> arall</translation>
-<translation id="2810235462964014915">Gofynnwyd i ddarllen a newid <ph name="SITE_NAME" /></translation>
 <translation id="2811205483104563968">Cyfrifon</translation>
 <translation id="2811564570599779918">Lleihau sothach a thwyll</translation>
 <translation id="2812049959647166806">Ni chefnogir Thunderbolt</translation>
@@ -5285,6 +5283,7 @@
 <translation id="6086846494333236931">Wedi'i osod gan eich gweinyddwr</translation>
 <translation id="6087746524533454243">Chwilio am dudalen ynghylch y porwr? Ewch i</translation>
 <translation id="6087960857463881712">Wyneb anhygoel</translation>
+<translation id="6088535503330933227">Mae Chrome yn archwilio ffyrdd o gyfyngu ar sothach hysbysebion, twyll a rhannu rhwng gwefannau. Mae Chrome hefyd <ph name="ESTIMATE_INTERESTS_LINK" /> y gall gwefannau defnyddio i ddangos hysbysebion i chi. Gallwch reoli'ch diddordebau yn y gosodiadau.</translation>
 <translation id="608912389580139775">I ychwanegu'r dudalen hon at eich rhestr ddarllen, cliciwch yr eicon Nod Tudalen</translation>
 <translation id="6091761513005122595">Mae'r gyfran wedi'i gosod yn llwyddiannus.</translation>
 <translation id="6093888419484831006">Wrthi'n canslo'r diweddariad...</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb
index 61786bd..5468bb1 100644
--- a/chrome/app/resources/generated_resources_da.xtb
+++ b/chrome/app/resources/generated_resources_da.xtb
@@ -1290,7 +1290,6 @@
 <translation id="2191754378957563929">Til</translation>
 <translation id="2192505247865591433">Fra:</translation>
 <translation id="2193365732679659387">Tillidsindstillinger</translation>
-<translation id="2194554416429452547">Under prøveperioder kigger Chrome nærmere på, hvordan spam, svindel og deling mellem websites kan begrænses. Chrome <ph name="ESTIMATE_INTERESTS_LINK" />, som websites kan bruge til at vise dig annoncer. Du kan administrere dine interesser i indstillingerne.</translation>
 <translation id="2194856509914051091">Vigtige oplysninger</translation>
 <translation id="2195331105963583686">Du kan stadig bruge denne <ph name="DEVICE_TYPE" /> efter denne dato, men den vil ikke længere modtage automatiske software- og sikkerhedsopdateringer.</translation>
 <translation id="2195729137168608510">Mail-beskyttelse</translation>
@@ -1969,7 +1968,6 @@
 <translation id="2806891468525657116">Genvejen findes allerede</translation>
 <translation id="2807517655263062534">Dine downloadede filer vises her</translation>
 <translation id="2809586584051668049">og <ph name="NUMBER_ADDITIONAL_DISABLED" /> mere</translation>
-<translation id="2810235462964014915">Har anmodet om tilladelse til at læse og redigere <ph name="SITE_NAME" /></translation>
 <translation id="2811205483104563968">Konti</translation>
 <translation id="2811564570599779918">Reducering af spam og svindel</translation>
 <translation id="2812049959647166806">Thunderbolt understøttes ikke</translation>
@@ -5284,6 +5282,7 @@
 <translation id="6086846494333236931">Installeret af din administrator</translation>
 <translation id="6087746524533454243">Leder du efter siden Om for browseren? Gå til</translation>
 <translation id="6087960857463881712">Fantastisk-smiley</translation>
+<translation id="6088535503330933227">Chrome kigger nærmere på, hvordan spam, svindel og deling mellem websites kan begrænses. Chrome <ph name="ESTIMATE_INTERESTS_LINK" />, som websites kan bruge til at vise dig annoncer. Du kan administrere dine interesser i indstillingerne.</translation>
 <translation id="608912389580139775">Klik på bogmærkeikonet for at føje denne side til din læseliste</translation>
 <translation id="6091761513005122595">Delingen blev anvendt.</translation>
 <translation id="6093888419484831006">Annullerer opdatering...</translation>
@@ -7694,6 +7693,7 @@
 <translation id="8438566539970814960">Gør søgninger og browsing endnu bedre</translation>
 <translation id="8439506636278576865">Tilbyd at oversætte sider på dette sprog</translation>
 <translation id="8440630305826533614">Linux-apps</translation>
+<translation id="844063558976952706">Altid på dette website</translation>
 <translation id="8443795068008423036">Tjek, at din enhed er opdateret, og prøv igen</translation>
 <translation id="8446884382197647889">Få flere oplysninger</translation>
 <translation id="8447409163267621480">Skal indeholde enten Ctrl eller Alt</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb
index 8a8a9db..6499937 100644
--- a/chrome/app/resources/generated_resources_de.xtb
+++ b/chrome/app/resources/generated_resources_de.xtb
@@ -1274,7 +1274,6 @@
 <translation id="2191754378957563929">An</translation>
 <translation id="2192505247865591433">von</translation>
 <translation id="2193365732679659387">Vertrauenseinstellungen</translation>
-<translation id="2194554416429452547">Während Tests sucht Chrome nach Möglichkeiten, Spam, Betrug und die Datenweitergabe zwischen Websites einschränken. Chrome <ph name="ESTIMATE_INTERESTS_LINK" />, die von anderen Websites dazu verwendet werden können, dir Werbung zu zeigen. Du kannst deine Interessen in den Einstellungen verwalten.</translation>
 <translation id="2194856509914051091">Wichtige Punkte</translation>
 <translation id="2195331105963583686">Du kannst dieses Gerät (<ph name="DEVICE_TYPE" />) auch danach verwenden, erhältst jedoch keine automatischen Software- und Sicherheitsupdates mehr</translation>
 <translation id="2195729137168608510">E-Mail-Schutz</translation>
@@ -1950,7 +1949,6 @@
 <translation id="2806891468525657116">Verknüpfung ist bereits vorhanden</translation>
 <translation id="2807517655263062534">Hier werden heruntergeladene Dateien angezeigt</translation>
 <translation id="2809586584051668049">und <ph name="NUMBER_ADDITIONAL_DISABLED" /> weitere</translation>
-<translation id="2810235462964014915">Abrufen und Ändern von <ph name="SITE_NAME" /> beantragt</translation>
 <translation id="2811205483104563968">Konten</translation>
 <translation id="2811564570599779918">Spam- und Betrugsreduzierung</translation>
 <translation id="2812049959647166806">Thunderbolt wird nicht unterstützt</translation>
@@ -5261,6 +5259,7 @@
 <translation id="6086846494333236931">Von deinem Administrator installiert</translation>
 <translation id="6087746524533454243">Suchst du die Seite „Über den Browser“? Gehe zu</translation>
 <translation id="6087960857463881712">Cooles Gesicht</translation>
+<translation id="6088535503330933227">Chrome sucht nach Möglichkeiten, Anzeigenspam, Betrug und die Datenweitergabe zwischen Websites einzuschränken. Chrome <ph name="ESTIMATE_INTERESTS_LINK" />, die von anderen Websites dazu verwendet werden können, dir Werbung zu zeigen. Du kannst deine Interessen in den Einstellungen verwalten.</translation>
 <translation id="608912389580139775">Wenn du deiner Leseliste diese Seite hinzufügen möchtest, klicke auf das Lesezeichensymbol</translation>
 <translation id="6091761513005122595">Freigabe wurde erfolgreich bereitgestellt.</translation>
 <translation id="6093888419484831006">Aktualisierung wird abgebrochen...</translation>
@@ -5885,6 +5884,7 @@
 <translation id="6709133671862442373">Nachrichten</translation>
 <translation id="6709357832553498500">Über <ph name="EXTENSIONNAME" /> verbinden</translation>
 <translation id="6710213216561001401">Zurück</translation>
+<translation id="6710394144992407503">Bei der Eingabe von Text auf Webseiten nach Tippfehlern suchen</translation>
 <translation id="6711146141291425900"><ph name="WEB_DRIVE" />-Konto für Downloads verknüpfen</translation>
 <translation id="6712943853047024245">Du hast bereits ein Passwort zu diesem Nutzernamen für <ph name="WEBSITE" /> gespeichert</translation>
 <translation id="6713233729292711163">Arbeitsprofil hinzufügen</translation>
@@ -6503,6 +6503,7 @@
 <translation id="7340757554212515731">Absturzberichte, Diagnose- und Nutzungsdaten werden automatisch an Google gesendet</translation>
 <translation id="7341834142292923918">Möchte auf diese Website zugreifen</translation>
 <translation id="7343372807593926528">Bitte beschreibe das Problem, bevor du Feedback sendest.</translation>
+<translation id="7344585835349671209">HTTPS-/SSL-Zertifikate auf dem Gerät verwalten</translation>
 <translation id="7345706641791090287">Passwort bestätigen</translation>
 <translation id="7346909386216857016">Ok</translation>
 <translation id="7347452120014970266">Dadurch werden alle Daten und Cookies gelöscht, die von <ph name="ORIGIN_NAME" /> und den zugehörigen installierten Apps gespeichert wurden</translation>
@@ -6632,6 +6633,7 @@
 <translation id="7460045493116006516">Derzeit installiertes Design</translation>
 <translation id="7461924472993315131">Anpinnen</translation>
 <translation id="746216226901520237">Das nächste Mal wird dein <ph name="DEVICE_TYPE" /> von deinem Smartphone entsperrt. Du kannst Smart Lock in den Einstellungen deaktivieren.</translation>
+<translation id="7464153996453281700">Die Komponente ist bereits auf dem neuesten Stand</translation>
 <translation id="7464637891177137294">Im Google-Konto <ph name="ACCOUNT" /> speichern</translation>
 <translation id="7465522323587461835">{NUM_OPEN_TABS,plural, =1{# offener Tab; zum Ein- oder Ausblenden der Tableiste tippen}other{# offene Tabs; zum Ein- oder Ausblenden der Tableiste tippen}}</translation>
 <translation id="7465635034594602553">Ein Fehler ist aufgetreten. Bitte warte ein paar Minuten und führe <ph name="APP_NAME" /> dann noch einmal aus.</translation>
@@ -7139,6 +7141,7 @@
 <translation id="793531125873261495">Fehler beim Herunterladen der virtuellen Maschine. Bitte versuche es noch einmal.</translation>
 <translation id="7935451262452051102"><ph name="PERCENT" /> % abgeschlossen</translation>
 <translation id="7939062555109487992">Erweiterte Optionen</translation>
+<translation id="7939328347457537652">Gerätezertifikate verwalten</translation>
 <translation id="7939412583708276221">Trotzdem beibehalten</translation>
 <translation id="7942349550061667556">Rot</translation>
 <translation id="7943368935008348579">PDFs herunterladen</translation>
@@ -7665,6 +7668,7 @@
 <translation id="8438566539970814960">Suchanfragen und das Surfen verbessern</translation>
 <translation id="8439506636278576865">Übersetzung für Seiten in dieser Sprache anbieten</translation>
 <translation id="8440630305826533614">Linux-Apps</translation>
+<translation id="844063558976952706">Immer auf dieser Website</translation>
 <translation id="8443795068008423036">Achte darauf, dass dein Gerät auf dem neuesten Stand ist, und versuche es noch einmal</translation>
 <translation id="8446884382197647889">Weitere Informationen</translation>
 <translation id="8447409163267621480">Entweder Strg oder Alt integrieren</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb
index fdf4886..2de78c46 100644
--- a/chrome/app/resources/generated_resources_el.xtb
+++ b/chrome/app/resources/generated_resources_el.xtb
@@ -1289,7 +1289,6 @@
 <translation id="2191754378957563929">Ενεργοποιημένο</translation>
 <translation id="2192505247865591433">Από:</translation>
 <translation id="2193365732679659387">Ρυθμίσεις αξιοπιστίας</translation>
-<translation id="2194554416429452547">Κατά τη διάρκεια των δοκιμών, το Chrome ερευνά τρόπους για τον περιορισμό του ανεπιθύμητου περιεχομένου, της απάτης και της κοινοποίησης μεταξύ ιστοτόπων. Επίσης, το Chrome <ph name="ESTIMATE_INTERESTS_LINK" />, τα οποία μπορούν να χρησιμοποιήσουν οι ιστότοποι για να σας προβάλουν διαφημίσεις. Μπορείτε να διαχειριστείτε τα ενδιαφέροντά σας στις ρυθμίσεις.</translation>
 <translation id="2194856509914051091">Λάβετε υπόψη τα εξής</translation>
 <translation id="2195331105963583686">Θα μπορείτε ακόμη να χρησιμοποιήσετε τη συσκευή <ph name="DEVICE_TYPE" /> μετά από αυτό το χρονικό διάστημα, αλλά δεν θα λαμβάνει πλέον αυτόματες ενημερώσεις λογισμικού και ασφαλείας.</translation>
 <translation id="2195729137168608510">Προστασία ηλεκτρονικού ταχυδρομείου</translation>
@@ -1968,7 +1967,6 @@
 <translation id="2806891468525657116">Η συντόμευση υπάρχει ήδη</translation>
 <translation id="2807517655263062534">Τα αρχεία που κατεβάζετε εμφανίζονται εδώ</translation>
 <translation id="2809586584051668049">και ακόμη <ph name="NUMBER_ADDITIONAL_DISABLED" /></translation>
-<translation id="2810235462964014915">Ζητήθηκε ανάγνωση και αλλαγή του <ph name="SITE_NAME" /></translation>
 <translation id="2811205483104563968">Λογαριασμοί</translation>
 <translation id="2811564570599779918">Μείωση ανεπιθύμητου περιεχομένου και απάτης</translation>
 <translation id="2812049959647166806">Δεν υποστηρίζεται το Thunderbolt</translation>
@@ -5284,6 +5282,7 @@
 <translation id="6086846494333236931">Εγκαταστάθηκε από το διαχειριστή σας</translation>
 <translation id="6087746524533454243">Αναζητάτε τη σελίδα πληροφοριών του προγράμματος περιήγησης; Επισκεφτείτε τη σελίδα</translation>
 <translation id="6087960857463881712">Καταπληκτικό πρόσωπο</translation>
+<translation id="6088535503330933227">Το Chrome ερευνά τρόπους για τον περιορισμό του ανεπιθύμητου περιεχομένου διαφημίσεων, της απάτης και της κοινοποίησης μεταξύ ιστοτόπων. Επίσης, το Chrome <ph name="ESTIMATE_INTERESTS_LINK" />, τα οποία μπορούν να χρησιμοποιήσουν οι ιστότοποι για να σας προβάλουν διαφημίσεις. Μπορείτε να διαχειριστείτε τα ενδιαφέροντά σας στις ρυθμίσεις.</translation>
 <translation id="608912389580139775">Για να προσθέσετε αυτήν τη σελίδα στη λίστα ανάγνωσής σας, κάντε κλικ στο εικονίδιο σελιδοδείκτη</translation>
 <translation id="6091761513005122595">Το σύστημα κοινοποίησης προσαρτήθηκε επιτυχώς.</translation>
 <translation id="6093888419484831006">Ακύρωση ενημέρωσης...</translation>
@@ -7693,6 +7692,7 @@
 <translation id="8438566539970814960">Βελτιώστε τις αναζητήσεις και την περιήγηση</translation>
 <translation id="8439506636278576865">Ερώτηση για τη μετάφραση σελίδων σε αυτήν τη γλώσσα</translation>
 <translation id="8440630305826533614">Εφαρμογές Linux</translation>
+<translation id="844063558976952706">Πάντα σε αυτόν τον ιστότοπο</translation>
 <translation id="8443795068008423036">Βεβαιωθείτε ότι η συσκευή σας είναι ενημερωμένη και δοκιμάστε ξανά.</translation>
 <translation id="8446884382197647889">Μάθετε περισσότερα</translation>
 <translation id="8447409163267621480">Συμπερίληψη είτε του Ctrl είτε του Alt</translation>
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb
index 66351d9e..88f7be2 100644
--- a/chrome/app/resources/generated_resources_en-GB.xtb
+++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -171,7 +171,7 @@
 <translation id="1153636665119721804">Google Advanced Protection programme</translation>
 <translation id="1155545602507378023">No, this device only</translation>
 <translation id="1155816283571436363">Connecting to your phone</translation>
-<translation id="1158080958325422608">Make upper case</translation>
+<translation id="1158080958325422608">Make Upper Case</translation>
 <translation id="1158238185437008462">See memories</translation>
 <translation id="1160842321113409343">To protect your privacy, we auto-delete sites from the list that are older than four weeks. A site that you visit again might appear on the list again. Or you can remove a site if you don't want that site to ever define interests for you.</translation>
 <translation id="1161575384898972166">Please sign in to <ph name="TOKEN_NAME" /> to export the client certificate.</translation>
@@ -614,7 +614,7 @@
 <translation id="1588438908519853928">Normal</translation>
 <translation id="1588870296199743671">Open Link With...</translation>
 <translation id="1588919647604819635">Right-click card</translation>
-<translation id="1589055389569595240">Show spelling and grammar</translation>
+<translation id="1589055389569595240">Show Spelling and Grammar</translation>
 <translation id="1591679663873027990">Give Parallels Desktop permission to access USB devices. Parallels Desktop won't remember a USB device after it's removed.</translation>
 <translation id="1592074621872221573"><ph name="MANAGER" /> has disabled ADB debugging, which will reset your <ph name="DEVICE_TYPE" />. Back up your files before restarting.</translation>
 <translation id="1592126057537046434">Quick Answers translation</translation>
@@ -1159,7 +1159,7 @@
 <translation id="2079545284768500474">Undo</translation>
 <translation id="2080070583977670716">More settings</translation>
 <translation id="2081816110395725788">Idle power on battery</translation>
-<translation id="2082187087049518845">Group tab</translation>
+<translation id="2082187087049518845">Group Tab</translation>
 <translation id="2082510809738716738">Pick a theme colour</translation>
 <translation id="208586643495776849">Please try again</translation>
 <translation id="208634871997892083">Always-on VPN</translation>
@@ -1297,7 +1297,6 @@
 <translation id="2191754378957563929">On</translation>
 <translation id="2192505247865591433">From:</translation>
 <translation id="2193365732679659387">Trust settings</translation>
-<translation id="2194554416429452547">During trials, Chrome is exploring ways to limit spam, fraud and sharing between sites. Chrome also <ph name="ESTIMATE_INTERESTS_LINK" /> that sites can use to show you ads. You can manage your interests in settings.</translation>
 <translation id="2194856509914051091">Things to consider</translation>
 <translation id="2195331105963583686">You'll still be able to use this <ph name="DEVICE_TYPE" /> after that time, but it will no longer get automatic software and security updates</translation>
 <translation id="2195729137168608510">Email Protection</translation>
@@ -1981,7 +1980,6 @@
 <translation id="2806891468525657116">Shortcut already exists</translation>
 <translation id="2807517655263062534">Files you download appear here</translation>
 <translation id="2809586584051668049">and <ph name="NUMBER_ADDITIONAL_DISABLED" /> more</translation>
-<translation id="2810235462964014915">Requested to read and change <ph name="SITE_NAME" /></translation>
 <translation id="2811205483104563968">Accounts</translation>
 <translation id="2811564570599779918">Spam and fraud reduction</translation>
 <translation id="2812049959647166806">Thunderbolt is not supported</translation>
@@ -2566,7 +2564,7 @@
 <translation id="3406396172897554194">Search by language or input name</translation>
 <translation id="3406605057700382950">&amp;Show bookmarks bar</translation>
 <translation id="3409785640040772790">Maps</translation>
-<translation id="3412265149091626468">Jump to selection</translation>
+<translation id="3412265149091626468">Jump to Selection</translation>
 <translation id="3413122095806433232">CA Issuers: <ph name="LOCATION" /></translation>
 <translation id="3414952576877147120">Size:</translation>
 <translation id="3414966631182382431">Your <ph name="BEGIN_LINK" />browser is managed<ph name="END_LINK" /> by <ph name="MANAGER" /></translation>
@@ -2866,7 +2864,7 @@
 <translation id="3691231116639905343">Keyboard apps</translation>
 <translation id="369135240373237088">Sign in again with a school account</translation>
 <translation id="3693415264595406141">Password:</translation>
-<translation id="3694027410380121301">Select previous tab</translation>
+<translation id="3694027410380121301">Select Previous Tab</translation>
 <translation id="3694590407685276748">Highlight text cursor</translation>
 <translation id="369489984217678710">Passwords and other sign-in data</translation>
 <translation id="369522892592566391">{NUM_FILES,plural, =0{Security checks are complete. Your data will be uploaded.}=1{Security checks are complete. Your file will be uploaded.}other{Security checks are complete. Your files will be uploaded.}}</translation>
@@ -3905,7 +3903,7 @@
 <translation id="4681512854288453141">Source policy</translation>
 <translation id="4681930562518940301">Open original image in new tab</translation>
 <translation id="4682830185876172415">Recent downloads</translation>
-<translation id="4683629100208651599">Make lower case</translation>
+<translation id="4683629100208651599">Make Lower Case</translation>
 <translation id="4683947955326903992"><ph name="PERCENTAGE" />% (default)</translation>
 <translation id="4684427112815847243">Sync everything</translation>
 <translation id="4684471265911890182"><ph name="APP_NAME" /> is trying to access the camera. Turn off the camera privacy switch to allow access.</translation>
@@ -4024,7 +4022,7 @@
 <translation id="480990236307250886">Open the homepage</translation>
 <translation id="4809927044794281115">Light theme</translation>
 <translation id="4811212958317149293">Switch Access keyboard auto-scan</translation>
-<translation id="4811503964269049987">Group selected tab</translation>
+<translation id="4811503964269049987">Group Selected Tab</translation>
 <translation id="4813512666221746211">Network error</translation>
 <translation id="4814378367953456825">Enter a name for this fingerprint</translation>
 <translation id="481574578487123132">Linked devices</translation>
@@ -4249,7 +4247,7 @@
 <translation id="5032430150487044192">Can't create QR code</translation>
 <translation id="5033137252639132982">Not allowed to use motion sensors</translation>
 <translation id="5033266061063942743">Geometric shapes</translation>
-<translation id="5037676449506322593">Select all</translation>
+<translation id="5037676449506322593">Select All</translation>
 <translation id="5038022729081036555">You can use it for <ph name="TIME_LIMIT" /> tomorrow.</translation>
 <translation id="5038818366306248416">You previously chose not to allow any extensions on <ph name="ORIGIN" /></translation>
 <translation id="5039696241953571917">View and manage saved passwords in your Google Account</translation>
@@ -5312,6 +5310,7 @@
 <translation id="6086846494333236931">Installed by your administrator</translation>
 <translation id="6087746524533454243">Looking for the browser about page? Visit</translation>
 <translation id="6087960857463881712">Awesome face</translation>
+<translation id="6088535503330933227">Chrome is exploring ways to limit ad spam, fraud and sharing between sites. Chrome also <ph name="ESTIMATE_INTERESTS_LINK" /> that sites can use to show you ads. You can manage your interests in settings.</translation>
 <translation id="608912389580139775">To add this page to your reading list, click the Bookmark icon</translation>
 <translation id="6091761513005122595">Share mounted successfully.</translation>
 <translation id="6093888419484831006">Cancelling update...</translation>
@@ -5682,7 +5681,7 @@
 <translation id="6459488832681039634">Use Selection for Find</translation>
 <translation id="6459799433792303855">Active window moved to another display.</translation>
 <translation id="6460566145397380451">Allowed to connect to MIDI devices</translation>
-<translation id="6460601847208524483">Find next</translation>
+<translation id="6460601847208524483">Find Next</translation>
 <translation id="6461170143930046705">Searching for networks...</translation>
 <translation id="6463795194797719782">&amp;Edit</translation>
 <translation id="6464825623202322042">This device</translation>
@@ -7731,6 +7730,7 @@
 <translation id="8438566539970814960">Make searches and browsing better</translation>
 <translation id="8439506636278576865">Offer to translate pages in this language</translation>
 <translation id="8440630305826533614">Linux apps</translation>
+<translation id="844063558976952706">Always on this site</translation>
 <translation id="8443795068008423036">Please ensure that your device is up to date and try again</translation>
 <translation id="8446884382197647889">Learn More</translation>
 <translation id="8447409163267621480">Include either Ctrl or Alt</translation>
@@ -7843,7 +7843,7 @@
 <translation id="8571213806525832805">Last 4 weeks</translation>
 <translation id="8571687764447439720">Add Kerberos ticket</translation>
 <translation id="8574990355410201600">Always allow sound on <ph name="HOST" /></translation>
-<translation id="8575286410928791436">Hold <ph name="KEY_EQUIVALENT" /> to quit</translation>
+<translation id="8575286410928791436">Hold <ph name="KEY_EQUIVALENT" /> to Quit</translation>
 <translation id="8576885347118332789">{NUM_TABS,plural, =1{Add tab to reading list}other{Add tabs to reading list}}</translation>
 <translation id="8577052309681449949">Automatic clicks, cursor size, cursor colour and more</translation>
 <translation id="8578639784464423491">Cannot exceed 99 letters</translation>
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb
index c427bd0..7ba4b1d 100644
--- a/chrome/app/resources/generated_resources_es-419.xtb
+++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -1274,7 +1274,6 @@
 <translation id="2191754378957563929">Sí</translation>
 <translation id="2192505247865591433">De:</translation>
 <translation id="2193365732679659387">Configuración de confianza</translation>
-<translation id="2194554416429452547">Durante las pruebas, Chrome explora maneras de limitar el spam, el fraude y el uso compartido entre sitios. Chrome también <ph name="ESTIMATE_INTERESTS_LINK" /> que pueden usar los sitios para mostrarte anuncios. Puedes administrar tus intereses en la Configuración.</translation>
 <translation id="2194856509914051091">Aspectos para tener en cuenta</translation>
 <translation id="2195331105963583686">De todos modos, podrás usar tu <ph name="DEVICE_TYPE" /> después de ese momento, pero ya no recibirá actualizaciones automáticas de software y seguridad</translation>
 <translation id="2195729137168608510">Protección de correo electrónico</translation>
@@ -1950,7 +1949,6 @@
 <translation id="2806891468525657116">El acceso directo ya existe</translation>
 <translation id="2807517655263062534">Los archivos que descargas aparecen aquí</translation>
 <translation id="2809586584051668049">y <ph name="NUMBER_ADDITIONAL_DISABLED" /> más</translation>
-<translation id="2810235462964014915">Se solicitó acceso para leer y cambiar los datos de <ph name="SITE_NAME" /></translation>
 <translation id="2811205483104563968">Cuentas</translation>
 <translation id="2811564570599779918">Reducción de spam y fraude</translation>
 <translation id="2812049959647166806">No se admite Thunderbolt</translation>
@@ -5264,6 +5262,7 @@
 <translation id="6086846494333236931">Instalado por el administrador</translation>
 <translation id="6087746524533454243">¿Buscas la página de información del navegador? Visita</translation>
 <translation id="6087960857463881712">Cara increíble</translation>
+<translation id="6088535503330933227">Chrome explora maneras de limitar el spam de anuncios, el fraude y el uso compartido entre sitios. Chrome también <ph name="ESTIMATE_INTERESTS_LINK" /> que pueden usar los sitios para mostrarte anuncios. Puedes administrar tus intereses en la Configuración.</translation>
 <translation id="608912389580139775">Para agregar esta página a tu lista de lectura, haz clic en el ícono de favoritos.</translation>
 <translation id="6091761513005122595">Se activó correctamente el recurso compartido.</translation>
 <translation id="6093888419484831006">Cancelando actualización…</translation>
@@ -7673,6 +7672,7 @@
 <translation id="8438566539970814960">Mejorar las búsquedas y la navegación</translation>
 <translation id="8439506636278576865">Ofrecer la traducción de páginas en este idioma</translation>
 <translation id="8440630305826533614">Apps de Linux</translation>
+<translation id="844063558976952706">Siempre en este sitio</translation>
 <translation id="8443795068008423036">Asegúrate de que el dispositivo esté actualizado y vuelve a intentarlo</translation>
 <translation id="8446884382197647889">Más información</translation>
 <translation id="8447409163267621480">Incluir Ctrl o Alt</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb
index 0fd541d..cd086df 100644
--- a/chrome/app/resources/generated_resources_es.xtb
+++ b/chrome/app/resources/generated_resources_es.xtb
@@ -1277,7 +1277,6 @@
 <translation id="2191754378957563929">Activado</translation>
 <translation id="2192505247865591433">De:</translation>
 <translation id="2193365732679659387">Configuración de confianza</translation>
-<translation id="2194554416429452547">Durante las pruebas, Chrome explora formas de limitar el spam, el fraude y lo que se comparte entre sitios. Chrome también <ph name="ESTIMATE_INTERESTS_LINK" />, que después usan los sitios para mostrarte anuncios. Puedes gestionar tus intereses en la configuración.</translation>
 <translation id="2194856509914051091">Notas importantes</translation>
 <translation id="2195331105963583686">Podrás seguir utilizando este <ph name="DEVICE_TYPE" /> después de esa fecha, pero ya no recibirás actualizaciones de software y seguridad automáticas.</translation>
 <translation id="2195729137168608510">Protección de correo electrónico</translation>
@@ -1954,7 +1953,6 @@
 <translation id="2806891468525657116">El acceso directo ya existe</translation>
 <translation id="2807517655263062534">Los archivos que descargues aparecen aquí</translation>
 <translation id="2809586584051668049">y <ph name="NUMBER_ADDITIONAL_DISABLED" /> más</translation>
-<translation id="2810235462964014915">Ha solicitado leer y modificar <ph name="SITE_NAME" /></translation>
 <translation id="2811205483104563968">Cuentas</translation>
 <translation id="2811564570599779918">Reducción del spam y el fraude</translation>
 <translation id="2812049959647166806">No se admite Thunderbolt</translation>
@@ -5267,6 +5265,7 @@
 <translation id="6086846494333236931">Instalada por tu administrador</translation>
 <translation id="6087746524533454243">¿Buscas la página de información del navegador? Visita</translation>
 <translation id="6087960857463881712">Cara de emoción</translation>
+<translation id="6088535503330933227">Chrome explora formas de limitar el spam publicitario, el fraude y lo que se comparte entre sitios. Chrome también <ph name="ESTIMATE_INTERESTS_LINK" />, que después usan los sitios para mostrarte anuncios. Puedes gestionar tus intereses en la configuración.</translation>
 <translation id="608912389580139775">Para añadir esta página a tu lista de lectura, haz clic en el icono de marcadores</translation>
 <translation id="6091761513005122595">El recurso compartido se ha activado correctamente.</translation>
 <translation id="6093888419484831006">Cancelando la actualización...</translation>
@@ -7672,6 +7671,7 @@
 <translation id="8438566539970814960">Mejorar las búsquedas y la navegación</translation>
 <translation id="8439506636278576865">Ofrecer la traducción de páginas en este idioma</translation>
 <translation id="8440630305826533614">Aplicaciones de Linux</translation>
+<translation id="844063558976952706">Siempre en este sitio</translation>
 <translation id="8443795068008423036">Asegúrate de que tu dispositivo esté actualizado e inténtalo de nuevo</translation>
 <translation id="8446884382197647889">Más información</translation>
 <translation id="8447409163267621480">Incluye Ctrl o Alt</translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb
index 68ad727..8d80365 100644
--- a/chrome/app/resources/generated_resources_et.xtb
+++ b/chrome/app/resources/generated_resources_et.xtb
@@ -1280,7 +1280,6 @@
 <translation id="2191754378957563929">Sees</translation>
 <translation id="2192505247865591433">Allikas:</translation>
 <translation id="2193365732679659387">Usaldusväärsuse seaded</translation>
-<translation id="2194554416429452547">Prooviperioodil otsib Chrome võimalusi, kuidas rämpsposti, pettusi ja saitide vahelist jagamist piirata. Samuti prognoosib Chrome <ph name="ESTIMATE_INTERESTS_LINK" />, mida saidid saavad kasutada teile reklaamide kuvamiseks. Saate oma huvisid seadetes hallata.</translation>
 <translation id="2194856509914051091">Olulised aspektid</translation>
 <translation id="2195331105963583686">Saate seadet <ph name="DEVICE_TYPE" /> pärast seda siiski kasutada, kuid see ei saa enam automaatseid tarkvara- ja turvavärskendusi</translation>
 <translation id="2195729137168608510">Meilikaitse</translation>
@@ -1959,7 +1958,6 @@
 <translation id="2806891468525657116">Otsetee on juba olemas</translation>
 <translation id="2807517655263062534">Siin kuvatakse teie allalaaditud failid</translation>
 <translation id="2809586584051668049">ja veel <ph name="NUMBER_ADDITIONAL_DISABLED" /></translation>
-<translation id="2810235462964014915">Taotletud, et lugeda ja muuta saiti <ph name="SITE_NAME" /></translation>
 <translation id="2811205483104563968">Kontod</translation>
 <translation id="2811564570599779918">Rämpssisu ja pettuste vähendamine</translation>
 <translation id="2812049959647166806">Thunderbolti ei toetata</translation>
@@ -5273,6 +5271,7 @@
 <translation id="6086846494333236931">Selle installis administraator</translation>
 <translation id="6087746524533454243">Kas otsite brauseri teabe lehte? Külastage saiti</translation>
 <translation id="6087960857463881712">Lahe nägu</translation>
+<translation id="6088535503330933227">Chrome otsib võimalusi, kuidas rämpsreklaame, pettusi ja saitide vahelist jagamist piirata. Samuti prognoosib Chrome <ph name="ESTIMATE_INTERESTS_LINK" />, mida saidid saavad kasutada teile reklaamide kuvamiseks. Saate oma huvisid seadetes hallata.</translation>
 <translation id="608912389580139775">Selle lehe lisamiseks lugemisloendisse klõpsake järjehoidjaikoonil</translation>
 <translation id="6091761513005122595">Jagatava üksuse ühendamine õnnestus.</translation>
 <translation id="6093888419484831006">Värskenduse tühistamine ...</translation>
@@ -5897,6 +5896,7 @@
 <translation id="6709133671862442373">Uudised</translation>
 <translation id="6709357832553498500">Ühenda, kasutades laiendust <ph name="EXTENSIONNAME" /></translation>
 <translation id="6710213216561001401">Eelmine</translation>
+<translation id="6710394144992407503">Kontrolli veebilehtedele teksti sisestamisel õigekirjavigu</translation>
 <translation id="6711146141291425900">Linkige teenuse <ph name="WEB_DRIVE" /> konto allalaadimiste jaoks</translation>
 <translation id="6712943853047024245">Salvestasite selle kasutajanimega parooli juba järgmise saidi või rakenduse jaoks: <ph name="WEBSITE" /></translation>
 <translation id="6713233729292711163">Lisa tööprofiil</translation>
@@ -6515,6 +6515,7 @@
 <translation id="7340757554212515731">Krahhiaruanded ning diagnostika- ja kasutusandmed saadetakse automaatselt Google'ile</translation>
 <translation id="7341834142292923918">Soovib juurdepääsu saidile</translation>
 <translation id="7343372807593926528">Enne tagasiside saatmist kirjeldage probleemi.</translation>
+<translation id="7344585835349671209">HTTPS-/SSL-sertifikaatide haldamine oma seadmes</translation>
 <translation id="7345706641791090287">Kinnitage oma parool</translation>
 <translation id="7346909386216857016">Selge, sain aru</translation>
 <translation id="7347452120014970266">See kustutab kõik saidi <ph name="ORIGIN_NAME" /> ning selle installitud rakenduste salvestatud andmed ja küpsisefailid</translation>
@@ -6644,6 +6645,7 @@
 <translation id="7460045493116006516">Teie installitud praegune teema</translation>
 <translation id="7461924472993315131">Kinnita</translation>
 <translation id="746216226901520237">Järgmisel korral avab seadme <ph name="DEVICE_TYPE" /> teie telefon. Funktsiooni Smart Lock saab välja lülitada menüüs Seaded.</translation>
+<translation id="7464153996453281700">Komponent on juba ajakohane</translation>
 <translation id="7464637891177137294">Salvestage see oma Google'i kontole, <ph name="ACCOUNT" /></translation>
 <translation id="7465522323587461835">{NUM_OPEN_TABS,plural, =1{# avatud vaheleht, vahelehtede rea vahetamiseks vajutage}other{# avatud vahelehte, vahelehtede rea vahetamiseks vajutage}}</translation>
 <translation id="7465635034594602553">Midagi läks valesti. Oodake mõni minut ja käitage rakendust <ph name="APP_NAME" /> uuesti.</translation>
@@ -7152,6 +7154,7 @@
 <translation id="793531125873261495">Viga virtuaalseadme allalaadimisel. Proovige uuesti.</translation>
 <translation id="7935451262452051102"><ph name="PERCENT" />% on lõpetatud</translation>
 <translation id="7939062555109487992">Täpsemad valikud</translation>
+<translation id="7939328347457537652">Seadmete sertifikaatide haldamine</translation>
 <translation id="7939412583708276221">Säilita ikkagi</translation>
 <translation id="7942349550061667556">Punane</translation>
 <translation id="7943368935008348579">Laadi PDF-id alla</translation>
@@ -7678,6 +7681,7 @@
 <translation id="8438566539970814960">Otsingute ja sirvimise paremaks muutmine</translation>
 <translation id="8439506636278576865">Paku selles keeles olevate lehtede tõlkimist</translation>
 <translation id="8440630305826533614">Linuxi rakendused</translation>
+<translation id="844063558976952706">Sellel saidil alati</translation>
 <translation id="8443795068008423036">Veenduge, et teie seade oleks ajakohane, ja proovige uuesti</translation>
 <translation id="8446884382197647889">Lisateave</translation>
 <translation id="8447409163267621480">Kaasake Ctrl või Alt</translation>
diff --git a/chrome/app/resources/generated_resources_eu.xtb b/chrome/app/resources/generated_resources_eu.xtb
index ed5c9974..f9dc71a 100644
--- a/chrome/app/resources/generated_resources_eu.xtb
+++ b/chrome/app/resources/generated_resources_eu.xtb
@@ -1277,7 +1277,6 @@
 <translation id="2191754378957563929">Aktibatuta</translation>
 <translation id="2192505247865591433">Igorlea:</translation>
 <translation id="2193365732679659387">Fidagarritasun-ezarpenak</translation>
-<translation id="2194554416429452547">Probak abian diren bitartean, spama, iruzurrak eta webguneen artean partekatzeko aukera mugatzeko moduak arakatzen ari da Chrome. Halaber, webguneek iragarkiak erakusteko erabil ditzaketen <ph name="ESTIMATE_INTERESTS_LINK" /> Chrome-k. Zure interesak kudeatzeko, joan ezarpenetara.</translation>
 <translation id="2194856509914051091">Kontuan hartu beharrekoak</translation>
 <translation id="2195331105963583686">Handik aurrera, <ph name="DEVICE_TYPE" /> erabiltzen jarraitu ahal izango duzu, baina ez duzu jasoko software- eta segurtasun-eguneratze automatikorik</translation>
 <translation id="2195729137168608510">Posta elektronikoaren babesa</translation>
@@ -1953,7 +1952,6 @@
 <translation id="2806891468525657116">Jada badago lasterbide hori</translation>
 <translation id="2807517655263062534">Deskargatutako fitxategiak agertuko dira hemen</translation>
 <translation id="2809586584051668049">eta beste <ph name="NUMBER_ADDITIONAL_DISABLED" /></translation>
-<translation id="2810235462964014915"><ph name="SITE_NAME" /> irakurtzeko eta aldatzeko baimena eskatu da</translation>
 <translation id="2811205483104563968">Kontuak</translation>
 <translation id="2811564570599779918">Spama eta iruzurrak murriztea</translation>
 <translation id="2812049959647166806">Thunderbolt konektorea ez da bateragarria</translation>
@@ -5264,6 +5262,7 @@
 <translation id="6086846494333236931">Administratzaileak instalatu du</translation>
 <translation id="6087746524533454243">Arakatzailearen "Honi buruz" orriaren bila zabiltza? Joan helbide honetara:</translation>
 <translation id="6087960857463881712">Aurpegi zoragarria</translation>
+<translation id="6088535503330933227">Iragarkien spama, iruzurrak eta webguneen artean partekatzeko aukera mugatzeko moduak arakatzen ari da Chrome. Halaber, webguneek iragarkiak erakusteko erabil ditzaketen <ph name="ESTIMATE_INTERESTS_LINK" /> Chrome-k. Zure interesak kudeatzeko, joan ezarpenetara.</translation>
 <translation id="608912389580139775">Orria irakurketa-zerrendan gehitzeko, sakatu laster-markaren ikonoa</translation>
 <translation id="6091761513005122595">Muntatu da fitxategiak partekatzeko biltegia.</translation>
 <translation id="6093888419484831006">Eguneratzea bertan behera uzten…</translation>
@@ -5888,6 +5887,7 @@
 <translation id="6709133671862442373">Albisteak</translation>
 <translation id="6709357832553498500">Konektatu <ph name="EXTENSIONNAME" /> erabilita</translation>
 <translation id="6710213216561001401">Aurrekoa</translation>
+<translation id="6710394144992407503">Egiaztatu ortografia web-orrietan testua idazten duzunean</translation>
 <translation id="6711146141291425900">Lotu <ph name="WEB_DRIVE" /> zerbitzuko kontua deskargetarako</translation>
 <translation id="6712943853047024245">Dagoeneko gorde duzu pasahitz bat erabiltzaile-izen honekin hemen: <ph name="WEBSITE" /></translation>
 <translation id="6713233729292711163">Gehitu laneko profila</translation>
@@ -6506,6 +6506,7 @@
 <translation id="7340757554212515731">Hutsegite-txostenak, eta diagnostiko- eta erabilera-datuak automatikoki bidaltzen dizkio Google-ri</translation>
 <translation id="7341834142292923918">Webgunerako sarbidea nahi du</translation>
 <translation id="7343372807593926528">Azaldu arazoa oharra bidali aurretik.</translation>
+<translation id="7344585835349671209">Kudeatu HTTPS/SSL ziurtagiriak gailuan</translation>
 <translation id="7345706641791090287">Berretsi pasahitza</translation>
 <translation id="7346909386216857016">Ados, ulertu dut</translation>
 <translation id="7347452120014970266"><ph name="ORIGIN_NAME" /> webguneak eta hark instalatutako aplikazioek gorde dituzten datu eta cookie guztiak garbituko dira</translation>
@@ -6635,6 +6636,7 @@
 <translation id="7460045493116006516">Instalatuta daukazun gaia</translation>
 <translation id="7461924472993315131">Ainguratu</translation>
 <translation id="746216226901520237">Hurrengoan, telefonoak desblokeatuko du <ph name="DEVICE_TYPE" /> gailua. Smart Lock desaktibatzeko, joan ezarpenetara.</translation>
+<translation id="7464153996453281700">Osagaia eguneratuta dago jada</translation>
 <translation id="7464637891177137294">Gorde ezazu <ph name="ACCOUNT" /> Google-ko kontuan</translation>
 <translation id="7465522323587461835">{NUM_OPEN_TABS,plural, =1{# fitxa dago irekita. Sakatu hau fitxen zinta ikusgai jartzeko edo ezkutatzeko.}other{# fitxa daude irekita. Sakatu hau fitxen zinta ikusgai jartzeko edo ezkutatzeko.}}</translation>
 <translation id="7465635034594602553">Arazo bat izan da. Itxaron minutu batzuk eta exekutatu <ph name="APP_NAME" /> berriro.</translation>
@@ -7142,6 +7144,7 @@
 <translation id="793531125873261495">Errore bat gertatu da makina birtuala deskargatzean. Saiatu berriro.</translation>
 <translation id="7935451262452051102">% <ph name="PERCENT" /> osatuta</translation>
 <translation id="7939062555109487992">Aukera aurreratuak</translation>
+<translation id="7939328347457537652">Kudeatu gailuen ziurtagiriak</translation>
 <translation id="7939412583708276221">Gorde hala ere</translation>
 <translation id="7942349550061667556">Gorria</translation>
 <translation id="7943368935008348579">Deskargatu PDFak</translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb
index 09a8e68d..94fef6d 100644
--- a/chrome/app/resources/generated_resources_fa.xtb
+++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -989,6 +989,7 @@
 <translation id="1916502483199172559">چهره‌نمای پیش‌فرض قرمز</translation>
 <translation id="1918141783557917887">&amp;کوچک تر</translation>
 <translation id="1920390473494685033">مخاطبین</translation>
+<translation id="1921544956190977703">‏از بیشترین میزان امنیت Chrome دربرابر وب‌سایت‌ها، بارگیری‌ها، و افزونه‌های خطرناک برخوردار هستید</translation>
 <translation id="1921584744613111023"><ph name="DPI" /> نقطه در اینچ</translation>
 <translation id="1923468477587371721">‏سایت‌های Google مثل Gmail،‏ Drive، و YouTube از زبان «حساب Google» شما استفاده می‌کنند مگراینکه زبان محصول را به‌صورت جداگانه تغییر داده باشید</translation>
 <translation id="1923539912171292317">کلیک‌های خودکار</translation>
@@ -1286,7 +1287,6 @@
 <translation id="2191754378957563929">روشن</translation>
 <translation id="2192505247865591433">از:</translation>
 <translation id="2193365732679659387">تنظیمات اطمینان</translation>
-<translation id="2194554416429452547">‏در طول دوره آزمایشی، Chrome درحال کاوش راه‌هایی برای محدود کردن هرزنامه، کلاهبرداری، و هم‌رسانی بین سایت‌ها است. علاوه‌براین، Chrome <ph name="ESTIMATE_INTERESTS_LINK" /> و سایت‌ها می‌توانند از این علایق برای نشان دادن آگهی به شما استفاده کنند. می‌توانید علایقتان را در تنظیمات مدیریت کنید.</translation>
 <translation id="2194856509914051091">مواردی که باید درنظر داشت</translation>
 <translation id="2195331105963583686">همچنان می‌توانید بعد از اتمام زمان مشخص‌شده، از این <ph name="DEVICE_TYPE" /> استفاده کنید، اما دیگر به‌روزرسانی‌های نرم‌افزار و امنیتی خودکار را دریافت نخواهید کرد</translation>
 <translation id="2195729137168608510">محافظت از ایمیل</translation>
@@ -1965,7 +1965,6 @@
 <translation id="2806891468525657116">میان‌بر از قبل وجود دارد</translation>
 <translation id="2807517655263062534">فایل‌هایی که بارگیری می‌کنید اینجا نشان داده می‌شود</translation>
 <translation id="2809586584051668049">و <ph name="NUMBER_ADDITIONAL_DISABLED" /> مورد دیگر</translation>
-<translation id="2810235462964014915">درخواست کرده <ph name="SITE_NAME" /> را بخواند و تغییر دهد</translation>
 <translation id="2811205483104563968">حساب‌ها</translation>
 <translation id="2811564570599779918">کاهش هرزنامه و تقلب</translation>
 <translation id="2812049959647166806">‏از Thunderbolt پشتیبانی نمی‌شود</translation>
@@ -2090,6 +2089,7 @@
 برای اینکه از سیستم <ph name="DOMAIN" /> خارج نشوید، باید کارت هوشمندتان را در دستگاه نگه دارید.</translation>
 <translation id="2923234477033317484">حذف این حساب</translation>
 <translation id="2923644930701689793">دسترسی به حلقه فیلم دوربین تلفن</translation>
+<translation id="292371311537977079">‏تنظیمات Chrome</translation>
 <translation id="2925658782192398150">تمام شد، مشکلی پیدا نشد</translation>
 <translation id="2926085873880284723">بازیابی میان‌برهای پیش‌فرض</translation>
 <translation id="2926620265753325858"><ph name="DEVICE_NAME" /> پشتیبانی نمی‌شود.</translation>
@@ -2673,6 +2673,7 @@
 <translation id="3511528412952710609">کوتاه</translation>
 <translation id="3514335087372914653">کنترل بازی</translation>
 <translation id="3514373592552233661">درصورت در دسترس بودن بیش از یک شبکه، شبکه‌های برگزیده بر سایر شبکه‌های شناخته‌شده ارجحیت خواهد داشت.</translation>
+<translation id="3514647716686280777">‏از محافظت امنیتی استاندارد برخوردار هستید. برای محافظت بیشتر در برابر وب‌سایت‌ها، بارگیری‌ها، و افزونه‌های خطرناک، «مرور ایمن پیشرفته» را در تنظیمات Chrome روشن کنید.</translation>
 <translation id="3515983984924808886">برای تأیید بازنشانی، کلید امنیتی‌تان را لمس کنید. همه اطلاعات ذخیره‌شده در کلید امنیتی (ازجمله پین) پاک می‌شود.</translation>
 <translation id="3518985090088779359">پذیرش و ادامه</translation>
 <translation id="3519564332031442870">سرویس پایانه چاپ</translation>
@@ -5280,6 +5281,7 @@
 <translation id="6086846494333236931">سرپرست سیستم شما نصب کرده است.</translation>
 <translation id="6087746524533454243">به‌دنبال صفحه درباره مرورگر هستید؟ از این پیوند استفاده کنید:</translation>
 <translation id="6087960857463881712">چهره تأثیرگذار</translation>
+<translation id="6088535503330933227">‏Chrome به‌دنبال راه‌هایی برای محدود کردن هرزآگهی، کلاهبرداری، و هم‌رسانی بین سایت‌ها است. علاوه‌براین، Chrome <ph name="ESTIMATE_INTERESTS_LINK" /> و سایت‌ها می‌توانند از این علایق برای نشان دادن آگهی به شما استفاده کنند. می‌توانید علایقتان را در تنظیمات مدیریت کنید.</translation>
 <translation id="608912389580139775">برای افزودن این صفحه به فهرست خواندن، روی نماد «نشانک» کلیک کنید</translation>
 <translation id="6091761513005122595">دستگاه ذخیره‌سازی متصل به شبکه با موفقیت نشانده شد.</translation>
 <translation id="6093888419484831006">در حال لغو به‌روزرسانی...</translation>
@@ -5468,6 +5470,7 @@
 <translation id="6278428485366576908">زمینه</translation>
 <translation id="6278776436938569440">تغییر مکان</translation>
 <translation id="6279183038361895380">برای نمایش نشان‌گر |<ph name="ACCELERATOR" />| را فشار دهید</translation>
+<translation id="6279595948631688299">صادر کردن گواهینامه انتخاب‌شده…</translation>
 <translation id="6280215091796946657">ورود به سیستم با حساب دیگر</translation>
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6282180787514676874">{COUNT,plural, =1{از تعداد مجاز ۱ برگ کاغذ بیشتر شده است}one{از تعداد مجاز {COUNT} برگ کاغذ بیشتر شده است}other{از تعداد مجاز {COUNT} برگ کاغذ بیشتر شده است}}</translation>
@@ -5582,6 +5585,7 @@
 <translation id="6398715114293939307">‏برداشتن «فروشگاه Google Play»</translation>
 <translation id="6398765197997659313">خروج از حالت تمام صفحه</translation>
 <translation id="6399774419735315745">جاسوس</translation>
+<translation id="6401458660421980302">‏برای ارسال این برگه به دستگاهی دیگر، در آنجا به سیستم Chrome وارد شوید</translation>
 <translation id="6401597285454423070">‏رایانه شما حاوی دستگاه امنیتی با «ماژول پلاتفرم مورداعتماد» (TPM) است؛ از این دستگاه برای اجرای بسیاری از ویژگی‌های امنیتی مهم در ChromeOS استفاده می‌شود. برای کسب اطلاعات بیشتر از «مرکز راهنمایی Chromebook» دیدن کنید: https://support.google.com/chromebook/?p=tpm</translation>
 <translation id="6404187344102273690">‏بازی کردن با Chromebook</translation>
 <translation id="6404511346730675251">ویرایش نشانک</translation>
@@ -5820,6 +5824,7 @@
 <translation id="6619801788773578757">افزودن برنامه کیوسک</translation>
 <translation id="6619990499523117484">پین را تأیید کنید</translation>
 <translation id="6620254580880484313">نام محتوی</translation>
+<translation id="6621391692573306628">‏برای ارسال این برگه به دستگاهی دیگر، در هردو دستگاه به سیستم Chrome وارد شوید</translation>
 <translation id="6622980291894852883">ادامه مسدودکردن تصاویر</translation>
 <translation id="6624036901798307345">در حالت رایانه لوحی، روی دکمه شمارنده برگه در نوارابزار ضربه بزنید تا نوار برگه جدید که تصویر کوچک هر برگه را نشان می‌دهد باز شود.</translation>
 <translation id="6624535038674360844"><ph name="FILE_NAME" /> محتوای حساس یا خطرناک دارد. از مالک بخواهید مشکل را برطرف کند.</translation>
@@ -7690,6 +7695,7 @@
 <translation id="8438566539970814960">بهبود جستجوها و مرور</translation>
 <translation id="8439506636278576865">ترجمه صفحات نوشته شده به این زبان پیشنهاد داده شود</translation>
 <translation id="8440630305826533614">‏برنامه‌های Linux</translation>
+<translation id="844063558976952706">همیشه در این سایت</translation>
 <translation id="8443795068008423036">لطفاً مطمئن شوید دستگاهتان به‌روز باشد و دوباره امتحان کنید</translation>
 <translation id="8446884382197647889">بیشتر بدانید</translation>
 <translation id="8447409163267621480">‏باید شامل Ctrl یا Alt باشد</translation>
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb
index bee31abf..ae5300d 100644
--- a/chrome/app/resources/generated_resources_fi.xtb
+++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -1288,7 +1288,6 @@
 <translation id="2191754378957563929">Päällä</translation>
 <translation id="2192505247865591433">Lähettäjä:</translation>
 <translation id="2193365732679659387">Luottamusasetukset</translation>
-<translation id="2194554416429452547">Kokeilujen aikana Chrome tutkii tapoja rajoittaa roskasisältöä, huijauksia ja sivustojen välistä jakamista. Chrome myös <ph name="ESTIMATE_INTERESTS_LINK" />, joita sivustot voivat käyttää näyttääksesi sinulle mainoksia. Voit muuttaa kiinnostuksen kohteitasi asetuksista.</translation>
 <translation id="2194856509914051091">Huomioitavaa</translation>
 <translation id="2195331105963583686"><ph name="DEVICE_TYPE" /> on käytettävissä jatkossakin, mutta se ei enää saa automaattisia ohjelmisto- ja tietoturvapäivityksiä</translation>
 <translation id="2195729137168608510">Sähköpostin suojaus</translation>
@@ -1967,7 +1966,6 @@
 <translation id="2806891468525657116">Pikakuvake on jo olemassa</translation>
 <translation id="2807517655263062534">Lataamasi tiedostot näytetään tässä.</translation>
 <translation id="2809586584051668049">ja <ph name="NUMBER_ADDITIONAL_DISABLED" /> muuta</translation>
-<translation id="2810235462964014915">Pyydetty lupaa lukea ja muuttaa tätä: <ph name="SITE_NAME" /></translation>
 <translation id="2811205483104563968">Tilit</translation>
 <translation id="2811564570599779918">Roskasisällön ja petosten vähentäminen</translation>
 <translation id="2812049959647166806">Thunderboltia ei tueta</translation>
@@ -5279,6 +5277,7 @@
 <translation id="6086846494333236931">Järjestelmänvalvojasi asentama</translation>
 <translation id="6087746524533454243">Etsitkö selaimen tietosivua? Avaa</translation>
 <translation id="6087960857463881712">Eeppinen hymiö</translation>
+<translation id="6088535503330933227">Chrome tutkii tapoja rajoittaa mainosspämmäystä, petoksia ja sivustojen välistä jakamista. Chrome myös <ph name="ESTIMATE_INTERESTS_LINK" />, joita sivustot voivat käyttää näyttääksesi sinulle mainoksia. Voit muuttaa kiinnostuksen kohteitasi asetuksista.</translation>
 <translation id="608912389580139775">Jos haluat lisätä sivun lukulistallesi, klikkaa Kirjanmerkki-kuvaketta</translation>
 <translation id="6091761513005122595">Jako otettiin käyttöön.</translation>
 <translation id="6093888419484831006">Peruutetaan päivitystä...</translation>
@@ -5903,6 +5902,7 @@
 <translation id="6709133671862442373">Uutiset</translation>
 <translation id="6709357832553498500">Yhdistä laajennuksella <ph name="EXTENSIONNAME" /></translation>
 <translation id="6710213216561001401">Edellinen</translation>
+<translation id="6710394144992407503">Tarkista kirjoitusvirheet, kun kirjoitat tekstiä verkkosivuilla</translation>
 <translation id="6711146141291425900">Linkitä tili (<ph name="WEB_DRIVE" />) latauksia varten</translation>
 <translation id="6712943853047024245">Olet jo tallentanut tämän käyttäjänimen salasanan täällä: <ph name="WEBSITE" /></translation>
 <translation id="6713233729292711163">Lisää työprofiili</translation>
@@ -6521,6 +6521,7 @@
 <translation id="7340757554212515731">Lähettää Googlelle automaattisesti virheraportteja sekä diagnostiikka- ja käyttödataa</translation>
 <translation id="7341834142292923918">Haluaa toimia tällä sivustolla</translation>
 <translation id="7343372807593926528">Kuvaile ongelmaa ennen palautteen lähettämistä.</translation>
+<translation id="7344585835349671209">Hallinnoi HTTPS/SSL-varmenteita laitteellasi</translation>
 <translation id="7345706641791090287">Vahvista salasanasi</translation>
 <translation id="7346909386216857016">Selvä</translation>
 <translation id="7347452120014970266">Tämä poistaa kaiken datan ja kaikki evästeet, jotka <ph name="ORIGIN_NAME" /> ja sen asentamat sovellukset ovat tallentaneet.</translation>
@@ -6650,6 +6651,7 @@
 <translation id="7460045493116006516">Asentamasi nykyinen teema</translation>
 <translation id="7461924472993315131">Kiinnitä</translation>
 <translation id="746216226901520237">Ensi kerralla <ph name="DEVICE_TYPE" /> avataan lukituksesta puhelimellasi. Voit poistaa Smart Lockin käytöstä asetuksissa.</translation>
+<translation id="7464153996453281700">Osa on jo päivitetty</translation>
 <translation id="7464637891177137294">Tallenna se Google-tilillesi, <ph name="ACCOUNT" /></translation>
 <translation id="7465522323587461835">{NUM_OPEN_TABS,plural, =1{# avoin välilehti, laita välilehtirivi päälle tai pois päältä painamalla}other{# avointa välilehteä, laita välilehtirivi päälle tai pois päältä painamalla}}</translation>
 <translation id="7465635034594602553">Jotain meni pieleen. Odota muutama minuutti ja käynnistä <ph name="APP_NAME" /> uudelleen.</translation>
@@ -7157,6 +7159,7 @@
 <translation id="793531125873261495">Virtuaalikoneen lataus epäonnistui. Yritä uudelleen.</translation>
 <translation id="7935451262452051102"><ph name="PERCENT" /> % valmis</translation>
 <translation id="7939062555109487992">Lisäasetukset</translation>
+<translation id="7939328347457537652">Hallinnoi laitteen varmenteita</translation>
 <translation id="7939412583708276221">Säilytä</translation>
 <translation id="7942349550061667556">Punainen</translation>
 <translation id="7943368935008348579">Lataa PDF-tiedostot</translation>
@@ -7683,6 +7686,7 @@
 <translation id="8438566539970814960">Paranna hakuja ja selausta</translation>
 <translation id="8439506636278576865">Tarjoudu kääntämään sivuja tälle kielelle</translation>
 <translation id="8440630305826533614">Linux-sovellukset</translation>
+<translation id="844063558976952706">Aina tässä sivustossa</translation>
 <translation id="8443795068008423036">Varmista, että laite on ajan tasalla, ja yritä uudelleen</translation>
 <translation id="8446884382197647889">Lisätietoja</translation>
 <translation id="8447409163267621480">Lisää alkuun joko Ctrl tai Alt</translation>
diff --git a/chrome/app/resources/generated_resources_fil.xtb b/chrome/app/resources/generated_resources_fil.xtb
index 7033363c..1221ea5 100644
--- a/chrome/app/resources/generated_resources_fil.xtb
+++ b/chrome/app/resources/generated_resources_fil.xtb
@@ -1298,7 +1298,6 @@
 <translation id="2191754378957563929">Naka-on</translation>
 <translation id="2192505247865591433">Mula:</translation>
 <translation id="2193365732679659387">Mga setting ng pagtitiwala</translation>
-<translation id="2194554416429452547">Sa panahon ng mga trial, ine-explore ng Chrome ang mga paraan para limitahan ang spam, panloloko, at pagbabahagi sa pagitan ng mga site. Ginagawa rin ng Chrome na <ph name="ESTIMATE_INTERESTS_LINK" /> na magagamit ng mga site para magpakita sa iyo ng mga ad. Puwede mong pamahalaan ang iyong mga interes sa mga setting.</translation>
 <translation id="2194856509914051091">Mga bagay na dapat isaalang-alang</translation>
 <translation id="2195331105963583686">Magagamit mo pa rin ang <ph name="DEVICE_TYPE" /> na ito pagkatapos noon, pero hindi na ito makakakuha ng mga awtomatikong update sa software at seguridad</translation>
 <translation id="2195729137168608510">Proteksyon sa Email</translation>
@@ -1982,7 +1981,6 @@
 <translation id="2806891468525657116">Mayroon nang ganitong shortcut</translation>
 <translation id="2807517655263062534">Dito lalabas ang mga file na iyong ida-download</translation>
 <translation id="2809586584051668049">at <ph name="NUMBER_ADDITIONAL_DISABLED" /> pa</translation>
-<translation id="2810235462964014915">Hiniling na basahin at baguhin ang <ph name="SITE_NAME" /></translation>
 <translation id="2811205483104563968">Mga Account</translation>
 <translation id="2811564570599779918">Pagbabawas ng spam at panloloko</translation>
 <translation id="2812049959647166806">Hindi sinusuportahan ang thunderbolt</translation>
@@ -5313,6 +5311,7 @@
 <translation id="6086846494333236931">Na-install ng iyong administrator</translation>
 <translation id="6087746524533454243">Hinahanap ang page na tungkol sa browser? Bisitahin ang</translation>
 <translation id="6087960857463881712">Astig na mukha</translation>
+<translation id="6088535503330933227">Nag-e-explore ang Chrome kung paano limitahan ang mga spam na ad, panloloko, at pagbabahagi sa pagitan ng mga site. Ginagawa rin ng Chrome na <ph name="ESTIMATE_INTERESTS_LINK" /> na magagamit ng mga site para magpakita sa iyo ng mga ad. Puwede mong pamahalaan ang iyong mga interes sa mga setting.</translation>
 <translation id="608912389580139775">Para idagdag ang page na ito sa iyong listahan ng babasahin, i-click ang icon ng Bookmark</translation>
 <translation id="6091761513005122595">Matagumpay na na-mount ang share</translation>
 <translation id="6093888419484831006">Kinakansela ang pag-update...</translation>
@@ -7735,6 +7734,7 @@
 <translation id="8439506636278576865">Mag-alok na magsalin ng mga page sa wikang ito
 </translation>
 <translation id="8440630305826533614">Mga Linux app</translation>
+<translation id="844063558976952706">Palagi sa site na ito</translation>
 <translation id="8443795068008423036">Pakitiyak na up to date ang iyong device at pakisubukan ulit</translation>
 <translation id="8446884382197647889">Matuto Pa</translation>
 <translation id="8447409163267621480">Isama ang Ctrl o Alt</translation>
diff --git a/chrome/app/resources/generated_resources_fr-CA.xtb b/chrome/app/resources/generated_resources_fr-CA.xtb
index a8b5fa64..b75ad60a 100644
--- a/chrome/app/resources/generated_resources_fr-CA.xtb
+++ b/chrome/app/resources/generated_resources_fr-CA.xtb
@@ -1278,7 +1278,6 @@
 <translation id="2191754378957563929">Activé</translation>
 <translation id="2192505247865591433">De :</translation>
 <translation id="2193365732679659387">Paramètres de confiance</translation>
-<translation id="2194554416429452547">Lors des essais, Chrome explore différents moyens de limiter les pourriels, la fraude et le partage entre les sites. En outre, Chrome <ph name="ESTIMATE_INTERESTS_LINK" /> que d'autres sites peuvent utiliser pour vous montrer des annonces. Vous pouvez gérer vos centres d'intérêt dans les paramètres.</translation>
 <translation id="2194856509914051091">Points à prendre en compte</translation>
 <translation id="2195331105963583686">Vous pourrez toujours utiliser cet appareil (<ph name="DEVICE_TYPE" />) après cela, mais il ne recevra plus les mises à jour logicielles et de sécurité automatiques</translation>
 <translation id="2195729137168608510">Protection du courrier électronique</translation>
@@ -1955,7 +1954,6 @@
 <translation id="2806891468525657116">Le raccourci existe déjà</translation>
 <translation id="2807517655263062534">Les fichiers que vous téléchargez apparaissent ici</translation>
 <translation id="2809586584051668049">et <ph name="NUMBER_ADDITIONAL_DISABLED" /> autres</translation>
-<translation id="2810235462964014915">A demandé de lire et de modifier <ph name="SITE_NAME" /></translation>
 <translation id="2811205483104563968">Comptes</translation>
 <translation id="2811564570599779918">Réduction des pourriels et de la fraude</translation>
 <translation id="2812049959647166806">Les connexions Thunderbolt ne sont pas prises en charge</translation>
@@ -5269,6 +5267,7 @@
 <translation id="6086846494333236931">Élément installé par votre administrateur</translation>
 <translation id="6087746524533454243">Vous recherchez la page à propos du navigateur? Consultez</translation>
 <translation id="6087960857463881712">Superbe visage</translation>
+<translation id="6088535503330933227">Chrome explore des moyens de limiter les annonces publicitaires indésirables, la fraude et le partage entre les sites. En outre, Chrome <ph name="ESTIMATE_INTERESTS_LINK" /> que d'autres sites peuvent utiliser pour vous montrer des annonces. Vous pouvez gérer vos centres d'intérêt dans les paramètres.</translation>
 <translation id="608912389580139775">Pour ajouter cette page à votre liste de lecture, cliquez sur l'icône de favori</translation>
 <translation id="6091761513005122595">Partage correctement configuré.</translation>
 <translation id="6093888419484831006">Annulation de la mise à jour...</translation>
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb
index 7596b18..9f9c1c6 100644
--- a/chrome/app/resources/generated_resources_fr.xtb
+++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -1278,7 +1278,6 @@
 <translation id="2191754378957563929">Activé</translation>
 <translation id="2192505247865591433">De :</translation>
 <translation id="2193365732679659387">Paramètres de confiance</translation>
-<translation id="2194554416429452547">Lors des essais, Chrome étudie différents moyens de limiter le spam, la fraude et le partage entre les sites. En outre, Chrome <ph name="ESTIMATE_INTERESTS_LINK" /> que les sites peuvent utiliser pour vous proposer des annonces. Vous pouvez gérer vos centres d'intérêt dans les paramètres.</translation>
 <translation id="2194856509914051091">Éléments à prendre en compte</translation>
 <translation id="2195331105963583686">Vous pourrez toujours utiliser cet appareil <ph name="DEVICE_TYPE" /> par la suite, mais il ne recevra plus de mises à jour logicielles et de sécurité automatiques</translation>
 <translation id="2195729137168608510">Protection du courrier électronique</translation>
@@ -1954,7 +1953,6 @@
 <translation id="2806891468525657116">Le raccourci existe déjà</translation>
 <translation id="2807517655263062534">Les fichiers téléchargés s'affichent ici</translation>
 <translation id="2809586584051668049">ainsi que <ph name="NUMBER_ADDITIONAL_DISABLED" /> autre(s) extension(s)</translation>
-<translation id="2810235462964014915">Ayant demandé à consulter et modifier <ph name="SITE_NAME" /></translation>
 <translation id="2811205483104563968">Comptes</translation>
 <translation id="2811564570599779918">Réduction du spam et de la fraude</translation>
 <translation id="2812049959647166806">Le format Thunderbolt n'est pas compatible</translation>
@@ -5269,6 +5267,7 @@
 <translation id="6086846494333236931">Installée par votre administrateur</translation>
 <translation id="6087746524533454243">Vous recherchez des informations à propos du navigateur ? Accédez à la page</translation>
 <translation id="6087960857463881712">Visage "Génial"</translation>
+<translation id="6088535503330933227">Chrome étudie différents moyens de limiter le spam publicitaire, la fraude et le partage entre les sites. En outre, Chrome <ph name="ESTIMATE_INTERESTS_LINK" /> que les sites peuvent utiliser pour vous proposer des annonces. Vous pouvez gérer vos centres d'intérêt dans les paramètres.</translation>
 <translation id="608912389580139775">Pour ajouter cette page à votre liste de lecture, cliquez sur l'icône Ajouter aux favoris</translation>
 <translation id="6091761513005122595">Le partage a bien été installé.</translation>
 <translation id="6093888419484831006">Annulation de la mise à jour...</translation>
@@ -7676,6 +7675,7 @@
 <translation id="8438566539970814960">Améliorer les recherches et la navigation</translation>
 <translation id="8439506636278576865">Proposer de traduire les pages dans cette langue</translation>
 <translation id="8440630305826533614">Applications Linux</translation>
+<translation id="844063558976952706">Toujours pour ce site</translation>
 <translation id="8443795068008423036">Veuillez vous assurer que votre appareil est à jour et réessayer</translation>
 <translation id="8446884382197647889">En savoir plus</translation>
 <translation id="8447409163267621480">Vous devez inclure la touche Ctrl ou la touche Alt</translation>
diff --git a/chrome/app/resources/generated_resources_gl.xtb b/chrome/app/resources/generated_resources_gl.xtb
index 1d6e30b..873bcec 100644
--- a/chrome/app/resources/generated_resources_gl.xtb
+++ b/chrome/app/resources/generated_resources_gl.xtb
@@ -1276,7 +1276,6 @@
 <translation id="2191754378957563929">Activado</translation>
 <translation id="2192505247865591433">De:</translation>
 <translation id="2193365732679659387">Configuración de confianza</translation>
-<translation id="2194554416429452547">Durante as probas, Chrome tenta explorar formas de limitar o spam, a fraude e o uso compartido entre sitios. Chrome tamén <ph name="ESTIMATE_INTERESTS_LINK" /> que os sitios poden usar para mostrarche anuncios. Podes xestionar os teus intereses na configuración.</translation>
 <translation id="2194856509914051091">Cuestións que se deben ter en conta</translation>
 <translation id="2195331105963583686">Seguirás podendo utilizar este <ph name="DEVICE_TYPE" /> despois desta data, pero deixará de recibir actualizacións de software e seguranza automáticas</translation>
 <translation id="2195729137168608510">Protección de correo electrónico</translation>
@@ -1952,7 +1951,6 @@
 <translation id="2806891468525657116">O atallo xa existe</translation>
 <translation id="2807517655263062534">Os ficheiros que descargas aparecen aquí</translation>
 <translation id="2809586584051668049">e <ph name="NUMBER_ADDITIONAL_DISABLED" /> máis</translation>
-<translation id="2810235462964014915">Solicitaron ler e cambiar <ph name="SITE_NAME" /></translation>
 <translation id="2811205483104563968">Contas</translation>
 <translation id="2811564570599779918">Redución do spam e da fraude</translation>
 <translation id="2812049959647166806">A tecnoloxía Thunderbolt non é compatible</translation>
@@ -5263,6 +5261,7 @@
 <translation id="6086846494333236931">Extensión instalada polo administrador</translation>
 <translation id="6087746524533454243">Buscas a páxina de información do navegador? Visita</translation>
 <translation id="6087960857463881712">Cara de sorpresa</translation>
+<translation id="6088535503330933227">Chrome explora formas de limitar o spam, a fraude e o uso compartido entre sitios. Chrome tamén <ph name="ESTIMATE_INTERESTS_LINK" /> que os sitios poden usar para mostrarche anuncios. Podes xestionar os teus intereses na configuración.</translation>
 <translation id="608912389580139775">Para engadir esta páxina á túa lista de lectura, fai clic na icona dos marcadores</translation>
 <translation id="6091761513005122595">A localización compartida montouse correctamente.</translation>
 <translation id="6093888419484831006">Cancelando a actualización...</translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb
index fe6304c..18ea710 100644
--- a/chrome/app/resources/generated_resources_gu.xtb
+++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -1274,7 +1274,6 @@
 <translation id="2191754378957563929">ચાલુ</translation>
 <translation id="2192505247865591433">તરફથી:</translation>
 <translation id="2193365732679659387">ટ્રસ્ટ સેટિંગ</translation>
-<translation id="2194554416429452547">અજમાયશની અવધિ દરમિયાન, Chrome સ્પામ, કપટ અને સાઇટ વચ્ચેના શેરિંગને મર્યાદિત કરવાની રીતોની શોધખોળ કરી રહ્યું છે. તમને જાહેરાતો બતાવવા માટે સાઇટ જેનો ઉપયોગ કરી શકે, એવી <ph name="ESTIMATE_INTERESTS_LINK" /> પણ Chrome લગાવી શકે છે. સેટિંગમાં જઈને તમે તમારી રુચિઓ મેનેજ કરી શકો છો.</translation>
 <translation id="2194856509914051091">ધ્યાનમાં લેવા જેવી બાબતો</translation>
 <translation id="2195331105963583686">તેમ તે સમય પછી પણ આ <ph name="DEVICE_TYPE" />નો ઉપયોગ કરી શકશો પણ હવેથી ઑટોમૅટિક સૉફ્ટવેર અને સુરક્ષા અપડેટ મળશે નહીં</translation>
 <translation id="2195729137168608510">ઇમેઇલ સુરક્ષા</translation>
@@ -1951,7 +1950,6 @@
 <translation id="2806891468525657116">શૉર્ટકટ પહેલેથી અસ્તિત્વમાં છે</translation>
 <translation id="2807517655263062534">તમે ડાઉનલોડ કરેલી ફાઇલો અહીં દેખાશે</translation>
 <translation id="2809586584051668049">અને <ph name="NUMBER_ADDITIONAL_DISABLED" /> વધુ</translation>
-<translation id="2810235462964014915"><ph name="SITE_NAME" />ને વાંચવાની અને તેને બદલવાની વિનંતી કરવામાં આવી</translation>
 <translation id="2811205483104563968">એકાઉન્ટ</translation>
 <translation id="2811564570599779918">સ્પામ અને કપટમાં ઘટાડો</translation>
 <translation id="2812049959647166806">Thunderboltની સુવિધા ઉપલબ્ધ નથી</translation>
@@ -5267,6 +5265,7 @@
 <translation id="6086846494333236931">તમારા વ્યવસ્થાપક દ્વારા ઇન્સ્ટોલ કરાયું</translation>
 <translation id="6087746524533454243">શું બ્રાઉઝરની માહિતી ધરાવતું પેજ શોધી રહ્યાં છો? મુલાકાત લો</translation>
 <translation id="6087960857463881712">અદ્ભુત ચહેરો</translation>
+<translation id="6088535503330933227">Chrome સ્પામ જાહેરાત, કપટ અને સાઇટ વચ્ચે શેરિંગને મર્યાદિત કરવાની રીતો શોધી રહ્યું છે. તમને જાહેરાતો બતાવવા માટે સાઇટ તમારી જે રુચિઓનો ઉપયોગ કરી શકે છે, Chrome તેનો પણ <ph name="ESTIMATE_INTERESTS_LINK" />. સેટિંગમાં જઈને તમે તમારી રુચિઓ મેનેજ કરી શકો છો.</translation>
 <translation id="608912389580139775">આ પેજને તમારી વાંચન સૂચિમાં ઉમેરવા માટે, બુકમાર્ક આઇકન પર ક્લિક કરો</translation>
 <translation id="6091761513005122595">શેર સફળતાપૂર્વક માઉન્ટ થયું.</translation>
 <translation id="6093888419484831006">અપડેટને રદ કરી રહ્યું છે...</translation>
@@ -5893,6 +5892,7 @@
 <translation id="6709133671862442373">News</translation>
 <translation id="6709357832553498500"><ph name="EXTENSIONNAME" /> નો ઉપયોગ કરીને કનેક્ટ કરો</translation>
 <translation id="6710213216561001401">પાછલી</translation>
+<translation id="6710394144992407503">જ્યારે તમે વેબ પેજ પર ટેક્સ્ટ ટાઇપ કરો છે ત્યારે જોડણીમાં ભૂલો ચેક કરો</translation>
 <translation id="6711146141291425900">ડાઉનલોડ માટે <ph name="WEB_DRIVE" /> એકાઉન્ટ લિંક કરો</translation>
 <translation id="6712943853047024245">તમે પહેલાંથી આ વપરાશકર્તાના નામ માટે <ph name="WEBSITE" />નો પાસવર્ડ સાચવ્યો છે</translation>
 <translation id="6713233729292711163">ઑફિસની પ્રોફાઇલ ઉમેરો</translation>
@@ -6511,6 +6511,7 @@
 <translation id="7340757554212515731">Googleને ક્રૅશ રિપોર્ટ તેમજ ડાયગ્નોસ્ટિક અને વપરાશનો ડેટા ઑટોમૅટિક રીતે મોકલે છે</translation>
 <translation id="7341834142292923918">આ સાઇટને ઍક્સેસ કરવા માગે છે</translation>
 <translation id="7343372807593926528">કૃપા કરીને પ્રતિસાદ મોકલતા પહેલાં સમસ્યાનું વર્ણન કરો.</translation>
+<translation id="7344585835349671209">તમારા ડિવાઇસ પર HTTPS/SSL પ્રમાણપત્રો મેનેજ કરો</translation>
 <translation id="7345706641791090287">તમારા પાસવર્ડની પુષ્ટિ કરો</translation>
 <translation id="7346909386216857016">બરાબર, સમજાઇ ગયું</translation>
 <translation id="7347452120014970266">આનાથી <ph name="ORIGIN_NAME" /> અને તેને ઇન્સ્ટૉલ કરેલી ઍપ દ્વારા સ્ટોર કરવામાં આવેલો બધો ડેટા અને કુકી સાફ કરવામાં આવશે</translation>
@@ -6640,6 +6641,7 @@
 <translation id="7460045493116006516">તમે ઇન્સ્ટૉલ કરેલી વર્તમાન થીમ</translation>
 <translation id="7461924472993315131">પિન કરો</translation>
 <translation id="746216226901520237">આગલી વખતે, તમારો ફોન તમારા <ph name="DEVICE_TYPE" />ને અનલૉક કરશે. તમે સેટિંગમાં Smart Lock બંધ કરી શકો છો.</translation>
+<translation id="7464153996453281700">ઘટક પહેલેથી અપ ટૂ ડેટ છે</translation>
 <translation id="7464637891177137294">તેને તમારા Google એકાઉન્ટ, <ph name="ACCOUNT" />માં સાચવો</translation>
 <translation id="7465522323587461835">{NUM_OPEN_TABS,plural, =1{# ખુલ્લી ટૅબ, ટૅબ સ્ટ્રિપને ટૉગલ કરો કરવા માટે દબાવો}one{# ખુલ્લી ટૅબ, ટૅબ સ્ટ્રિપને ટૉગલ કરો કરવા માટે દબાવો}other{# ખુલ્લી ટૅબ, ટૅબ સ્ટ્રિપને ટૉગલ કરો કરવા માટે દબાવો}}</translation>
 <translation id="7465635034594602553">કંઈક ખોટું થયું. કૃપા કરીને થોડી વાર રાહ જુઓ અને <ph name="APP_NAME" /> ફરીથી ચલાવો.</translation>
@@ -7147,6 +7149,7 @@
 <translation id="793531125873261495">વર્ચ્યુઅલ મશીન ડાઉનલોડ કરવામાં ભૂલ આવી. કૃપા કરીને ફરી પ્રયાસ કરો.</translation>
 <translation id="7935451262452051102"><ph name="PERCENT" />% પૂર્ણ થયું</translation>
 <translation id="7939062555109487992">વિગતવાર વિકલ્પો</translation>
+<translation id="7939328347457537652">ડિવાઇસના પ્રમાણપત્રો મેનેજ કરો</translation>
 <translation id="7939412583708276221">તો પણ રાખો</translation>
 <translation id="7942349550061667556">લાલ</translation>
 <translation id="7943368935008348579">PDFs ડાઉનલોડ કરો</translation>
@@ -7668,6 +7671,7 @@
 <translation id="8438566539970814960">શોધ અને બ્રાઉઝિંગ વધુ સારું બનાવો</translation>
 <translation id="8439506636278576865">આ ભાષામાં પેજનું અનુવાદ કરવાનું ઑફર કરે છે</translation>
 <translation id="8440630305826533614">Linux ઍપ</translation>
+<translation id="844063558976952706">હંમેશા આ સાઇટ પર</translation>
 <translation id="8443795068008423036">ખાતરી કરો કે તમારું ડિવાઇસ અપ ટૂ ડેટ છે અને ફરી પ્રયાસ કરો</translation>
 <translation id="8446884382197647889">વધુ જાણો</translation>
 <translation id="8447409163267621480">કાં તો Ctrl અથવા Alt શામેલ કરો</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb
index ace562a..d1ebf61 100644
--- a/chrome/app/resources/generated_resources_hi.xtb
+++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -1290,7 +1290,6 @@
 <translation id="2191754378957563929">चालू है</translation>
 <translation id="2192505247865591433">द्वारा:</translation>
 <translation id="2193365732679659387">विश्‍वास सेटिंग</translation>
-<translation id="2194554416429452547">ट्रायल के दौरान, Chrome ऐसे तरीके खोज रहा है जिनसे स्पैम, धोखाधड़ी, और साइटों के बीच शेयर किए जाने वाले डेटा को सीमित किया जा सके. Chrome <ph name="ESTIMATE_INTERESTS_LINK" />. इस जानकारी का इस्तेमाल साइटें आपको विज्ञापन दिखाने के लिए कर सकती हैं. सेटिंग में जाकर, अपनी पसंद के विषयों को मैनेज किया जा सकता है.</translation>
 <translation id="2194856509914051091">इन बातों का ध्यान रखें</translation>
 <translation id="2195331105963583686">आप उस समय के बाद भी, इस <ph name="DEVICE_TYPE" /> का इस्तेमाल कर पाएंगे. हालांकि, इसमें अपने आप होने वाले सॉफ़्टवेयर और सुरक्षा अपडेट नहीं मिलेंगे</translation>
 <translation id="2195729137168608510">ईमेल सुरक्षा</translation>
@@ -1969,7 +1968,6 @@
 <translation id="2806891468525657116">शॉर्टकट पहले से मौजूद है</translation>
 <translation id="2807517655263062534">आपकी डाउनलोड की गई फ़ाइलें यहां दिखाई देती हैं</translation>
 <translation id="2809586584051668049">और <ph name="NUMBER_ADDITIONAL_DISABLED" /> और</translation>
-<translation id="2810235462964014915"><ph name="SITE_NAME" /> को रीड करने और उसमें बदलाव करने के लिए अनुरोध किया गया</translation>
 <translation id="2811205483104563968">खाते</translation>
 <translation id="2811564570599779918">स्पैम और धोखाधड़ी को कम करना</translation>
 <translation id="2812049959647166806">Thunderbolt काम नहीं करता</translation>
@@ -5283,6 +5281,7 @@
 <translation id="6086846494333236931">आपके नियंत्रक द्वारा इंस्‍टॉल किया गया</translation>
 <translation id="6087746524533454243">ब्राउज़र की जानकारी वाला पेज चाहिए? यहां जाएं</translation>
 <translation id="6087960857463881712">बढ़िया चेहरा</translation>
+<translation id="6088535503330933227">Chrome ऐसे तरीके खोज रहा है जिनसे स्पैम वाले विज्ञापन, धोखाधड़ी, और साइटों के बीच शेयर किए जाने वाले डेटा को सीमित किया जा सके. Chrome <ph name="ESTIMATE_INTERESTS_LINK" /> का भी अनुमान लगाता है. इस जानकारी का इस्तेमाल साइटें, आपको विज्ञापन दिखाने के लिए कर सकती हैं. सेटिंग में जाकर, अपनी पसंद के विषयों को मैनेज किया जा सकता है.</translation>
 <translation id="608912389580139775">इस पेज को अपनी रीडिंग लिस्ट में जोड़ने के लिए, बुकमार्क आइकॉन पर क्लिक करें</translation>
 <translation id="6091761513005122595">शेयर माउंट करना सफल रहा.</translation>
 <translation id="6093888419484831006">अपडेट रद्द किया जा रहा है...</translation>
@@ -7689,6 +7688,7 @@
 <translation id="8438566539970814960">खोजों और ब्राउज़िंग को बेहतर बनाएं</translation>
 <translation id="8439506636278576865">इस भाषा में पृष्ठों का अनुवाद करने का ऑफ़र दें</translation>
 <translation id="8440630305826533614">Linux ऐप्लिकेशन</translation>
+<translation id="844063558976952706">इस साइट पर हमेशा</translation>
 <translation id="8443795068008423036">कृपया पक्का करें कि आपका डिवाइस अप-टू-डेट हो और फिर से कोशिश करें</translation>
 <translation id="8446884382197647889">ज़्यादा जानें</translation>
 <translation id="8447409163267621480">Ctrl या Alt में से किसी एक को शामिल करें</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb
index 87aa877..27b5e8e 100644
--- a/chrome/app/resources/generated_resources_hr.xtb
+++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -1280,7 +1280,6 @@
 <translation id="2191754378957563929">Uključeno</translation>
 <translation id="2192505247865591433">Šalje:</translation>
 <translation id="2193365732679659387">Postavke pouzdanosti</translation>
-<translation id="2194554416429452547">Tijekom proba Chrome istražuje načine za ograničavanje neželjenog sadržaja, prijevara i dijeljenja između web-lokacija. Chrome također <ph name="ESTIMATE_INTERESTS_LINK" /> koje web-lokacije mogu upotrebljavati da bi vam prikazivale oglase. Svojim interesima možete upravljati u postavkama.</translation>
 <translation id="2194856509914051091">Važne napomene</translation>
 <translation id="2195331105963583686">Nakon tog razdoblja i dalje ćete moći upotrebljavati uređaj <ph name="DEVICE_TYPE" />, no on više neće primati automatska ažuriranja softvera i sigurnosna ažuriranja</translation>
 <translation id="2195729137168608510">Zaštita e-pošte</translation>
@@ -1957,7 +1956,6 @@
 <translation id="2806891468525657116">Prečac već postoji</translation>
 <translation id="2807517655263062534">Ovdje se prikazuju datoteke koje ste preuzeli</translation>
 <translation id="2809586584051668049">i još <ph name="NUMBER_ADDITIONAL_DISABLED" /></translation>
-<translation id="2810235462964014915">Zahtijeva čitanje i promjenu web-lokacije <ph name="SITE_NAME" /></translation>
 <translation id="2811205483104563968">Računi</translation>
 <translation id="2811564570599779918">Smanjenje količine neželjenog sadržaja i prijevara</translation>
 <translation id="2812049959647166806">Thunderbolt nije podržan</translation>
@@ -5270,6 +5268,7 @@
 <translation id="6086846494333236931">Instalirao vaš administrator</translation>
 <translation id="6087746524533454243">Tražite li stranicu s informacijama o pregledniku? Otvorite</translation>
 <translation id="6087960857463881712">Oduševljeno lice</translation>
+<translation id="6088535503330933227">Chrome istražuje načine za ograničavanje neželjenih oglasa, prijevara i dijeljenja između web-lokacija. Chrome također <ph name="ESTIMATE_INTERESTS_LINK" /> koje web-lokacije mogu upotrebljavati da bi vam prikazivale oglase. Svojim interesima možete upravljati u postavkama.</translation>
 <translation id="608912389580139775">Da biste dodali ovu stranicu na popis za čitanje, kliknite ikonu Oznaka</translation>
 <translation id="6091761513005122595">Dijeljenje je učitano.</translation>
 <translation id="6093888419484831006">Otkazivanje ažuriranja...</translation>
@@ -7685,6 +7684,7 @@
 <translation id="8438566539970814960">Poboljšajte pretraživanje i pregledavanje</translation>
 <translation id="8439506636278576865">Ponudi prevođenje stranica na tom jeziku</translation>
 <translation id="8440630305826533614">Linux aplikacije</translation>
+<translation id="844063558976952706">Uvijek na ovoj web-lokaciji</translation>
 <translation id="8443795068008423036">Provjerite je li vaš uređaj ažuriran i pokušajte ponovo</translation>
 <translation id="8446884382197647889">Saznajte više</translation>
 <translation id="8447409163267621480">Mora sadržavati Ctrl ili Alt</translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb
index 431299e..5026b9d 100644
--- a/chrome/app/resources/generated_resources_hu.xtb
+++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -1289,7 +1289,6 @@
 <translation id="2191754378957563929">Be</translation>
 <translation id="2192505247865591433">Innen:</translation>
 <translation id="2193365732679659387">Bizalmi beállítások</translation>
-<translation id="2194554416429452547">A próbaidőszakok során a Chrome a spam, a csalás és a webhelyek közötti megosztás korlátozására szolgáló módszereket próbál ki. A Chrome emellett olyan <ph name="ESTIMATE_INTERESTS_LINK" />, amelyeket más webhelyek arra használhatnak fel, hogy hirdetéseket jelenítsenek meg Önnek. Érdeklődési köreit a beállításokban kezelheti.</translation>
 <translation id="2194856509914051091">Megfontolandó szempontok</translation>
 <translation id="2195331105963583686"><ph name="DEVICE_TYPE" /> eszközét ezt követően is tudja majd használni, de többé nem kap automatikus biztonsági és szoftverfrissítéseket</translation>
 <translation id="2195729137168608510">E-mail védelem</translation>
@@ -1968,7 +1967,6 @@
 <translation id="2806891468525657116">Ez a billentyűparancs már létezik</translation>
 <translation id="2807517655263062534">A letöltött fájlok itt jelennek meg</translation>
 <translation id="2809586584051668049">és <ph name="NUMBER_ADDITIONAL_DISABLED" /> további</translation>
-<translation id="2810235462964014915">A következő olvasása és módosítása kérelmezve: <ph name="SITE_NAME" /></translation>
 <translation id="2811205483104563968">Fiókok</translation>
 <translation id="2811564570599779918">A spamek és a csalás visszaszorítása</translation>
 <translation id="2812049959647166806">A Thunderbolt nem támogatott</translation>
@@ -5286,6 +5284,7 @@
 <translation id="6086846494333236931">A rendszergazda telepítette</translation>
 <translation id="6087746524533454243">A böngésző névjegyoldalát keresi? Nyissa meg ezt az oldalt:</translation>
 <translation id="6087960857463881712">Menő arc</translation>
+<translation id="6088535503330933227">A Chrome a hirdetési spam, a csalás és a webhelyek közötti megosztás korlátozására szolgáló módszereket próbál ki. A Chrome emellett olyan <ph name="ESTIMATE_INTERESTS_LINK" />, amelyeket más webhelyek arra használhatnak fel, hogy hirdetéseket jelenítsenek meg Önnek. Érdeklődési köreit a beállításokban kezelheti.</translation>
 <translation id="608912389580139775">Ha szeretne oldalakat felvenni az olvasási listájára, kattintson a Könyvjelző ikonra</translation>
 <translation id="6091761513005122595">A megosztott tároló csatlakoztatása sikeres volt.</translation>
 <translation id="6093888419484831006">Frissítés leállítása...</translation>
@@ -7697,6 +7696,7 @@
 <translation id="8438566539970814960">Keresések és böngészés javítása</translation>
 <translation id="8439506636278576865">Kínálja fel az ezen a nyelven írt oldalak fordítását</translation>
 <translation id="8440630305826533614">Linux-alkalmazások</translation>
+<translation id="844063558976952706">Ezen a webhelyen mindig</translation>
 <translation id="8443795068008423036">Győződjön meg arról, hogy eszköze naprakész, majd próbálkozzon újra</translation>
 <translation id="8446884382197647889">További információ</translation>
 <translation id="8447409163267621480">Használja a Ctrl vagy az Alt gombot</translation>
diff --git a/chrome/app/resources/generated_resources_hy.xtb b/chrome/app/resources/generated_resources_hy.xtb
index 7fec996..82da83a 100644
--- a/chrome/app/resources/generated_resources_hy.xtb
+++ b/chrome/app/resources/generated_resources_hy.xtb
@@ -1279,7 +1279,6 @@
 <translation id="2191754378957563929">Միաց</translation>
 <translation id="2192505247865591433">Ուղարկող`</translation>
 <translation id="2193365732679659387">Վստահության կարգավորումներ</translation>
-<translation id="2194554416429452547">Փորձարկումների ընթացքում Chrome-ն ուսումասիրում է եղանակները, որոնք թույլ են տալիս սահմանափակել սպամը, խարդախությունները և կայքերի միջև տեղեկությունների փոխանակումը։ Chrome-ը նաև <ph name="ESTIMATE_INTERESTS_LINK" />, որոնք կայքերը կարող են օգտագործել՝ ձեզ գովազդ ցուցադրելու համար։ Ձեր հետաքրքրությունները կարող եք կառավարել կարգավորումներում։</translation>
 <translation id="2194856509914051091">Կարևոր տեղեկություններ</translation>
 <translation id="2195331105963583686">Դուք նախկինի պես կկարողանաք օգտագործել <ph name="DEVICE_TYPE" /> սարքը, սակայն այն այլևս չի ստանա ծրագրային և անվտանգության կարգավորումների ավտոմատ թարմացումներ:</translation>
 <translation id="2195729137168608510">Էլփոստի պաշտպանություն</translation>
@@ -1955,7 +1954,6 @@
 <translation id="2806891468525657116">Դյուրանցումն արդեն գոյություն ունի</translation>
 <translation id="2807517655263062534">Ձեր ներբեռնած ֆայլերը կցուցադրվեն այստեղ</translation>
 <translation id="2809586584051668049">ու ևս <ph name="NUMBER_ADDITIONAL_DISABLED" /></translation>
-<translation id="2810235462964014915">Հայցվել է <ph name="SITE_NAME" /> կայքը կարդալու և փոփոխելու թույլտվություն</translation>
 <translation id="2811205483104563968">Հաշիվներ</translation>
 <translation id="2811564570599779918">Պայքար սպամի և խարդախության դեմ</translation>
 <translation id="2812049959647166806">Thunderbolt-ը չի աջակցվում</translation>
@@ -5267,6 +5265,7 @@
 <translation id="6086846494333236931">Տեղադրվել է ձեր ադմինիստրատորի կողմից</translation>
 <translation id="6087746524533454243">Դիտարկիչի մասին է՞ջն եք փնտրում։ Անցեք</translation>
 <translation id="6087960857463881712">Հիացած դեմք</translation>
+<translation id="6088535503330933227">Chrome-ն ուսումասիրում է եղանակները, որոնք թույլ են տալիս սահմանափակել սպամը, խարդախությունները և կայքերի միջև տեղեկությունների փոխանակումը։ Chrome-ը նաև <ph name="ESTIMATE_INTERESTS_LINK" />, որոնք կայքերը կարող են օգտագործել՝ ձեզ գովազդ ցուցադրելու համար։ Ձեր հետաքրքրությունները կարող եք կառավարել կարգավորումներում։</translation>
 <translation id="608912389580139775">Այս էջը ձեր ընթերցանության ցանկում ավելացնելու համար սեղմեք «Էջանիշ» պատկերակը</translation>
 <translation id="6091761513005122595">Թույլտվությունը տրամադրվեց։</translation>
 <translation id="6093888419484831006">Թարմացումը չեղարկվում է…</translation>
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb
index 0b4de02..2c0f767b 100644
--- a/chrome/app/resources/generated_resources_id.xtb
+++ b/chrome/app/resources/generated_resources_id.xtb
@@ -1289,7 +1289,6 @@
 <translation id="2191754378957563929">Aktif</translation>
 <translation id="2192505247865591433">Dari:</translation>
 <translation id="2193365732679659387">Setelan kepercayaan</translation>
-<translation id="2194554416429452547">Selama uji coba, Chrome mengembangkan cara untuk membatasi spam, penipuan, dan berbagi antar-situs. Chrome juga <ph name="ESTIMATE_INTERESTS_LINK" /> yang dapat digunakan situs untuk menampilkan iklan kepada Anda. Anda dapat mengubah minat di setelan.</translation>
 <translation id="2194856509914051091">Hal-hal yang perlu dipertimbangkan</translation>
 <translation id="2195331105963583686">Anda tetap dapat menggunakan <ph name="DEVICE_TYPE" /> ini setelah waktu tersebut, tetapi perangkat ini tidak akan lagi mendapatkan update software dan keamanan secara otomatis</translation>
 <translation id="2195729137168608510">Perlindungan Email</translation>
@@ -1968,7 +1967,6 @@
 <translation id="2806891468525657116">Pintasan sudah ada</translation>
 <translation id="2807517655263062534">File yang Anda download muncul di sini</translation>
 <translation id="2809586584051668049">dan <ph name="NUMBER_ADDITIONAL_DISABLED" /> lainnya</translation>
-<translation id="2810235462964014915">Meminta untuk membaca dan mengubah <ph name="SITE_NAME" /></translation>
 <translation id="2811205483104563968">Akun</translation>
 <translation id="2811564570599779918">Pengurangan spam &amp; penipuan</translation>
 <translation id="2812049959647166806">Thunderbolt tidak didukung</translation>
@@ -5283,6 +5281,7 @@
 <translation id="6086846494333236931">Dipasang oleh administrator Anda</translation>
 <translation id="6087746524533454243">Mencari halaman tentang browser? Buka</translation>
 <translation id="6087960857463881712">Wajah keren</translation>
+<translation id="6088535503330933227">Chrome sedang mengembangkan cara untuk membatasi spam iklan, penipuan, dan berbagi antar-situs. Chrome juga <ph name="ESTIMATE_INTERESTS_LINK" /> yang dapat digunakan situs untuk menampilkan iklan kepada Anda. Anda dapat mengelola minat di setelan.</translation>
 <translation id="608912389580139775">Untuk menambahkan halaman ini ke daftar bacaan, klik ikon Bookmark</translation>
 <translation id="6091761513005122595">URL berbagi berhasil dipasang.</translation>
 <translation id="6093888419484831006">Membatalkan pembaruan...</translation>
@@ -7692,6 +7691,7 @@
 <translation id="8438566539970814960">Jadikan penelusuran dan penjelajahan lebih baik</translation>
 <translation id="8439506636278576865">Tawarkan penerjemahan halaman ke dalam bahasa ini</translation>
 <translation id="8440630305826533614">Aplikasi Linux</translation>
+<translation id="844063558976952706">Selalu di halaman ini</translation>
 <translation id="8443795068008423036">Pastikan perangkat sudah diupdate dan coba lagi</translation>
 <translation id="8446884382197647889">Pelajari Lebih Lanjut</translation>
 <translation id="8447409163267621480">Sertakan Ctrl atau Alt</translation>
diff --git a/chrome/app/resources/generated_resources_is.xtb b/chrome/app/resources/generated_resources_is.xtb
index 6e32590..1666eee 100644
--- a/chrome/app/resources/generated_resources_is.xtb
+++ b/chrome/app/resources/generated_resources_is.xtb
@@ -1290,7 +1290,6 @@
 <translation id="2191754378957563929">Kveikt</translation>
 <translation id="2192505247865591433">Frá:</translation>
 <translation id="2193365732679659387">Trauststillingar</translation>
-<translation id="2194554416429452547">Chrome nýtir prufuáskriftir til að kanna leiðir til að takmarka ruslefni, svik og deilingu á milli vefsvæða. Chrome <ph name="ESTIMATE_INTERESTS_LINK" />, sem vefsvæði geta notað til að birta þér auglýsingar. Þú getur stjórnað áhugasviðunum þínum í stillingunum.</translation>
 <translation id="2194856509914051091">Atriði til að hafa í huga</translation>
 <translation id="2195331105963583686">Þú getur notað þetta <ph name="DEVICE_TYPE" /> áfram eftir þann tíma en færð ekki lengur sjálfvirkar hugbúnaðar- og öryggisuppfærslur</translation>
 <translation id="2195729137168608510">Tölvupóstvörn</translation>
@@ -1969,7 +1968,6 @@
 <translation id="2806891468525657116">Flýtileið er þegar til</translation>
 <translation id="2807517655263062534">Skrár sem þú hleður niður birtast hér</translation>
 <translation id="2809586584051668049">og <ph name="NUMBER_ADDITIONAL_DISABLED" /> í viðbót</translation>
-<translation id="2810235462964014915">Bað um að lesa og gera breytingar á <ph name="SITE_NAME" /></translation>
 <translation id="2811205483104563968">Reikningar</translation>
 <translation id="2811564570599779918">Dregið úr rusli og svikum</translation>
 <translation id="2812049959647166806">Ekki er stuðningur við Thunderbolt-tengi</translation>
@@ -5284,6 +5282,7 @@
 <translation id="6086846494333236931">Kerfisstjórinn þinn setti upp</translation>
 <translation id="6087746524533454243">Ertu að leita að upplýsingasíðu vafrans? Opna</translation>
 <translation id="6087960857463881712">Geðveikt hresst andlit</translation>
+<translation id="6088535503330933227">Chrome kannar leiðir til að takmarka ruslefni, svik og deilingu á milli vefsvæða. Chrome <ph name="ESTIMATE_INTERESTS_LINK" />, sem vefsvæði geta notað til að birta þér auglýsingar. Þú getur stjórnað áhugasviðunum þínum í stillingunum.</translation>
 <translation id="608912389580139775">Smelltu á bókamerkistáknið til að bæta þessari síðu við leslistann</translation>
 <translation id="6091761513005122595">Deilt efni var tengt.</translation>
 <translation id="6093888419484831006">Hættir við uppfærslu...</translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb
index 7e7a0e7..a0cdd61 100644
--- a/chrome/app/resources/generated_resources_it.xtb
+++ b/chrome/app/resources/generated_resources_it.xtb
@@ -980,6 +980,7 @@
 <translation id="1916502483199172559">Avatar rosso predefinito</translation>
 <translation id="1918141783557917887">Più &amp;piccolo</translation>
 <translation id="1920390473494685033">Contatti</translation>
+<translation id="1921544956190977703">Disponi della misura di sicurezza più efficace di Chrome contro estensioni, download e siti web pericolosi</translation>
 <translation id="1921584744613111023"><ph name="DPI" /> dpi</translation>
 <translation id="1923468477587371721">Per i siti Google come Gmail, Drive e YouTube viene usata la lingua del tuo Account Google, a meno che tu non abbia cambiato la lingua dei singoli prodotti</translation>
 <translation id="1923539912171292317">Clic automatici</translation>
@@ -1277,7 +1278,6 @@
 <translation id="2191754378957563929">On</translation>
 <translation id="2192505247865591433">Da:</translation>
 <translation id="2193365732679659387">Impostazioni di attendibilità</translation>
-<translation id="2194554416429452547">Durante le prove, Chrome esamina dei metodi per limitare spam, attività fraudolente e la condivisione tra siti. Inoltre, Chrome <ph name="ESTIMATE_INTERESTS_LINK" />, che possono essere usati dai siti per mostrarti annunci. Puoi gestire i tuoi interessi nelle impostazioni.</translation>
 <translation id="2194856509914051091">Aspetti da considerare</translation>
 <translation id="2195331105963583686">Dopo tale periodo, potrai continuare a usare questo dispositivo <ph name="DEVICE_TYPE" />, che però non riceverà più automaticamente aggiornamenti software e di sicurezza.</translation>
 <translation id="2195729137168608510">Protezione email</translation>
@@ -1953,7 +1953,6 @@
 <translation id="2806891468525657116">Scorciatoia già presente</translation>
 <translation id="2807517655263062534">I file scaricati vengono mostrati qui</translation>
 <translation id="2809586584051668049">e altre <ph name="NUMBER_ADDITIONAL_DISABLED" /></translation>
-<translation id="2810235462964014915">Richiesta di lettura e modifica del sito <ph name="SITE_NAME" /></translation>
 <translation id="2811205483104563968">Account</translation>
 <translation id="2811564570599779918">Riduzione di spam e attività fraudolente</translation>
 <translation id="2812049959647166806">Thunderbolt non è supportato</translation>
@@ -2078,6 +2077,7 @@
 <ph name="DOMAIN" /> richiede di lasciare la smart card inserita.</translation>
 <translation id="2923234477033317484">Rimuovi questo account</translation>
 <translation id="2923644930701689793">Accedi al rullino del telefono</translation>
+<translation id="292371311537977079">Impostazioni di Chrome</translation>
 <translation id="2925658782192398150">Fine, nessun problema rilevato</translation>
 <translation id="2926085873880284723">Ripristina scorciatoie predefinite</translation>
 <translation id="2926620265753325858">Il dispositivo <ph name="DEVICE_NAME" /> non è supportato.</translation>
@@ -2661,6 +2661,7 @@
 <translation id="3511528412952710609">Breve</translation>
 <translation id="3514335087372914653">Controllo dei giochi</translation>
 <translation id="3514373592552233661">Le reti preferite avranno precedenza su altre reti note se ne sono disponibili più di una</translation>
+<translation id="3514647716686280777">È attiva la protezione standard. Per aumentare la protezione da estensioni, download e siti web pericolosi, attiva Navigazione sicura avanzata nelle impostazioni di Chrome.</translation>
 <translation id="3515983984924808886">Tocca nuovamente il token di sicurezza per confermare la reimpostazione. Tutte le informazioni memorizzate sul token di sicurezza, nonché il suo PIN, verranno eliminate.</translation>
 <translation id="3518985090088779359">Accetta e continua</translation>
 <translation id="3519564332031442870">Servizio di backend di stampa</translation>
@@ -3879,6 +3880,7 @@
 <translation id="4689421377817139245">Sincronizza il preferito con l'iPhone</translation>
 <translation id="4690091457710545971">&lt;Quattro file generati dal firmware Intel Wi-Fi: csr.lst, fh_regs.lst, radio_reg.lst, monitor.lst.sysmon. I primi tre sono file binari che contengono dump di registro e che, secondo quanto dichiarato da Intel, non contengono informazioni personali o di identificazione del dispositivo. L'ultimo file è una traccia di esecuzione dal firmware Intel, privato di ogni informazione personale o di identificazione del dispositivo, ma troppo grande per essere mostrato qui. Questi file sono stati generati in risposta ai recenti problemi del tuo dispositivo con la rete Wi-Fi e verranno condivisi con Intel per agevolare la risoluzione di tali problemi.&gt;</translation>
 <translation id="4691791363716065510"><ph name="ORIGIN" /> potrà visualizzare il file <ph name="FILENAME" /> fino alla chiusura di tutte le schede di questo sito</translation>
+<translation id="4692342362587775867">Le notifiche di questo sito potrebbero essere improvvise</translation>
 <translation id="4692623383562244444">Motori di ricerca</translation>
 <translation id="4692736633446859167">In precedenza hai scelto di non consentire nessuna estensione su <ph name="SITE" /> Se aggiungi qui questo sito, le altre estensioni possono anche richiedere di leggere e modificare i dati dei tuoi siti su <ph name="SITE" />.</translation>
 <translation id="4693155481716051732">Sushi</translation>
@@ -5264,6 +5266,7 @@
 <translation id="6086846494333236931">Installata dall'amministratore</translation>
 <translation id="6087746524533454243">Stai cercando la pagina delle informazioni sul browser? Visita la pagina</translation>
 <translation id="6087960857463881712">Faccina splendente</translation>
+<translation id="6088535503330933227">Chrome esamina dei metodi per limitare spam, attività fraudolente e la condivisione tra siti. Inoltre, Chrome <ph name="ESTIMATE_INTERESTS_LINK" />, che possono essere usati dai siti per mostrarti annunci. Puoi gestire i tuoi interessi nelle impostazioni.</translation>
 <translation id="608912389580139775">Fai clic sull'icona dei preferiti per aggiungere questa pagina al tuo elenco di lettura</translation>
 <translation id="6091761513005122595">Condivisione montata correttamente.</translation>
 <translation id="6093888419484831006">Annullamento aggiornamento...</translation>
@@ -5452,6 +5455,7 @@
 <translation id="6278428485366576908">Tema</translation>
 <translation id="6278776436938569440">Cambia posizione</translation>
 <translation id="6279183038361895380">Premi |<ph name="ACCELERATOR" />| per mostrare il puntatore</translation>
+<translation id="6279595948631688299">E&amp;sporta certificato selezionato…</translation>
 <translation id="6280215091796946657">Accedi con un altro account</translation>
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6282180787514676874">{COUNT,plural, =1{Supera il limite di 1 foglio}other{Supera il limite di {COUNT} fogli}}</translation>
@@ -5566,6 +5570,7 @@
 <translation id="6398715114293939307">Rimuovi il Google Play Store</translation>
 <translation id="6398765197997659313">Esci da schermo intero</translation>
 <translation id="6399774419735315745">Spia</translation>
+<translation id="6401458660421980302">Per inviare questa scheda a un altro dispositivo, accedi a Chrome su quel dispositivo</translation>
 <translation id="6401597285454423070">Il computer contiene un dispositivo di sicurezza TPM (Trusted Platform Module) che viene utilizzato per implementare in Chrome OS molte funzionalità di sicurezza fondamentali. Per scoprire di più, visita il Centro assistenza Chromebook all'indirizzo: https://support.google.com/chromebook/?p=tpm</translation>
 <translation id="6404187344102273690">Giochi sui Chromebook</translation>
 <translation id="6404511346730675251">Modifica preferito</translation>
@@ -5802,6 +5807,7 @@
 <translation id="6619801788773578757">Aggiungi applicazione kiosk</translation>
 <translation id="6619990499523117484">Conferma il codice PIN</translation>
 <translation id="6620254580880484313">Nome container</translation>
+<translation id="6621391692573306628">Per inviare questa scheda a un altro dispositivo, accedi a Chrome su entrambi i dispositivi</translation>
 <translation id="6622980291894852883">Continua a bloccare le immagini</translation>
 <translation id="6624036901798307345">In modalità tablet, tocca il pulsante della barra degli strumenti del contatore di schede per aprire una nuova tabstrip che mostra le miniature di ogni scheda.</translation>
 <translation id="6624535038674360844"><ph name="FILE_NAME" /> include contenuti sensibili o pericolosi. Chiedi al proprietario di risolvere il problema.</translation>
@@ -7673,6 +7679,7 @@
 <translation id="8438566539970814960">Migliora le ricerche e le attività di navigazione</translation>
 <translation id="8439506636278576865">Proponi di tradurre pagine in questa lingua</translation>
 <translation id="8440630305826533614">App Linux</translation>
+<translation id="844063558976952706">Sempre su questo sito</translation>
 <translation id="8443795068008423036">Assicurati che il dispositivo sia aggiornato e riprova</translation>
 <translation id="8446884382197647889">Ulteriori informazioni</translation>
 <translation id="8447409163267621480">Includi CTRL o ALT</translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb
index 100d230..0658b39 100644
--- a/chrome/app/resources/generated_resources_iw.xtb
+++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -1288,7 +1288,6 @@
 <translation id="2191754378957563929">מופעלת</translation>
 <translation id="2192505247865591433">מ:</translation>
 <translation id="2193365732679659387">הגדרות אמון</translation>
-<translation id="2194554416429452547">‏במהלך תקופת הניסיון, מערכת Chrome מחפשת דרכים שמאפשרות להגביל ספאם, הונאות ושיתוף בין אתרים. מערכת Chrome מבצעת גם <ph name="ESTIMATE_INTERESTS_LINK" />, ואתרים יוכלו להשתמש במידע הזה כדי להציג לך מודעות. אפשר לנהל את תחומי העניין בהגדרות.</translation>
 <translation id="2194856509914051091">מה כדאי לקחת בחשבון</translation>
 <translation id="2195331105963583686">אפשר יהיה להמשיך להשתמש במכשיר ה-<ph name="DEVICE_TYPE" /> הזה גם אחר כך, אבל הוא לא יקבל יותר עדכוני תוכנה ואבטחה אוטומטיים</translation>
 <translation id="2195729137168608510">הגנת אימייל </translation>
@@ -1968,7 +1967,6 @@
 <translation id="2806891468525657116">קיצור הדרך כבר קיים</translation>
 <translation id="2807517655263062534">קבצים שמורידים יופיעו כאן</translation>
 <translation id="2809586584051668049">ועוד <ph name="NUMBER_ADDITIONAL_DISABLED" /></translation>
-<translation id="2810235462964014915">נשלחה בקשה לעיין ב-<ph name="SITE_NAME" /> ולבצע בו שינויים</translation>
 <translation id="2811205483104563968">חשבונות</translation>
 <translation id="2811564570599779918">הפחתת ספאם והונאות</translation>
 <translation id="2812049959647166806">‏Thunderbolt אינו נתמך</translation>
@@ -5281,6 +5279,7 @@
 <translation id="6086846494333236931">הותקן על ידי מנהל המערכת שלך</translation>
 <translation id="6087746524533454243">רוצה לאתר את דף המידע על הדפדפן? יש לעבור לכתובת</translation>
 <translation id="6087960857463881712">פרצוף "אדיר!"</translation>
+<translation id="6088535503330933227">‏ב-Chrome נבחנות דרכים חדשות להגביל ניסיונות הונאה, ספאם פרסומי ושיתוף בין אתרים. מערכת Chrome מבצעת גם <ph name="ESTIMATE_INTERESTS_LINK" />, ואתרים יוכלו להשתמש במידע הזה כדי להציג לך מודעות. אפשר לנהל את תחומי העניין בהגדרות.</translation>
 <translation id="608912389580139775">כדי להוסיף את הדף הזה לרשימת הקריאה, יש ללחוץ על סמל הסימנייה</translation>
 <translation id="6091761513005122595">התקן הרשת לשיתוף קבצים נטען בהצלחה.</translation>
 <translation id="6093888419484831006">המערכת מבטלת את העדכון...</translation>
@@ -7691,6 +7690,7 @@
 <translation id="8438566539970814960">שיפור החיפושים והגלישה</translation>
 <translation id="8439506636278576865">הצעות לתרגום דפים שנכתבו בשפה זו</translation>
 <translation id="8440630305826533614">‏אפליקציות Linux</translation>
+<translation id="844063558976952706">תמיד באתר זה</translation>
 <translation id="8443795068008423036">צריך לוודא שהמכשיר מעודכן ולנסות שוב</translation>
 <translation id="8446884382197647889">למידע נוסף</translation>
 <translation id="8447409163267621480">‏יש לכלול את Ctrl או Alt</translation>
diff --git a/chrome/app/resources/generated_resources_ja.xtb b/chrome/app/resources/generated_resources_ja.xtb
index 3bee88d..b2261928 100644
--- a/chrome/app/resources/generated_resources_ja.xtb
+++ b/chrome/app/resources/generated_resources_ja.xtb
@@ -1274,7 +1274,6 @@
 <translation id="2191754378957563929">オン</translation>
 <translation id="2192505247865591433">取得先:</translation>
 <translation id="2193365732679659387">信頼の設定</translation>
-<translation id="2194554416429452547">トライアル期間中、Chrome はスパムや不正行為、サイト間の共有を制限する方法を検証します。また、<ph name="ESTIMATE_INTERESTS_LINK" />して、サイトでの広告表示に使用できるようにします。興味 / 関心は設定で管理できます。</translation>
 <translation id="2194856509914051091">留意事項</translation>
 <translation id="2195331105963583686">この期限を過ぎても <ph name="DEVICE_TYPE" /> は使用できますが、ソフトウェアとセキュリティは自動更新されなくなります。</translation>
 <translation id="2195729137168608510">電子メールの保護</translation>
@@ -1947,7 +1946,6 @@
 <translation id="2806891468525657116">ショートカットがすでに存在します</translation>
 <translation id="2807517655263062534">ダウンロードしたファイルがここに表示されます</translation>
 <translation id="2809586584051668049">、他 <ph name="NUMBER_ADDITIONAL_DISABLED" /> 件</translation>
-<translation id="2810235462964014915"><ph name="SITE_NAME" /> の読み取りと変更をリクエストしました</translation>
 <translation id="2811205483104563968">アカウント</translation>
 <translation id="2811564570599779918">スパムや不正行為の低減</translation>
 <translation id="2812049959647166806">Thunderbolt はサポートされていません</translation>
@@ -5250,6 +5248,7 @@
 <translation id="6086846494333236931">管理者によりインストールされています</translation>
 <translation id="6087746524533454243">ブラウザ情報のページをお探しですか?次にアクセスしてください</translation>
 <translation id="6087960857463881712">エピック スマイリー</translation>
+<translation id="6088535503330933227">Chrome では広告スパムや不正行為、サイト間の共有を制限する方法を検証します。また、<ph name="ESTIMATE_INTERESTS_LINK" />して、サイトでの広告表示に使用できるようにします。興味 / 関心は設定で管理できます。</translation>
 <translation id="608912389580139775">リーディング リストにこのページを追加するには、ブックマーク アイコンをクリックしてください</translation>
 <translation id="6091761513005122595">共有フォルダが正常にマウントされました。</translation>
 <translation id="6093888419484831006">更新をキャンセルしています...</translation>
@@ -7654,6 +7653,7 @@
 <translation id="8438566539970814960">検索とブラウジングを改善する</translation>
 <translation id="8439506636278576865">この言語のページで翻訳ツールを表示する</translation>
 <translation id="8440630305826533614">Linux アプリ</translation>
+<translation id="844063558976952706">常にこのサイトのプラグインを実行する</translation>
 <translation id="8443795068008423036">デバイスが最新の状態になっていることを確認してから、もう一度お試しください</translation>
 <translation id="8446884382197647889">詳細</translation>
 <translation id="8447409163267621480">Ctrl キーまたは Alt キーが必要です</translation>
diff --git a/chrome/app/resources/generated_resources_ka.xtb b/chrome/app/resources/generated_resources_ka.xtb
index 0663201..74b2205 100644
--- a/chrome/app/resources/generated_resources_ka.xtb
+++ b/chrome/app/resources/generated_resources_ka.xtb
@@ -1278,7 +1278,6 @@
 <translation id="2191754378957563929">ჩართული</translation>
 <translation id="2192505247865591433">საიდან:</translation>
 <translation id="2193365732679659387">ნდობის პარამეტრები</translation>
-<translation id="2194554416429452547">საცდელი პერიოდის განმავლობაში, Chrome ცდილობს გაარკვიოს, თუ როგორ შეიძლება სპამის, თაღლითობისა და საიტებს შორის კონტენტის გაზიარების შეზღუდვა. Chrome-ში, ასევე, არის <ph name="ESTIMATE_INTERESTS_LINK" />, რომლის გამოყენებაც საიტებს შეუძლიათ რეკლამების საჩვენებლად. თქვენი ინტერესების მართვა შეგიძლიათ პარამეტრებიდან.</translation>
 <translation id="2194856509914051091">გასათვალისწინებელი საკითხები</translation>
 <translation id="2195331105963583686"><ph name="DEVICE_TYPE" /> ჩვეულებრივად შეგიძლიათ გამოიყენოთ აღნიშნული დროის შემდეგ, თუმცა ის აღარ მიიღებს პროგრამული უზრუნველყოფისა და უსაფრთხოების ავტომატურ განახლებებს</translation>
 <translation id="2195729137168608510">ელფოსტის დაცვა</translation>
@@ -1954,7 +1953,6 @@
 <translation id="2806891468525657116">მალსახმობი უკვე არსებობს</translation>
 <translation id="2807517655263062534">თქვენ მიერ ჩამოტვირთული ფაილები აქ გამოჩნდება</translation>
 <translation id="2809586584051668049">და <ph name="NUMBER_ADDITIONAL_DISABLED" /> მეტი</translation>
-<translation id="2810235462964014915">ითხოვს, წაიკითხოს და შეცვალოს <ph name="SITE_NAME" /></translation>
 <translation id="2811205483104563968">ანგარიშები</translation>
 <translation id="2811564570599779918">სმაპისა და თაღლითობის შემცირება</translation>
 <translation id="2812049959647166806">Thunderbolt მხარდაუჭერელია</translation>
@@ -5271,6 +5269,7 @@
 <translation id="6086846494333236931">დაინსტალირებულია თქვენი ადმინისტრატორის მიერ</translation>
 <translation id="6087746524533454243">ბრაუზერის ინფორმაციის გვერდს ეძებთ? მოინახულეთ</translation>
 <translation id="6087960857463881712">არაჩვეულებრივი სახე</translation>
+<translation id="6088535503330933227">Chrome ცდილობს, გაარკვიოს, თუ როგორ შეიძლება სარეკლამო სპამის, თაღლითობისა და საიტებს შორის კონტენტის გაზიარების შეზღუდვა. Chrome-ის მიერ, ასევე, ხორციელდება <ph name="ESTIMATE_INTERESTS_LINK" />, რის გამოყენებაც საიტებს შეუძლია რეკლამების საჩვენებლად. თქვენი ინტერესების მართვა შესაძლებელია პარამეტრებიდან.</translation>
 <translation id="608912389580139775">ეს გვერდი საკითხავ სიას რომ დაამატოთ, დააწკაპუნეთ სანიშნეს ხატულაზე</translation>
 <translation id="6091761513005122595">გაზიარება მიერთებულია წარმატებით.</translation>
 <translation id="6093888419484831006">განახლების გაუქმება…</translation>
diff --git a/chrome/app/resources/generated_resources_kk.xtb b/chrome/app/resources/generated_resources_kk.xtb
index 511f895..a97fa63a 100644
--- a/chrome/app/resources/generated_resources_kk.xtb
+++ b/chrome/app/resources/generated_resources_kk.xtb
@@ -1274,7 +1274,6 @@
 <translation id="2191754378957563929">Қосулы</translation>
 <translation id="2192505247865591433">Қайдан:</translation>
 <translation id="2193365732679659387">Сенім параметрлері</translation>
-<translation id="2194554416429452547">Сынақ мерзімі кезінде Chrome спамды, алаяқтықты және сайттар арасында бөлісуді шектеу жолдарын зерттейді. Сондай-ақ Chrome <ph name="ESTIMATE_INTERESTS_LINK" />, оларды сайттар сізге жарнамалар көрсету үшін пайдалана алады. Қызығушылықтарыңызды параметрлерден басқара аласыз.</translation>
 <translation id="2194856509914051091">Ескеретін жайттар</translation>
 <translation id="2195331105963583686">Одан кейін <ph name="DEVICE_TYPE" /> құрылғысын бұрынғыдай пайдалана бересіз, бірақ оған бағдарламалық құрал мен қауіпсіздік жүйесінің соңғы нұсқалары орнатылмайды.</translation>
 <translation id="2195729137168608510">Электрондық поштаны қорғау</translation>
@@ -1950,7 +1949,6 @@
 <translation id="2806891468525657116">Таңбаша бұрыннан бар</translation>
 <translation id="2807517655263062534">Сіз жүктеп алатын файлдар осында шығады</translation>
 <translation id="2809586584051668049">және тағы <ph name="NUMBER_ADDITIONAL_DISABLED" /></translation>
-<translation id="2810235462964014915"><ph name="SITE_NAME" /> деректерін оқу және өзгерту керектігі сұралды</translation>
 <translation id="2811205483104563968">Аккаунттар</translation>
 <translation id="2811564570599779918">Спам мен алаяқтықты азайту</translation>
 <translation id="2812049959647166806">Thunderbolt қолданылмайды</translation>
@@ -5259,6 +5257,7 @@
 <translation id="6086846494333236931">Әкімші орнатқан</translation>
 <translation id="6087746524533454243">Браузер туралы бетті іздеп жатырсыз ба? Келесіге бетке өтіңіз:</translation>
 <translation id="6087960857463881712">Сүйкімді бет</translation>
+<translation id="6088535503330933227">Chrome спамды, алаяқтықты және сайттар арасында бөлісуді шектеу жолдарын зерттеуде. Сондай-ақ Chrome <ph name="ESTIMATE_INTERESTS_LINK" />, оларды сайттар сізге жарнамалар көрсету үшін пайдалана алады. Қызығушылықтарыңызды параметрлерден басқара аласыз.</translation>
 <translation id="608912389580139775">Бұл бетті оқу тізіміне қосу үшін "Бетбелгі" белгішесін басыңыз.</translation>
 <translation id="6091761513005122595">Ортақ файл орнатылды.</translation>
 <translation id="6093888419484831006">Жаңартудан бас тартылуда…</translation>
diff --git a/chrome/app/resources/generated_resources_km.xtb b/chrome/app/resources/generated_resources_km.xtb
index 947d067bb..f00240e 100644
--- a/chrome/app/resources/generated_resources_km.xtb
+++ b/chrome/app/resources/generated_resources_km.xtb
@@ -1290,7 +1290,6 @@
 <translation id="2191754378957563929">បើក</translation>
 <translation id="2192505247865591433">ពី៖</translation>
 <translation id="2193365732679659387">ការកំណត់ការជឿទុកចិត្ត</translation>
-<translation id="2194554416429452547">អំឡុងពេល​ការសាកល្បង Chrome កំពុង​ស្វែងរក​វិធី​ដើម្បី​ដាក់កំហិត​លើ​សារឥតបានការ ការក្លែងបន្លំ និង​ការចែករំលែក​រវាង​គេហទំព័រ Chrome ក៏ <ph name="ESTIMATE_INTERESTS_LINK" /> ដែល​គេហទំព័រ​អាច​ប្រើប្រាស់​ដើម្បីបង្ហាញ​ការផ្សាយពាណិជ្ជកម្ម​ដល់អ្នក​ផងដែរ។ អ្នក​អាច​គ្រប់គ្រង​ចំណាប់អារម្មណ៍​របស់អ្នក​នៅក្នុង​ការកំណត់។</translation>
 <translation id="2194856509914051091">ចំណុច​ដែលត្រូវ​ពិចារណា</translation>
 <translation id="2195331105963583686">អ្នកនឹងនៅតែ​អាចប្រើ <ph name="DEVICE_TYPE" /> នេះ​បានដដែល បន្ទាប់ពី​ពេលនោះ ប៉ុន្តែវានឹង​លែងទទួលបាន​កំណែកម្មវិធី និងសុវត្ថិភាពថ្មី​ដោយស្វ័យប្រវត្តិ​ហើយ</translation>
 <translation id="2195729137168608510">ការការពារអ៊ីម៉ែល</translation>
@@ -1969,7 +1968,6 @@
 <translation id="2806891468525657116">ផ្លូវកាត់មានរួចហើយ</translation>
 <translation id="2807517655263062534">ឯកសារដែលអ្នកទាញយកបង្ហាញនៅទីនេះ</translation>
 <translation id="2809586584051668049">និង <ph name="NUMBER_ADDITIONAL_DISABLED" /> ទៀត</translation>
-<translation id="2810235462964014915">បានស្នើសុំអាន និងផ្លាស់ប្ដូរ <ph name="SITE_NAME" /></translation>
 <translation id="2811205483104563968">គណនី</translation>
 <translation id="2811564570599779918">ការកាត់បន្ថយ​សារឥតបានការ និង​ការគៃបន្លំ</translation>
 <translation id="2812049959647166806">មិនអាចប្រើ Thunderbolt បានទេ</translation>
@@ -5287,6 +5285,7 @@
 <translation id="6086846494333236931">បានដំឡើងដោយអ្នកគ្រប់គ្រងរបស់អ្នក</translation>
 <translation id="6087746524533454243">កំពុង​រកមើល​ទំព័រ "អំពី" របស់កម្មវិធីរុករកតាមអ៊ីនធឺណិតឬ? ចូលមើល</translation>
 <translation id="6087960857463881712">មុខដ៏ស្រស់ស្អាត</translation>
+<translation id="6088535503330933227">Chrome កំពុង​រុករក​វិធី​ដាក់កំហិត​លើ​សារ​ឥតបានការ​នៅ​ក្នុង​ការផ្សាយ​ពាណិជ្ជកម្ម ការគៃបន្លំ និង​ការចែករំលែក​រវាង​គេហទំព័រ​នានា។ Chrome ក៏​<ph name="ESTIMATE_INTERESTS_LINK" />​ដែល​គេហទំព័រ​អាច​ប្រើប្រាស់ ដើម្បីបង្ហាញ​ការផ្សាយពាណិជ្ជកម្ម​ដល់អ្នក​ផងដែរ។ អ្នក​អាច​គ្រប់គ្រង​ចំណាប់អារម្មណ៍​របស់អ្នក​នៅក្នុង​ការកំណត់។</translation>
 <translation id="608912389580139775">ដើម្បីបញ្ចូលទំព័រនេះទៅក្នុងបញ្ជីអានរបស់អ្នក សូមចុចរូបចំណាំ</translation>
 <translation id="6091761513005122595">បានភ្ជាប់​ការចែករំលែក​ដោយ​ជោគជ័យ​ហើយ។</translation>
 <translation id="6093888419484831006">កំពុងបដិសេធការធ្វើបច្ចុប្បន្នភាព...</translation>
diff --git a/chrome/app/resources/generated_resources_kn.xtb b/chrome/app/resources/generated_resources_kn.xtb
index 83609f5f..e9cf901 100644
--- a/chrome/app/resources/generated_resources_kn.xtb
+++ b/chrome/app/resources/generated_resources_kn.xtb
@@ -1282,7 +1282,6 @@
 <translation id="2191754378957563929">ಆನ್</translation>
 <translation id="2192505247865591433">ಇವರಿಂದ:</translation>
 <translation id="2193365732679659387">ವಿಶ್ವಾಸಾರ್ಹ ಸೆಟ್ಟಿಂಗ್‌ಗಳು</translation>
-<translation id="2194554416429452547">ಟ್ರಯಲ್‌ಗಳ ಅವಧಿಯಲ್ಲಿ, ಸ್ಪ್ಯಾಮ್, ವಂಚನೆ ಮತ್ತು ಸೈಟ್‌ಗಳ ನಡುವೆ ಹಂಚಿಕೊಳ್ಳುವಿಕೆಯನ್ನು ಮಿತಿಗೊಳಿಸುವ ವಿದಾನಗಳನ್ನು Chrome ಅನ್ವೇಷಿಸುತ್ತಿದೆ. ನಿಮಗೆ ಜಾಹೀರಾತುಗಳನ್ನು ತೋರಿಸಲು ಸೈಟ್‌ಗಳು ಬಳಸಬಹುದಾದ Chrome ಸಹ <ph name="ESTIMATE_INTERESTS_LINK" />. ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ ನಿಮ್ಮ ಆಸಕ್ತಿಗಳನ್ನು ನೀವು ನಿರ್ವಹಿಸಬಹುದು.</translation>
 <translation id="2194856509914051091">ಪರಿಗಣಿಸಬೇಕಾದ ಸಂಗತಿಗಳು</translation>
 <translation id="2195331105963583686">ಆ ಸಮಯದ ಬಳಿಕ ನೀವು ಈಗಲೂ ಈ <ph name="DEVICE_TYPE" /> ಬಳಸಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ, ಆದರೆ ಅದು ಸ್ವಯಂಚಾಲಿತ ಸಾಫ್ಟ್‌ವೇರ್ ಮತ್ತು ಭದ್ರತೆ ಅಪ್‌ಡೇಟ್‌ಗಳನ್ನು ಇನ್ನು ಮುಂದೆ ಸ್ವೀಕರಿಸುವುದಿಲ್ಲ</translation>
 <translation id="2195729137168608510">ಇಮೇಲ್ ಭದ್ರತೆ</translation>
@@ -1961,7 +1960,6 @@
 <translation id="2806891468525657116">ಶಾರ್ಟ್‌ಕಟ್ ಈಗಾಗಲೇ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ</translation>
 <translation id="2807517655263062534">ನೀವು ಡೌನ್‌ಲೋಡ್ ಮಾಡಿದ ಫೈಲ್‌ಗಳು ಇಲ್ಲಿ ಕಾಣಿಸಿಕೊಳ್ಳುತ್ತವೆ</translation>
 <translation id="2809586584051668049">ಮತ್ತು <ph name="NUMBER_ADDITIONAL_DISABLED" /> ಇನ್ನಷ್ಟು</translation>
-<translation id="2810235462964014915"><ph name="SITE_NAME" /> ಅನ್ನು ಓದಲು ಹಾಗೂ ಬದಲಾಯಿಸಲು ವಿನಂತಿಸಲಾಗಿದೆ</translation>
 <translation id="2811205483104563968">ಖಾತೆಗಳು</translation>
 <translation id="2811564570599779918">ಸ್ಪ್ಯಾಮ್ ಮತ್ತು ವಂಚನೆ ತಗ್ಗಿಸುವಿಕೆ</translation>
 <translation id="2812049959647166806">ಥಂಡರ್‌ಬೋಲ್ಟ್‌ಗೆ ಬೆಂಬಲವಿಲ್ಲ</translation>
@@ -5278,6 +5276,7 @@
 <translation id="6086846494333236931">ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ಸ್ಥಾಪಿಸಿದ್ದಾರೆ</translation>
 <translation id="6087746524533454243">ಬ್ರೌಸರ್ ಕುರಿತ ಪುಟವನ್ನು ಹುಡುಕುತ್ತಿರುವಿರಾ? ಭೇಟಿ ನೀಡಿ</translation>
 <translation id="6087960857463881712">ಅದ್ಭುತ ಮುಖ</translation>
+<translation id="6088535503330933227">ಜಾಹೀರಾತು ಸ್ಪ್ಯಾಮ್, ವಂಚನೆ ಹಾಗೂ ಸೈಟ್‌ಗಳ ನಡುವೆ ಹಂಚಿಕೊಳ್ಳುವಿಕೆಯನ್ನು ಮಿತಿಗೊಳಿಸುವ ಮಾರ್ಗಗಳನ್ನು Chrome ಎಕ್ಸ್‌ಪ್ಲೋರ್ ಮಾಡುತ್ತಿದೆ. ನಿಮಗೆ ಜಾಹೀರಾತುಗಳನ್ನು ತೋರಿಸಲು ಸೈಟ್‌ಗಳು ಬಳಸಬಹುದಾದ <ph name="ESTIMATE_INTERESTS_LINK" /> ಸಹ Chrome ಅಂದಾಜು ಮಾಡುತ್ತದೆ. ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ ನಿಮ್ಮ ಆಸಕ್ತಿಗಳನ್ನು ನೀವು ನಿರ್ವಹಿಸಬಹುದು.</translation>
 <translation id="608912389580139775">ನಿಮ್ಮ ಓದುವ ಪಟ್ಟಿಗೆ ಈ ಪುಟವನ್ನು ಸೇರಿಸಲು, ಬುಕ್‌ಮಾರ್ಕ್ ಐಕಾನ್ ಕ್ಲಿಕ್ ಮಾಡಿ</translation>
 <translation id="6091761513005122595">ಹಂಚಿಕೆ ಯಶಸ್ವಿಯಾಗಿ ಅಳವಡಿಸಲಾಗಿದೆ.</translation>
 <translation id="6093888419484831006">ಅಪ್‌ಡೇಟ್‌ ಅನ್ನು ರದ್ದುಗೊಳಿಸಲಾಗುತ್ತಿದೆ...</translation>
@@ -7682,6 +7681,7 @@
 <translation id="8438566539970814960">ಹುಡುಕಾಟಗಳನ್ನು ಮತ್ತು ಬ್ರೌಸಿಂಗ್ ಅನ್ನು ಉತ್ತಮಗೊಳಿಸುವಂತೆ ಮಾಡಿ</translation>
 <translation id="8439506636278576865">ಪುಟಗಳನ್ನು ಈ ಭಾಷೆಯಲ್ಲಿ ಅನುವಾದ ಮಾಡಲು ಅವಕಾಶ</translation>
 <translation id="8440630305826533614">Linux ಆ್ಯಪ್‌ಗಳು</translation>
+<translation id="844063558976952706">ಯಾವಾಗಲೂ ಈ ಸೈಟ್‌ನಲ್ಲಿ</translation>
 <translation id="8443795068008423036">ನಿಮ್ಮ ಸಾಧನವು ಅಪ್‌ ಟು ಡೇಟ್‌‌ ಆಗಿದೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ ಮತ್ತು ಪುನಃ ಪ್ರಯತ್ನಿಸಿ</translation>
 <translation id="8446884382197647889">ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ</translation>
 <translation id="8447409163267621480">Ctrl ಅಥವಾ Alt ಅನ್ನು ಒಳಗೊಂಡಿದೆ</translation>
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb
index 1af51c725..b7a7fb7 100644
--- a/chrome/app/resources/generated_resources_ko.xtb
+++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -1290,7 +1290,6 @@
 <translation id="2191754378957563929">사용</translation>
 <translation id="2192505247865591433">웹 브라우저</translation>
 <translation id="2193365732679659387">신뢰 설정</translation>
-<translation id="2194554416429452547">무료 체험 기간 동안 Chrome에서는 스팸, 사기 및 사이트 간 공유를 제한하는 방법을 탐색합니다. 또한 Chrome의 <ph name="ESTIMATE_INTERESTS_LINK" />을 기반으로 사이트가 광고를 표시할 수 있습니다. 설정에서 관심분야를 관리할 수 있습니다.</translation>
 <translation id="2194856509914051091">고려사항</translation>
 <translation id="2195331105963583686">이후로도 이 <ph name="DEVICE_TYPE" /> 기기를 계속 사용할 수는 있지만, 소프트웨어 및 보안 업데이트를 자동으로 받을 수 없게 됩니다.</translation>
 <translation id="2195729137168608510">이메일 보호</translation>
@@ -1970,7 +1969,6 @@
 <translation id="2806891468525657116">바로가기가 이미 존재합니다.</translation>
 <translation id="2807517655263062534">다운로드한 파일이 여기에 표시됩니다.</translation>
 <translation id="2809586584051668049">외 <ph name="NUMBER_ADDITIONAL_DISABLED" />개</translation>
-<translation id="2810235462964014915"><ph name="SITE_NAME" /> 사이트를 읽고 변경할 수 있도록 요청함</translation>
 <translation id="2811205483104563968">계정</translation>
 <translation id="2811564570599779918">스팸 및 사기 감소</translation>
 <translation id="2812049959647166806">Thunderbolt가 지원되지 않음</translation>
@@ -5285,6 +5283,7 @@
 <translation id="6086846494333236931">관리자가 설치함</translation>
 <translation id="6087746524533454243">브라우저의 정보 페이지를 찾는다면 다음으로 이동하세요.</translation>
 <translation id="6087960857463881712">멋진 얼굴</translation>
+<translation id="6088535503330933227">Chrome에서는 광고 스팸, 사기 및 사이트 간 공유를 제한하는 방법을 연구합니다. 또한 Chrome은 사이트에서 광고를 표시하는 데 사용할 수 있는 <ph name="ESTIMATE_INTERESTS_LINK" />합니다. 설정에서 관심분야를 관리할 수 있습니다.</translation>
 <translation id="608912389580139775">읽기 목록에 이 페이지를 추가하려면 북마크 아이콘을 클릭하세요.</translation>
 <translation id="6091761513005122595">공유가 성공적으로 마운트되었습니다.</translation>
 <translation id="6093888419484831006">업데이트를 취소하는 중...</translation>
@@ -7698,6 +7697,7 @@
 <translation id="8438566539970814960">검색 및 탐색 기능 개선</translation>
 <translation id="8439506636278576865">이 언어로 된 페이지에 대한 번역 옵션 제공</translation>
 <translation id="8440630305826533614">Linux 앱</translation>
+<translation id="844063558976952706">항상 이 사이트에서</translation>
 <translation id="8443795068008423036">기기가 최신 상태인지 확인하고 다시 시도해 보세요</translation>
 <translation id="8446884382197647889">자세히 알아보기</translation>
 <translation id="8447409163267621480">Ctrl 또는 Alt 중 하나를 포함해야 합니다</translation>
diff --git a/chrome/app/resources/generated_resources_ky.xtb b/chrome/app/resources/generated_resources_ky.xtb
index 2ee5bbf..6210ea6 100644
--- a/chrome/app/resources/generated_resources_ky.xtb
+++ b/chrome/app/resources/generated_resources_ky.xtb
@@ -1289,7 +1289,6 @@
 <translation id="2191754378957563929">Күйүк</translation>
 <translation id="2192505247865591433">Кимден:</translation>
 <translation id="2193365732679659387">Ишеним жөндөөлөрү</translation>
-<translation id="2194554416429452547">Сыноо версияларында Chrome cпам, шылуундук жана сайттардын арасында маалымат бөлүшүү аракеттерин чектөө жолдорун изилдейт. Ошондой эле, Chrome сайттар жарнамаларды көрсөтүү үчүн колдоно турган <ph name="ESTIMATE_INTERESTS_LINK" />. Кызыккан нерселериңизди параметрлерден башкара аласыз.</translation>
 <translation id="2194856509914051091">Эске ала турган нерселер</translation>
 <translation id="2195331105963583686">Андан кийин деле <ph name="DEVICE_TYPE" /> түзмөгүн колдоно бересиз, бирок андагы программа менен коопсуздук жаңыртуулары автоматтык түрдө алынбайт</translation>
 <translation id="2195729137168608510">Электрондук почтаны коргоо</translation>
@@ -1968,7 +1967,6 @@
 <translation id="2806891468525657116">Кыска жол мурунтан бар</translation>
 <translation id="2807517655263062534">Жүктөлүп алынган файлдар бул жерде көрүнөт</translation>
 <translation id="2809586584051668049">жана дагы <ph name="NUMBER_ADDITIONAL_DISABLED" /></translation>
-<translation id="2810235462964014915"><ph name="SITE_NAME" /> cайтын окуу жана өзгөртүү сурамын жөнөттү</translation>
 <translation id="2811205483104563968">Аккаунттар</translation>
 <translation id="2811564570599779918">Спам жана шылуундукту азайтуу</translation>
 <translation id="2812049959647166806">Thunderbolt колдоого алынбайт</translation>
@@ -5283,6 +5281,7 @@
 <translation id="6086846494333236931">Администраторуңуз орноткон</translation>
 <translation id="6087746524533454243">Барак жөнүндө серепчи маалыматын издеп жатасызбы? Төмөнкүгө өтүңүз:</translation>
 <translation id="6087960857463881712">Сүйкүмдүү бет</translation>
+<translation id="6088535503330933227">Chrome жарнама cпамдарын, шылуундук жана сайттардын арасында маалымат бөлүшүү аракеттерин чектөө жолдорун изилдейт. Ошондой эле, Chrome сайттар жарнамаларды көрсөтүү үчүн колдоно турган <ph name="ESTIMATE_INTERESTS_LINK" />. Кызыккан нерселериңизди параметрлерден башкара аласыз.</translation>
 <translation id="608912389580139775">Бул баракты окуу тизмесине кошуу үчүн Кыстарма сүрөтчөсүн басыңыз</translation>
 <translation id="6091761513005122595">Түзмөк ийгиликтүү кошулду.</translation>
 <translation id="6093888419484831006">Жаңыртууну жокко чыгаруу…</translation>
@@ -5907,6 +5906,7 @@
 <translation id="6709133671862442373">Жаңылыктар</translation>
 <translation id="6709357832553498500"><ph name="EXTENSIONNAME" /> менен туташуу</translation>
 <translation id="6710213216561001401">Мурунку</translation>
+<translation id="6710394144992407503">Веб беттерде текст терип жатканда орфографиялык каталарды текшерүү</translation>
 <translation id="6711146141291425900">Жүктөлүп алынган файлдарды көрүү үчүн <ph name="WEB_DRIVE" /> аккаунтун байланыштырыңыз</translation>
 <translation id="6712943853047024245"><ph name="WEBSITE" /> үчүн ушул колдонуучунун аты менен сырсөздү сактап койгонсуз</translation>
 <translation id="6713233729292711163">Жумуш профилин кошуу</translation>
@@ -6525,6 +6525,7 @@
 <translation id="7340757554212515731">Google'га ката жөнүндө кабарларды жана колдонуу статистикасын автоматтык түрдө жөнөтүп турат</translation>
 <translation id="7341834142292923918">Бул сайтка киргени жатат</translation>
 <translation id="7343372807593926528">Пикир жөнөтүүдөн мурун, көйгөйдү сүрөттөп берсеңиз.</translation>
+<translation id="7344585835349671209">Түзмөгүңүздөгү HTTPS/SSL тастыктамаларын башкаруу</translation>
 <translation id="7345706641791090287">Сырсөзүңүздү ырастаңыз</translation>
 <translation id="7346909386216857016">Жарайт, түшүндүм</translation>
 <translation id="7347452120014970266">Ушуну менен <ph name="ORIGIN_NAME" /> сакталган бардык маалымат жана cookie-файлдары, ошондой эле ал орноткон колдонмолор тазаланат</translation>
@@ -6654,6 +6655,7 @@
 <translation id="7460045493116006516">Сиз орнотуп алган учурдагы тема</translation>
 <translation id="7461924472993315131">Кадап коюу</translation>
 <translation id="746216226901520237">Эми <ph name="DEVICE_TYPE" /> түзмөгүнүн кулпусун телефонуңуз менен ачасыз. Жөндөөлөргө өтүп, Smart Lock'ту өчүрүп койсоңуз болот.</translation>
+<translation id="7464153996453281700">Компонент жаңыртылган</translation>
 <translation id="7464637891177137294">Аны <ph name="ACCOUNT" /> Google аккаунтуңузга сактаңыз</translation>
 <translation id="7465522323587461835">{NUM_OPEN_TABS,plural, =1{# өтмөк ачык, өтмөк тасмасын өчүрүү же күйгүзүү үчүн басыңыз}other{# өтмөк ачык, өтмөк тасмасын өчүрүү же күйгүзүү үчүн басыңыз}}</translation>
 <translation id="7465635034594602553">Бир жерден ката кетти. <ph name="APP_NAME" /> колдонмосун кайра ачуу үчүн бир нече мүнөт күтө туруңуз.</translation>
@@ -7162,6 +7164,7 @@
 <translation id="793531125873261495">Виртуалдык машина жүктөлүп алынбай калды. Кайталап көрүңүз.</translation>
 <translation id="7935451262452051102"><ph name="PERCENT" />% аткарылды</translation>
 <translation id="7939062555109487992">Кошумча параметрлер</translation>
+<translation id="7939328347457537652">Түзмөктүн тастыктамаларын башкаруу</translation>
 <translation id="7939412583708276221">Баары бир кала берсин</translation>
 <translation id="7942349550061667556">Кызыл</translation>
 <translation id="7943368935008348579">PDF файлдарын жүктөп алуу</translation>
diff --git a/chrome/app/resources/generated_resources_lo.xtb b/chrome/app/resources/generated_resources_lo.xtb
index 2639758e..82f2ba78 100644
--- a/chrome/app/resources/generated_resources_lo.xtb
+++ b/chrome/app/resources/generated_resources_lo.xtb
@@ -1287,7 +1287,6 @@
 <translation id="2191754378957563929">ເປີດ</translation>
 <translation id="2192505247865591433">ຈາກ:</translation>
 <translation id="2193365732679659387">ການຕັ້ງຄ່າການເຊື່ອຖື</translation>
-<translation id="2194554416429452547">ໃນລະຫວ່າງການທົດລອງໃຊ້, Chrome ກຳລັງສຳຫຼວດວິທີຈຳກັດສະແປມ, ການສໍ້ໂກງ ແລະ ການແບ່ງປັນລະຫວ່າງເວັບໄຊ. ນອກຈາກນັ້ນ, Chrome ຍັງ <ph name="ESTIMATE_INTERESTS_LINK" /> ນຳ ເຊິ່ງເວັບໄຊສາມາດໃຊ້ເພື່ອສະແດງໂຄສະນາໃຫ້ທ່ານເຫັນໄດ້. ທ່ານສາມາດຈັດການຄວາມສົນໃຈຂອງທ່ານໄດ້ໃນການຕັ້ງຄ່າ.</translation>
 <translation id="2194856509914051091">ສິ່ງທີ່ຕ້ອງພິຈາລະນາ</translation>
 <translation id="2195331105963583686">ທ່ານຈະຍັງສາມາດໃຊ້ <ph name="DEVICE_TYPE" /> ນີ້ໄດ້ຄືເກົ່າຫຼັງຈາກເວລານັ້ນ, ແຕ່ມັນຈະບໍ່ໄດ້ຮັບການອັບເດດຊອບແວ ແລະ ຄວາມປອດໄພໂດຍອັດຕະໂນມັດ</translation>
 <translation id="2195729137168608510">ການປົກປ້ອງອີເມວ</translation>
@@ -1967,7 +1966,6 @@
 <translation id="2806891468525657116">ມີທາງລັດນັ້ນຢູ່ກ່ອນແລ້ວ</translation>
 <translation id="2807517655263062534">ໄຟລ໌ທີ່ທ່ານດາວໂຫຼດປາກົດຢູ່ບ່ອນນີ້</translation>
 <translation id="2809586584051668049">ແລະ <ph name="NUMBER_ADDITIONAL_DISABLED" /> ເພີ່ມອີກ</translation>
-<translation id="2810235462964014915">ຮ້ອງຂໍເພື່ອອ່ານ ແລະ ປ່ຽນແປງ <ph name="SITE_NAME" /> ແລ້ວ</translation>
 <translation id="2811205483104563968">ບັນຊີ</translation>
 <translation id="2811564570599779918">ການຫຼຸດສະແປມ ແລະ ການສໍ້ໂກງ</translation>
 <translation id="2812049959647166806">ບໍ່ຮອງຮັບ Thunderbolt</translation>
@@ -5281,6 +5279,7 @@
 <translation id="6086846494333236931">ຕິດ​ຕັ້ງ​ໂດຍ​ຜູ້​ບໍ​ລິ​ຫານ​ຂອງ​ທ່ານ​ແລ້ວ</translation>
 <translation id="6087746524533454243">ກຳລັງຊອກຫາໜ້າກ່ຽວກັບໂປຣແກຣມທ່ອງເວັບບໍ? ເຂົ້າເບິ່ງ</translation>
 <translation id="6087960857463881712">ໃບໜ້າພິລຶກ</translation>
+<translation id="6088535503330933227">Chrome ກຳລັງສຳຫຼວດວິທີຈຳກັດສະແປມໂຄສະນາ, ການສໍ້ໂກງ ແລະ ການແບ່ງປັນລະຫວ່າງເວັບໄຊ. ນອກຈາກນັ້ນ, Chrome ຍັງ <ph name="ESTIMATE_INTERESTS_LINK" /> ນຳ ເຊິ່ງເວັບໄຊສາມາດໃຊ້ເພື່ອສະແດງໂຄສະນາໃຫ້ທ່ານເຫັນໄດ້. ທ່ານສາມາດຈັດການຄວາມສົນໃຈຂອງທ່ານໄດ້ໃນການຕັ້ງຄ່າ.</translation>
 <translation id="608912389580139775">ເພື່ອເພີ່ມໜ້ານີ້ໃສ່ລາຍຊື່ການອ່ານຂອງທ່ານ, ໃຫ້ຄລິກໄອຄອນບຸກມາກ</translation>
 <translation id="6091761513005122595">ເຊື່ອມຕໍ່ການແບ່ງປັນສຳເລັດແລ້ວ.</translation>
 <translation id="6093888419484831006">ກໍາລັງຍົກເລີກການອັບເດດ...</translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb
index d04401e..dc93e1a 100644
--- a/chrome/app/resources/generated_resources_lt.xtb
+++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -1292,7 +1292,6 @@
 <translation id="2191754378957563929">Įjungta</translation>
 <translation id="2192505247865591433">Iš:</translation>
 <translation id="2193365732679659387">Patikimumo nustatymai</translation>
-<translation id="2194554416429452547">Per bandomuosius laikotarpius „Chrome“ ieško būdų, kaip apriboti šlamštą, apgaules ir bendrinimą tarp svetainių. „Chrome“ taip pat <ph name="ESTIMATE_INTERESTS_LINK" />, kuriuos svetainės gali naudoti skelbimams rodyti. Galite tvarkyti savo pomėgius nustatymuose.</translation>
 <translation id="2194856509914051091">Į ką reikėtų atsižvelgti</translation>
 <translation id="2195331105963583686">Po to vis tiek galėsite naudoti „<ph name="DEVICE_TYPE" />“, bet nebebus teikiami automatiniai programinės įrangos ir saugos naujiniai</translation>
 <translation id="2195729137168608510">El. pašto apsauga</translation>
@@ -1971,7 +1970,6 @@
 <translation id="2806891468525657116">Spartusis klavišas jau yra</translation>
 <translation id="2807517655263062534">Atsisiųsti failai rodomi čia</translation>
 <translation id="2809586584051668049">ir dar <ph name="NUMBER_ADDITIONAL_DISABLED" /></translation>
-<translation id="2810235462964014915">Pateikta užklausa skaityti ir keisti <ph name="SITE_NAME" /></translation>
 <translation id="2811205483104563968">Paskyros</translation>
 <translation id="2811564570599779918">Mažiau šlamšto ir apgaulių</translation>
 <translation id="2812049959647166806">„Thunderbolt“ nepalaikoma</translation>
@@ -5287,6 +5285,7 @@
 <translation id="6086846494333236931">Įdiegė jūsų administratorius</translation>
 <translation id="6087746524533454243">Ieškote naršyklės puslapio „Apie“? Apsilankykite adresu</translation>
 <translation id="6087960857463881712">Nuostabus veidas</translation>
+<translation id="6088535503330933227">„Chrome“ ieško būdų, kaip apriboti skelbimų šlamštą, apgaules ir bendrinimą tarp svetainių. „Chrome“ taip pat <ph name="ESTIMATE_INTERESTS_LINK" />, kuriuos svetainės gali naudoti skelbimams rodyti. Galite tvarkyti savo pomėgius nustatymuose.</translation>
 <translation id="608912389580139775">Kad pridėtumėte puslapį prie skaitymo sąrašo, spustelėkite žymės piktogramą</translation>
 <translation id="6091761513005122595">Bendrinamas objektas įdėtas sėkmingai.</translation>
 <translation id="6093888419484831006">Naujinys atšaukiamas...</translation>
@@ -7702,6 +7701,7 @@
 <translation id="8438566539970814960">Tobulinti paieškas ir naršymą</translation>
 <translation id="8439506636278576865">Siūlyti versti puslapius šia kalba</translation>
 <translation id="8440630305826533614">„Linux“ programos</translation>
+<translation id="844063558976952706">Visada šioje svetainėje</translation>
 <translation id="8443795068008423036">Įsitikinkite, kad įrenginys atnaujintas, ir bandykite dar kartą</translation>
 <translation id="8446884382197647889">Sužinokite daugiau</translation>
 <translation id="8447409163267621480">Naudokite „Ctrl“ arba „Alt“</translation>
diff --git a/chrome/app/resources/generated_resources_lv.xtb b/chrome/app/resources/generated_resources_lv.xtb
index 5525249..968db49 100644
--- a/chrome/app/resources/generated_resources_lv.xtb
+++ b/chrome/app/resources/generated_resources_lv.xtb
@@ -1279,7 +1279,6 @@
 <translation id="2191754378957563929">Iesl.</translation>
 <translation id="2192505247865591433">No:</translation>
 <translation id="2193365732679659387">Uzticamības iestatījumi</translation>
-<translation id="2194554416429452547">Izmēģinājumu laikā Chrome pēta veidus, kā ierobežot nevēlamu saturu, krāpšanu un kopīgošanu starp vietnēm. Chrome arī <ph name="ESTIMATE_INTERESTS_LINK" />, ko vietnes var izmantot, lai rādītu jums reklāmas. Intereses varat pārvaldīt iestatījumos.</translation>
 <translation id="2194856509914051091">Svarīgi apsvērumi</translation>
 <translation id="2195331105963583686">Jūs joprojām varēsiet izmantot šo ierīci <ph name="DEVICE_TYPE" /> pēc noteiktā laika, taču vairs nesaņemsiet automātiskus programmatūras un drošības atjauninājumus.</translation>
 <translation id="2195729137168608510">E-pasta aizsardzība</translation>
@@ -1955,7 +1954,6 @@
 <translation id="2806891468525657116">Saīsne jau pastāv</translation>
 <translation id="2807517655263062534">Šeit ir redzami lejupielādētie faili.</translation>
 <translation id="2809586584051668049">un vēl <ph name="NUMBER_ADDITIONAL_DISABLED" /></translation>
-<translation id="2810235462964014915">Pieprasīta atļauja lasīt un mainīt saturu vietnē <ph name="SITE_NAME" /></translation>
 <translation id="2811205483104563968">Konti</translation>
 <translation id="2811564570599779918">Nevēlama satura un krāpšanas mazināšana</translation>
 <translation id="2812049959647166806">Thunderbolt savienojums netiek atbalstīts</translation>
@@ -5266,6 +5264,7 @@
 <translation id="6086846494333236931">Instalēja administrators.</translation>
 <translation id="6087746524533454243">Vai meklējat pārlūka lapu “Par”? Apmeklējiet vietni</translation>
 <translation id="6087960857463881712">Satriecoša seja</translation>
+<translation id="6088535503330933227">Chrome komanda pēta veidus, kā ierobežot ar reklāmām saistītas mēstules, krāpšanu un datu kopīgošanu starp vietnēm. Chrome arī <ph name="ESTIMATE_INTERESTS_LINK" />, ko vietnes var izmantot, lai rādītu jums reklāmas. Intereses varat pārvaldīt iestatījumos.</translation>
 <translation id="608912389580139775">Lai pievienotu šo lapu lasīšanas sarakstam, pieskarieties grāmatzīmes ikonai</translation>
 <translation id="6091761513005122595">Kopīgošana veiksmīgi iekļauta.</translation>
 <translation id="6093888419484831006">Notiek atjaunināšanas atcelšana...</translation>
@@ -7678,6 +7677,7 @@
 <translation id="8438566539970814960">Uzlabot meklēšanu un pārlūkošanu</translation>
 <translation id="8439506636278576865">Piedāvāt tulkot lapas šajā valodā</translation>
 <translation id="8440630305826533614">Linux lietotnes</translation>
+<translation id="844063558976952706">Vienmēr šajā vietnē</translation>
 <translation id="8443795068008423036">Gādājiet, lai ierīce būtu atjaunināta, un mēģiniet vēlreiz.</translation>
 <translation id="8446884382197647889">Uzziniet vairāk</translation>
 <translation id="8447409163267621480">Jāiekļauj “Ctrl” vai “Alt”</translation>
diff --git a/chrome/app/resources/generated_resources_mk.xtb b/chrome/app/resources/generated_resources_mk.xtb
index 7cf8af5..1c4f155 100644
--- a/chrome/app/resources/generated_resources_mk.xtb
+++ b/chrome/app/resources/generated_resources_mk.xtb
@@ -1291,7 +1291,6 @@
 <translation id="2191754378957563929">Вклучен</translation>
 <translation id="2192505247865591433">Од:</translation>
 <translation id="2193365732679659387">Поставки на довербата</translation>
-<translation id="2194554416429452547">За време на пробните периоди, Chrome истражува начини за ограничување на спамот, измамите и разменувањето податоци помеѓу сајтовите. Chrome исто така <ph name="ESTIMATE_INTERESTS_LINK" /> што сајтовите може да ги користат за да ви прикажуваат реклами. Може да управувате со интересите во поставките.</translation>
 <translation id="2194856509914051091">Нешта што треба да се земат предвид</translation>
 <translation id="2195331105963583686">Сѐ уште ќе може да го користите овој <ph name="DEVICE_TYPE" /> после тој период, но веќе нема да добива автоматски софтверски и безбедносни ажурирања</translation>
 <translation id="2195729137168608510">Заштита на е-пошта</translation>
@@ -1970,7 +1969,6 @@
 <translation id="2806891468525657116">Кратенката веќе постои</translation>
 <translation id="2807517655263062534">Датотеките што ги преземате се појавуваат тука</translation>
 <translation id="2809586584051668049">и уште <ph name="NUMBER_ADDITIONAL_DISABLED" /></translation>
-<translation id="2810235462964014915">Побара да го чита и менува <ph name="SITE_NAME" /></translation>
 <translation id="2811205483104563968">Сметки</translation>
 <translation id="2811564570599779918">Намалување спам и измама</translation>
 <translation id="2812049959647166806">Thunderbolt не е поддржан</translation>
@@ -5288,6 +5286,7 @@
 <translation id="6086846494333236931">Инсталирано од вашиот администратор</translation>
 <translation id="6087746524533454243">Ја барате страницата „За“ на прелистувачот? Оди</translation>
 <translation id="6087960857463881712">Прекрасно лице</translation>
+<translation id="6088535503330933227">Chrome истражува начини за ограничување на спамот со реклами, измамите и разменувањето податоци помеѓу сајтовите. Chrome исто така <ph name="ESTIMATE_INTERESTS_LINK" /> што сајтовите може да ги користат за да ви прикажуваат реклами. Може да управувате со интересите во поставките.</translation>
 <translation id="608912389580139775">За да ја додадете страницава во списокот за читање, допрете на иконата за обележувач</translation>
 <translation id="6091761513005122595">Споделувањето е успешно монтирано.</translation>
 <translation id="6093888419484831006">Се откажува ажурирањето...</translation>
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb
index ea95bf6a..3479a64 100644
--- a/chrome/app/resources/generated_resources_ml.xtb
+++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -1276,7 +1276,6 @@
 <translation id="2191754378957563929">ഓണാണ്</translation>
 <translation id="2192505247865591433">പ്രേഷിതാവ്:</translation>
 <translation id="2193365732679659387">വിശ്വസ്ഥത ക്രമീകരണം</translation>
-<translation id="2194554416429452547">ട്രയലുകൾ നടക്കുമ്പോൾ, സ്പാം, വഞ്ചന, സൈറ്റുകൾക്കിടയിൽ പങ്കിടൽ എന്നിവ പരിമിതപ്പെടുത്താനുള്ള വഴികൾ കണ്ടെത്താൻ Chrome ശ്രമിക്കുന്നു. Chrome, നിങ്ങൾക്ക് പരസ്യങ്ങൾ കാണിക്കാൻ സൈറ്റുകൾക്ക് ഉപയോഗിക്കാനാകുന്ന <ph name="ESTIMATE_INTERESTS_LINK" />. ക്രമീകരണത്തിൽ നിങ്ങളുടെ താൽപ്പര്യങ്ങൾ മാനേജ് ചെയ്യാം.</translation>
 <translation id="2194856509914051091">പരിഗണിക്കേണ്ട കാര്യങ്ങൾ</translation>
 <translation id="2195331105963583686">ആ സമയത്തിന് ശേഷവും നിങ്ങൾക്ക് <ph name="DEVICE_TYPE" /> ഉപയോഗിക്കാനാവും, എന്നാൽ തുടർന്നങ്ങോട്ട് സ്വയമേവയുള്ള സോഫ്‌റ്റ്‌വെയർ, സുരക്ഷാ അപ്ഡേറ്റുകൾ ലഭിക്കില്ല</translation>
 <translation id="2195729137168608510">ഇമെയില്‍‌ പരിരക്ഷണം</translation>
@@ -1952,7 +1951,6 @@
 <translation id="2806891468525657116">കുറുക്കുവഴി മുമ്പേ നിലവിലുണ്ട്</translation>
 <translation id="2807517655263062534">നിങ്ങൾ ഡൗൺലോഡ് ചെയ്യുന്ന ഫയലുകൾ ഇവിടെ ദൃശ്യമാകും</translation>
 <translation id="2809586584051668049">ഒപ്പം <ph name="NUMBER_ADDITIONAL_DISABLED" /> എണ്ണം കൂടി</translation>
-<translation id="2810235462964014915"><ph name="SITE_NAME" /> എന്നതിലെ ഡാറ്റ വായിക്കാനും അതിൽ മാറ്റം വരുത്താനും അഭ്യർത്ഥിച്ചത്</translation>
 <translation id="2811205483104563968">അക്കൗണ്ടുകൾ</translation>
 <translation id="2811564570599779918">സ്‌പാമും വഞ്ചനയും കുറയ്ക്കൽ</translation>
 <translation id="2812049959647166806">Thunderbolt-ന് പിന്തുണയില്ല</translation>
@@ -5266,6 +5264,7 @@
 <translation id="6086846494333236931">നിങ്ങളുടെ അഡ്‌മിനിസ്‌ട്രേറ്റർ ഇൻസ്റ്റാൾ ചെയ്‌തു</translation>
 <translation id="6087746524533454243">ബ്രൗസറിന്റെ ആമുഖ പേജ് തിരയുകയാണോ? ഇവിടെ സന്ദർശിക്കൂ</translation>
 <translation id="6087960857463881712">മനോഹരമായ മുഖം</translation>
+<translation id="6088535503330933227">പരസ്യ സ്പാം, വഞ്ചന, സൈറ്റുകൾക്കിടയിലുള്ള പങ്കിടൽ എന്നിവ പരിമിതപ്പെടുത്താനുള്ള വഴികൾ കണ്ടെത്താൻ Chrome ശ്രമിക്കുന്നു. Chrome <ph name="ESTIMATE_INTERESTS_LINK" />, നിങ്ങളെ പരസ്യങ്ങൾ കാണിക്കാൻ സൈറ്റുകൾക്ക് ഇത് ഉപയോഗിക്കാം. ക്രമീകരണത്തിൽ നിങ്ങളുടെ താൽപ്പര്യങ്ങൾ മാനേജ് ചെയ്യാം.</translation>
 <translation id="608912389580139775">നിങ്ങളുടെ വായിക്കാനുള്ളവയുടെ ലിസ്‌റ്റിലേക്ക് ഈ പേജ് ചേർക്കാൻ, ബുക്ക്‌മാർക്ക് ഐക്കണിൽ ക്ലിക്ക് ചെയ്യുക</translation>
 <translation id="6091761513005122595">പങ്കിടൽ വിജയകരമായി മൗണ്ട് ചെയ്തു.</translation>
 <translation id="6093888419484831006">അപ്‌ഡേറ്റ് റദ്ദാക്കുന്നു...</translation>
@@ -7675,6 +7674,7 @@
 <translation id="8438566539970814960">തിരയലുകളും ബ്രൗസിംഗും മികച്ചതാക്കുക</translation>
 <translation id="8439506636278576865">പേജുകൾ ഈ ഭാഷയിലേക്ക് വിവർത്തനം ചെയ്യാനുള്ള ഓഫർ</translation>
 <translation id="8440630305826533614">Linux ആപ്പുകൾ</translation>
+<translation id="844063558976952706">എല്ലായ്പ്പോഴും ഈ സൈറ്റില്‍</translation>
 <translation id="8443795068008423036">നിങ്ങളുടെ ഉപകരണം അപ് ടു ഡേറ്റാണെന്ന് ഉറപ്പാക്കി വീണ്ടും ശ്രമിക്കൂ</translation>
 <translation id="8446884382197647889">കൂടുതലറിയുക</translation>
 <translation id="8447409163267621480">ഒന്നുകിൽ Ctrl അല്ലെങ്കിൽ, Alt ഉൾപ്പെടുത്തുക</translation>
diff --git a/chrome/app/resources/generated_resources_mn.xtb b/chrome/app/resources/generated_resources_mn.xtb
index a8a7c4c6..4e151035 100644
--- a/chrome/app/resources/generated_resources_mn.xtb
+++ b/chrome/app/resources/generated_resources_mn.xtb
@@ -1286,7 +1286,6 @@
 <translation id="2191754378957563929">Асаалттай</translation>
 <translation id="2192505247865591433">Хэнээс:</translation>
 <translation id="2193365732679659387">Итгэмжлэх тохиргоо</translation>
-<translation id="2194554416429452547">Туршилтын хугацааны үеэр Chrome спам, залилан болон сайтууд хооронд хуваалцахыг хязгаарлах аргуудыг судалж байна. Chrome мөн сайтуудын танд зар харуулахын тулд ашиглаж болох <ph name="ESTIMATE_INTERESTS_LINK" />. Та сонирхлуудаа тохиргоо хэсэгт удирдах боломжтой.</translation>
 <translation id="2194856509914051091">Анхаарч үзэх зүйлс</translation>
 <translation id="2195331105963583686">Та энэ <ph name="DEVICE_TYPE" />-г ийм хугацааны дараа ашиглах боломжтой хэвээр байх боловч энэ нь программ хангамж болон аюулгүй байдлын автомат шинэчлэлтийг авах боломжгүй байна.</translation>
 <translation id="2195729137168608510">И-мэйл хамгаалалт</translation>
@@ -1965,7 +1964,6 @@
 <translation id="2806891468525657116">Ижил товчлол ашиглалтад байна</translation>
 <translation id="2807517655263062534">Таны татаж авсан файл энд харагдана</translation>
 <translation id="2809586584051668049">ба <ph name="NUMBER_ADDITIONAL_DISABLED" /> дэлгэрэнгүй</translation>
-<translation id="2810235462964014915"><ph name="SITE_NAME" />-г унших, өөрчлөх хүсэлт тавьсан</translation>
 <translation id="2811205483104563968">Бүртгэлүүд</translation>
 <translation id="2811564570599779918">Спам болон залиланг бууруулах</translation>
 <translation id="2812049959647166806">Thunderbolt-г дэмждэггүй</translation>
@@ -5282,6 +5280,7 @@
 <translation id="6086846494333236931">Таны админ суулгасан</translation>
 <translation id="6087746524533454243">Хөтчийн талаарх хуудсыг хайж байна уу? Зочлох</translation>
 <translation id="6087960857463881712">Гайхалтай нүүр</translation>
+<translation id="6088535503330933227">Chrome нь зар сурталчилгааны спам, залилан мэхлэх, сайт хооронд хуваалцахыг хязгаарлах арга замыг судалж байна. Chrome мөн сайтуудын танд зар харуулахын тулд ашиглаж болох <ph name="ESTIMATE_INTERESTS_LINK" />. Та сонирхлуудаа тохиргоо хэсэгт удирдах боломжтой.</translation>
 <translation id="608912389580139775">Энэ хуудсыг унших жагсаалтдаа нэмэхийн тулд Хавчуурганы дүрс тэмдгийг товшино уу</translation>
 <translation id="6091761513005122595">Хуваалцлыг амжилттай салгасан.</translation>
 <translation id="6093888419484831006">Шинэчлэлтийг устгаж байна...</translation>
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb
index 8b7325d..cbbe9fd5 100644
--- a/chrome/app/resources/generated_resources_mr.xtb
+++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -1288,7 +1288,6 @@
 <translation id="2191754378957563929">सुरू करा</translation>
 <translation id="2192505247865591433">द्वारा:</translation>
 <translation id="2193365732679659387">विश्वासू सेटिंग्ज</translation>
-<translation id="2194554416429452547">चाचण्यांदरम्यान, Chrome हे स्पॅम, फसवणूक आणि साइटदरम्यान शेअरिंग मर्यादित करण्याचे मार्ग शोधत आहे. Chrome हे साइट तुम्हाला जाहिराती दाखवण्यासाठी वापरू शकतात अशादेखील <ph name="ESTIMATE_INTERESTS_LINK" />. तुम्ही सेटिंग्जमध्ये तुमची स्वारस्ये व्यवस्थापित करू शकता.</translation>
 <translation id="2194856509914051091">विचार करण्याच्या गोष्टी</translation>
 <translation id="2195331105963583686">तुम्ही त्यानंतर तरीही हे <ph name="DEVICE_TYPE" /> वापरू शकाल पण ते यापुढे ऑटोमॅटिक सॉफ्टवेअर आणि सुरक्षा अपडेट मिळवू शकणार नाही</translation>
 <translation id="2195729137168608510">ईमेल संरक्षण</translation>
@@ -1967,7 +1966,6 @@
 <translation id="2806891468525657116">शॉर्टकट आधीच अस्तित्वात आहे</translation>
 <translation id="2807517655263062534">तुम्ही डाउनलोड केलेल्या फाइल येथे दिसतात</translation>
 <translation id="2809586584051668049">आणि <ph name="NUMBER_ADDITIONAL_DISABLED" /> अधिक</translation>
-<translation id="2810235462964014915"><ph name="SITE_NAME" /> रीड करण्याची आणि बदलण्याची विनंती केली</translation>
 <translation id="2811205483104563968">खाती</translation>
 <translation id="2811564570599779918">स्पॅम आणि घोटाळा कमी करणे</translation>
 <translation id="2812049959647166806">थंडरबोल्टला सपोर्ट करत नाही</translation>
@@ -5281,6 +5279,7 @@
 <translation id="6086846494333236931">तुमच्या ॲडमिनिस्ट्रेटरद्वारे इंस्टॉल केले</translation>
 <translation id="6087746524533454243">ब्राउझरच्या पेजविषयी माहिती शोधत आहात का? भेट द्या</translation>
 <translation id="6087960857463881712">छान चेहरा</translation>
+<translation id="6088535503330933227">Chrome हे स्पॅम असलेली जाहिरात, फसवणूक आणि साइटदरम्यान शेअरिंग मर्यादित करण्याचे मार्ग एक्सप्लोर करत आहे. तुम्हाला जाहिराती दाखवण्यासाठी साइट वापरू शकतील याकरिता Chrome <ph name="ESTIMATE_INTERESTS_LINK" /> हेदेखील करते. तुम्ही सेटिंग्जमध्ये तुमची स्वारस्ये व्यवस्थापित करू शकता.</translation>
 <translation id="608912389580139775">हे पेज तुमच्या वाचन सूचीमध्ये जोडण्यासाठी, बुकमार्क आयकनवर क्लिक करा</translation>
 <translation id="6091761513005122595">शेअर यशस्वीरीत्‍‍‍‍या माउंट केले आहे.</translation>
 <translation id="6093888419484831006">अपडेट रद्द करत आहे...</translation>
@@ -5905,6 +5904,7 @@
 <translation id="6709133671862442373">News</translation>
 <translation id="6709357832553498500"><ph name="EXTENSIONNAME" /> वापरून कनेक्ट करा</translation>
 <translation id="6710213216561001401">मागील</translation>
+<translation id="6710394144992407503">तुम्ही वेब पेजवर मजकूर टाइप करता, तेव्हा शब्दलेखन एरर तपासा</translation>
 <translation id="6711146141291425900">डाउनलोड साठी <ph name="WEB_DRIVE" /> खाते लिंक करा</translation>
 <translation id="6712943853047024245">तुम्ही <ph name="WEBSITE" /> साठी या वापरकर्ता नावासह आधीच पासवर्ड सेव्ह केला आहे</translation>
 <translation id="6713233729292711163">कार्य प्रोफाइल जोडा</translation>
@@ -6523,6 +6523,7 @@
 <translation id="7340757554212515731">Google ला क्रॅश अहवाल तसेच निदान आणि वापर डेटा आपोआप पाठवते</translation>
 <translation id="7341834142292923918">या साइटचा ॲक्सेस हवा आहे</translation>
 <translation id="7343372807593926528">कृपया फीडबॅक पाठवण्यापूर्वी समस्येचे वर्णन करा.</translation>
+<translation id="7344585835349671209">तुमच्या डिव्हाइसवर HTTPS/SSL सर्टिफिकेट व्यवस्थापित करा</translation>
 <translation id="7345706641791090287">तुमचा पासवर्ड कन्फर्म करा</translation>
 <translation id="7346909386216857016">ठीक आहे, समजले</translation>
 <translation id="7347452120014970266">हे <ph name="ORIGIN_NAME" /> ने स्टोअर केलेला सर्व डेटा आणि कुकी व त्याची इंस्टॉल केलेली अ‍ॅप्स साफ करेल</translation>
@@ -6652,6 +6653,7 @@
 <translation id="7460045493116006516">तुम्ही इंस्टॉल केलेली सध्याची थीम</translation>
 <translation id="7461924472993315131">पिन</translation>
 <translation id="746216226901520237">पुढील वेळेस तुमचा फोन तुमचे <ph name="DEVICE_TYPE" /> अनलॉक करेल. तुम्ही सेटिंग्जमधून Smart Lock बंद करू शकता.</translation>
+<translation id="7464153996453281700">घटक आधीच अप टू डेट आहे</translation>
 <translation id="7464637891177137294">तो तुमच्या Google खाते मध्ये सेव्ह करा, <ph name="ACCOUNT" /></translation>
 <translation id="7465522323587461835">{NUM_OPEN_TABS,plural, =1{# टॅब उघडा, टॅब स्ट्रिप टॉगल करण्यासाठी दाबा}other{# टॅब उघडा, टॅब स्ट्रिप टॉगल करण्यासाठी दाबा}}</translation>
 <translation id="7465635034594602553">काहीतरी चूक झाली. कृपया काही मिनिटे थांबा आणि <ph name="APP_NAME" /> पुन्हा रन करा.</translation>
@@ -7158,6 +7160,7 @@
 <translation id="793531125873261495">व्हर्च्युअल मशीन डाउनलोड करताना एरर आली. कृपया पुन्हा प्रयत्न करा.</translation>
 <translation id="7935451262452051102"><ph name="PERCENT" />% पूर्ण झाले आहे</translation>
 <translation id="7939062555109487992">प्रगत पर्याय</translation>
+<translation id="7939328347457537652">डिव्हाइस सर्टिफिकेट व्यवस्थापित करा</translation>
 <translation id="7939412583708276221">तरीही राहू द्या</translation>
 <translation id="7942349550061667556">लाल</translation>
 <translation id="7943368935008348579">PDF डाउनलोड करा</translation>
@@ -7684,6 +7687,7 @@
 <translation id="8438566539970814960">शोध आणि ब्राउझ करणे चांगले करा</translation>
 <translation id="8439506636278576865">या भाषेमध्ये पेज भाषांतरीत करण्यासाठी ऑफर</translation>
 <translation id="8440630305826533614">Linux ॲप्स</translation>
+<translation id="844063558976952706">नेहमी या साइटवर</translation>
 <translation id="8443795068008423036">कृपया तुमचे डिव्हाइस अप टू डेट असल्याची खात्री करा आणि पुन्हा प्रयत्न करा</translation>
 <translation id="8446884382197647889">अधिक जाणून घ्या</translation>
 <translation id="8447409163267621480">एकतर Ctrl किंवा Alt समाविष्‍ट करा</translation>
diff --git a/chrome/app/resources/generated_resources_ms.xtb b/chrome/app/resources/generated_resources_ms.xtb
index dac1be4..a32994f4 100644
--- a/chrome/app/resources/generated_resources_ms.xtb
+++ b/chrome/app/resources/generated_resources_ms.xtb
@@ -1289,7 +1289,6 @@
 <translation id="2191754378957563929">Hidup</translation>
 <translation id="2192505247865591433">Daripada:</translation>
 <translation id="2193365732679659387">Tetapan percaya</translation>
-<translation id="2194554416429452547">Semasa percubaan, Chrome sedang meneroka cara untuk mengehadkan spam, penipuan dan perkongsian antara laman. Chrome juga <ph name="ESTIMATE_INTERESTS_LINK" /> laman tersebut boleh digunakan untuk memaparkan iklan kepada anda. Anda boleh mengurus minat anda dalam tetapan.</translation>
 <translation id="2194856509914051091">Perkara yang perlu dipertimbangkan</translation>
 <translation id="2195331105963583686">Anda masih boleh menggunakan <ph name="DEVICE_TYPE" /> ini selepas waktu itu tetapi tidak akan mendapat perisian automatik dan kemas kini keselamatan lagi</translation>
 <translation id="2195729137168608510">Perlindungan E-mel</translation>
@@ -1968,7 +1967,6 @@
 <translation id="2806891468525657116">Pintasan sudah wujud</translation>
 <translation id="2807517655263062534">Fail yang anda muat turun dipaparkan di sini</translation>
 <translation id="2809586584051668049">dan <ph name="NUMBER_ADDITIONAL_DISABLED" /> lagi</translation>
-<translation id="2810235462964014915">Diminta untuk membaca dan menukar <ph name="SITE_NAME" /></translation>
 <translation id="2811205483104563968">Akaun</translation>
 <translation id="2811564570599779918">Pengurangan spam dan penipuan</translation>
 <translation id="2812049959647166806">Thunderbolt tidak disokong</translation>
@@ -5284,6 +5282,7 @@
 <translation id="6086846494333236931">Dipasang oleh pentadbir anda</translation>
 <translation id="6087746524533454243">Mencari halaman perihalan penyemak imbas? Lawati</translation>
 <translation id="6087960857463881712">Wajah hebat</translation>
+<translation id="6088535503330933227">Chrome sedang meneroka cara untuk mengehadkan spam iklan, penipuan dan perkongsian antara laman. Chrome juga <ph name="ESTIMATE_INTERESTS_LINK" /> laman tersebut boleh digunakan untuk memaparkan iklan kepada anda. Anda boleh mengurus minat anda dalam tetapan.</translation>
 <translation id="608912389580139775">Untuk menambahkan halaman ini pada senarai bacaan anda, klik ikon Penanda Halaman</translation>
 <translation id="6091761513005122595">Perkongsian berjaya dilekapkan.</translation>
 <translation id="6093888419484831006">Membatalkan kemas kini...</translation>
diff --git a/chrome/app/resources/generated_resources_my.xtb b/chrome/app/resources/generated_resources_my.xtb
index e545921..62373a16 100644
--- a/chrome/app/resources/generated_resources_my.xtb
+++ b/chrome/app/resources/generated_resources_my.xtb
@@ -1288,7 +1288,6 @@
 <translation id="2191754378957563929">ဖွင့်ထားသည်</translation>
 <translation id="2192505247865591433">မှ:</translation>
 <translation id="2193365732679659387">ယုံကြည်မှု ဆက်တင်များ</translation>
-<translation id="2194554416429452547">အစမ်းသုံးနေစဉ် Chrome သည် စပမ်း၊ လိမ်လည်မှုနှင့် ဝဘ်ဆိုက်များအကြား မျှဝေခြင်းတို့ကို ကန့်သတ်ရန်နည်းလမ်းများ ရှာဖွေနေသည်။ Chrome ကလည်း <ph name="ESTIMATE_INTERESTS_LINK" />၊ သင့်အားကြော်ငြာပြရန် ဝဘ်ဆိုက်များက ၎င်းတို့ကို အသုံးပြုနိုင်သည်။ သင့်စိတ်ဝင်စားမှုများကို ဆက်တင်များတွင် စီမံနိုင်သည်။</translation>
 <translation id="2194856509914051091">စဉ်းစားရန် အချက်များ</translation>
 <translation id="2195331105963583686">ထိုအချိန်ပြီးနောက် ဤ <ph name="DEVICE_TYPE" /> ကို ဆက်လက်၍ အသုံးပြုနိုင်ဦးမည် ဖြစ်သော်လည်း ဆော့ဖ်ဝဲနှင့် လုံခြုံရေးအပ်ဒိတ်များကို အလိုအလျောက် ရရှိတော့မည်မဟုတ်ပါ</translation>
 <translation id="2195729137168608510">အီးမေးလ် ကာကွယ်မှု</translation>
@@ -1967,7 +1966,6 @@
 <translation id="2806891468525657116">ဖြတ်လမ်းလင့်ခ် ရှိပြီးသားဖြစ်သည်</translation>
 <translation id="2807517655263062534">သင်ဒေါင်းလုဒ်လုပ်သော ဖိုင်များသည် ဤနေရာတွင် ပေါ်ပါသည်</translation>
 <translation id="2809586584051668049">နှင့် <ph name="NUMBER_ADDITIONAL_DISABLED" /> များစွာ</translation>
-<translation id="2810235462964014915"><ph name="SITE_NAME" /> ကိုဖတ်ပြီးပြောင်းရန် တောင်းဆိုထားသည်</translation>
 <translation id="2811205483104563968">အကောင့်များ</translation>
 <translation id="2811564570599779918">စပမ်းနှင့် လိမ်လည်မှုလျှော့ချခြင်း</translation>
 <translation id="2812049959647166806">Thunderbolt ကို ပံ့ပိုးမထားပါ</translation>
@@ -3895,6 +3893,7 @@
 <translation id="4689421377817139245">ဤဝဘ်လိပ်စာကို သင်၏ iPhone သို့ စင့်ခ်လုပ်ပါ</translation>
 <translation id="4690091457710545971">&lt;Intel Wi-Fi ဖာမ်းဝဲက ထုတ်လိုက်သည့် ဖိုင်လေးဖိုင်− csr.lst၊ fh_regs.lst၊ radio_reg.lst၊ monitor.lst.sysmon။ ပထမ ဖိုင်သုံးဖိုင်သည် မှတ်ပုံတင်ခြင်းဆိုင်ရာများ ထည့်ထားသည့် binary ဖိုင်များဖြစ်ပြီး ကိုယ်ရေးကိုယ်တာ သို့မဟုတ် စက်ပစ္စည်းကို ခွဲခြားသိရှိနိုင်သည့် အချက်အလက်များ မပါဝင်စေရန် Intel က အတည်ပြုထားပါသည်။ နောက်ဆုံးဖိုင်သည် Intel ဖာမ်းဝဲမှ လုပ်ဆောင်ချက် မှတ်တမ်းဖြစ်သည်။ ၎င်းအတွင်းရှိ ကိုယ်ရေးကိုယ်တာ သို့မဟုတ် စက်ပစ္စည်းကို ခွဲခြားသိရှိနိုင်သည့် အချက်အလက်များကို ဖယ်ရှားထားပြီး ဖြစ်သော်လည်း ဤနေရာတွင် ပြသရန် အရွယ်အစား အလွန်ကြီးပါသည်။ မကြာသေးခင်က သင့်စက်ပစ္စည်း၏ WiFi ပြဿနာများကို တုံ့ပြန်သည့်အနေနှင့် ဤဖိုင်များကို ထုတ်ပေးခြင်းဖြစ်ပြီး ၎င်းပြဿနာများအတွက် အဖြေရှာရာတွင် အထောက်အကူ ဖြစ်စေရန် Intel နှင့် မျှဝေသွားပါမည်။</translation>
 <translation id="4691791363716065510">ဤဝဘ်ဆိုက်အတွက် တဘ်များအားလုံးကို မပိတ်မချင်း <ph name="ORIGIN" /> သည် <ph name="FILENAME" /> ကို ကြည့်နိုင်ပါမည်</translation>
+<translation id="4692342362587775867">ဤဝဘ်ဆိုက်မှ အကြောင်းကြားချက်များသည် အနှောင့်အယှက် ဖြစ်နိုင်သည်</translation>
 <translation id="4692623383562244444">ရှာဖွေမှု အင်ဂျင်</translation>
 <translation id="4692736633446859167"><ph name="SITE" /> တွင် နောက်ဆက်တွဲအားလုံးကို ခွင့်မပြုရန် သင်ယခင်က ရွေးချယ်ထားသည်။ သင်ဤဝဘ်ဆိုက်ကို ဤနေရာတွင် ထည့်လျှင် အခြားနောက်ဆက်တွဲများကလည်း <ph name="SITE" /> ပေါ်ရှိ သင့်ဝဘ်ဆိုက် ဒေတာကို ဖတ်ပြီး ပြင်ဆင်ရန် တောင်းဆိုနိုင်သည်။</translation>
 <translation id="4693155481716051732">ဆူရှီ</translation>
@@ -5282,6 +5281,7 @@
 <translation id="6086846494333236931">သင့်ကြီးကြပ်သူမှ ထည့်သွင်းခဲ့သည်</translation>
 <translation id="6087746524533454243">စာမျက်နှာအကြောင်း ဘရောင်ဇာကို ရှာနေပါသလား။ ဝင်ကြည့်ရန်</translation>
 <translation id="6087960857463881712">ပြုံးရွှင်သည့် မျက်နှာ</translation>
+<translation id="6088535503330933227">Chrome သည် စပမ်း၊ လိမ်လည်မှုနှင့် ဝဘ်ဆိုက်များအကြား မျှဝေခြင်းတို့ကို ကန့်သတ်ရန်နည်းလမ်းများ ရှာဖွေနေသည်။ Chrome ကလည်း <ph name="ESTIMATE_INTERESTS_LINK" />၊ သင့်အားကြော်ငြာပြရန် ဝဘ်ဆိုက်များက ၎င်းတို့ကို အသုံးပြုနိုင်သည်။ သင့်စိတ်ဝင်စားမှုများကို ဆက်တင်များတွင် စီမံနိုင်သည်။</translation>
 <translation id="608912389580139775">သင်၏ဖတ်ရန် စာရင်းတွင် ဤစာမျက်နှာကို ထည့်ရန် ‘လိပ်စာ’ သင်္ကေတကို နှိပ်ပါ</translation>
 <translation id="6091761513005122595">မျှဝေပြီးပါပြီ။</translation>
 <translation id="6093888419484831006">မွှမ်းမံခြင်းကို ပယ်ဖျက်နေပါသည်၊</translation>
diff --git a/chrome/app/resources/generated_resources_ne.xtb b/chrome/app/resources/generated_resources_ne.xtb
index b5a4102..183ad59 100644
--- a/chrome/app/resources/generated_resources_ne.xtb
+++ b/chrome/app/resources/generated_resources_ne.xtb
@@ -1274,7 +1274,6 @@
 <translation id="2191754378957563929">सक्रिय छ</translation>
 <translation id="2192505247865591433">बाट:</translation>
 <translation id="2193365732679659387">विश्वास सम्बन्धी सेटिङहरू</translation>
-<translation id="2194554416429452547">Chrome ले परीक्षण अवधिमा स्प्याम तथा ठगी रोकथाम गर्ने र साइटहरूका बिचमा सेयर गर्ने सुविधा सीमित पार्ने विभिन्न उपायहरूको परीक्षण गरिरहेको छ। साथै, Chrome ले साइटहरूले तपाईंलाई विज्ञापनहरू देखाउनका निम्ति प्रयोग गर्न सक्ने <ph name="ESTIMATE_INTERESTS_LINK" />। तपाईं सेटिङमा गई आफ्ना रुचिहरू व्यवस्थापन गर्न सक्नुहुन्छ।</translation>
 <translation id="2194856509914051091">विचार गर्नु पर्ने कुराहरू</translation>
 <translation id="2195331105963583686">तपाईं उक्त समयपछि पनि यो <ph name="DEVICE_TYPE" /> प्रयोग गरिरहन सक्नु हुने छ तर यसले सफ्टवेयर तथा सुरक्षासम्बन्धी स्वचालित अद्यावधिकहरू भने प्राप्त गर्ने छैन</translation>
 <translation id="2195729137168608510">इमेल संरक्षण</translation>
@@ -1950,7 +1949,6 @@
 <translation id="2806891468525657116">सर्टकट पहिलेदेखि नै विद्यमान छ</translation>
 <translation id="2807517655263062534">तपाईंले डाउनलोड गरेका फाइलहरू यहाँ देखिन्छन्</translation>
 <translation id="2809586584051668049">र <ph name="NUMBER_ADDITIONAL_DISABLED" /> थप</translation>
-<translation id="2810235462964014915"><ph name="SITE_NAME" /> मा भएको जानकारी पढ्ने तथा परिवर्तन गर्ने अनुमति माग्ने एक्स्टेन्सनहरू</translation>
 <translation id="2811205483104563968">खाताहरू</translation>
 <translation id="2811564570599779918">स्प्याम तथा ठगी न्यूनीकरण गर्ने सुविधा</translation>
 <translation id="2812049959647166806">थन्डरबोल्ट प्रयोग गर्न मिल्दैन</translation>
@@ -5263,6 +5261,7 @@
 <translation id="6086846494333236931">तपाईँको प्रशासकद्वारा स्थापना गरियो</translation>
 <translation id="6087746524533454243">ब्राउजरसम्बन्धी जानकारी भएको पेज खोज्दै हुनुहुन्छ? यहाँ जानुहोस्</translation>
 <translation id="6087960857463881712">उत्कृष्ट अनुहार</translation>
+<translation id="6088535503330933227">Chrome ले स्प्याम तथा ठगी रोकथाम गर्ने र साइटहरूका बिचमा सेयर गर्ने सुविधा सीमित पार्ने विभिन्न उपायहरूको परीक्षण गरिरहेको छ। साथै, Chrome ले साइटहरूले तपाईंलाई विज्ञापनहरू देखाउनका निम्ति प्रयोग गर्न सक्ने <ph name="ESTIMATE_INTERESTS_LINK" />। तपाईं सेटिङमा गई आफ्ना रुचिहरू व्यवस्थापन गर्न सक्नुहुन्छ।</translation>
 <translation id="608912389580139775">यो पेज आफ्नो पछि पढ्न सेभ गरिएका वेबपेजको सूचीमा हाल्न बुकमार्क आइकनमा क्लिक गर्नुहोस्</translation>
 <translation id="6091761513005122595">आदान प्रदान माउन्ट गर्ने कार्य सफलतापूर्वक सम्पन्न भयो।</translation>
 <translation id="6093888419484831006">अद्यावधिक रद्द गर्दै...</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb
index a57d2db89..6fd20f7 100644
--- a/chrome/app/resources/generated_resources_nl.xtb
+++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -1278,7 +1278,6 @@
 <translation id="2191754378957563929">Aan</translation>
 <translation id="2192505247865591433">Van:</translation>
 <translation id="2193365732679659387">Vertrouwensinstellingen</translation>
-<translation id="2194554416429452547">Tijdens proefperioden verkent Chrome manieren om spam, fraude en het delen tussen sites te beperken. Chrome <ph name="ESTIMATE_INTERESTS_LINK" /> die sites kunnen gebruiken om advertenties te laten zien. Je kunt je interesses beheren in de instellingen.</translation>
 <translation id="2194856509914051091">Overwegingen</translation>
 <translation id="2195331105963583686">Je kunt deze <ph name="DEVICE_TYPE" /> daarna nog steeds gebruiken, maar je apparaat ontvangt geen automatische software- en beveiligingsupdates meer.</translation>
 <translation id="2195729137168608510">E-mail beveiligen</translation>
@@ -1954,7 +1953,6 @@
 <translation id="2806891468525657116">Snelkoppeling bestaat al</translation>
 <translation id="2807517655263062534">Gedownloade bestanden zie je hier</translation>
 <translation id="2809586584051668049">en <ph name="NUMBER_ADDITIONAL_DISABLED" /> meer</translation>
-<translation id="2810235462964014915">Lezen en wijzigen van <ph name="SITE_NAME" /> aangevraagd</translation>
 <translation id="2811205483104563968">Accounts</translation>
 <translation id="2811564570599779918">Spam- en fraudebeperking</translation>
 <translation id="2812049959647166806">Thunderbolt wordt niet ondersteund</translation>
@@ -5265,6 +5263,7 @@
 <translation id="6086846494333236931">Geïnstalleerd door je beheerder</translation>
 <translation id="6087746524533454243">Zoek je de informatiepagina van de browser? Ga naar</translation>
 <translation id="6087960857463881712">Geweldig gezicht</translation>
+<translation id="6088535503330933227">Chrome verkent manieren om advertentiespam, fraude en het delen tussen sites te beperken. Chrome <ph name="ESTIMATE_INTERESTS_LINK" /> die sites kunnen gebruiken om advertenties te laten zien. Je kunt je interesses beheren in de instellingen.</translation>
 <translation id="608912389580139775">Klik op het icoon Bookmark om deze pagina aan je leeslijst toe te voegen</translation>
 <translation id="6091761513005122595">Fileshare geactiveerd.</translation>
 <translation id="6093888419484831006">Update annuleren...</translation>
@@ -7673,6 +7672,7 @@
 <translation id="8438566539970814960">Zoekopdrachten en browsefunctionaliteit verbeteren</translation>
 <translation id="8439506636278576865">Aanbieden pagina's te vertalen in deze taal</translation>
 <translation id="8440630305826533614">Linux-apps</translation>
+<translation id="844063558976952706">Altijd op deze site</translation>
 <translation id="8443795068008423036">Zorg dat je apparaat up-to-date is en probeer het opnieuw</translation>
 <translation id="8446884382197647889">Meer informatie</translation>
 <translation id="8447409163267621480">Neem Ctrl of Alt op</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb
index c870bfe..14a7d2de 100644
--- a/chrome/app/resources/generated_resources_no.xtb
+++ b/chrome/app/resources/generated_resources_no.xtb
@@ -986,6 +986,7 @@
 <translation id="1916502483199172559">Rødt standardbrukerbilde</translation>
 <translation id="1918141783557917887">&amp;Mindre</translation>
 <translation id="1920390473494685033">Kontakter</translation>
+<translation id="1921544956190977703">Du har den sterkeste beskyttelsen i Chrome mot farlige nettsteder, nedlastinger og utvidelser</translation>
 <translation id="1921584744613111023"><ph name="DPI" /> ppt</translation>
 <translation id="1923468477587371721">Google-nettsteder som Gmail, Disk og YouTube bruker Google-kontospråket ditt, med mindre du har endret det språket for det individuelle produktet</translation>
 <translation id="1923539912171292317">Automatiske klikk</translation>
@@ -1283,7 +1284,6 @@
 <translation id="2191754378957563929">På</translation>
 <translation id="2192505247865591433">Fra:</translation>
 <translation id="2193365732679659387">Klareringsinnstillinger</translation>
-<translation id="2194554416429452547">Mens prøveprosjekter pågår, utforsker Chrome måter å begrense nettsøppel, svindel og deling mellom nettsteder på. Chrome <ph name="ESTIMATE_INTERESTS_LINK" />, som nettsteder kan bruke til å vise deg annonser. Du kan administrere interessene dine i innstillingene.</translation>
 <translation id="2194856509914051091">Ting å tenke på</translation>
 <translation id="2195331105963583686">Du kan fortsette å bruke <ph name="DEVICE_TYPE" />-enheten etter dette tidspunktet, men den kommer ikke til å få automatiske programvare- og sikkerhetsoppdateringer lenger</translation>
 <translation id="2195729137168608510">Beskyttelse av e-post </translation>
@@ -1962,7 +1962,6 @@
 <translation id="2806891468525657116">Snarveien finnes allerede</translation>
 <translation id="2807517655263062534">Filer du laster ned, vises her</translation>
 <translation id="2809586584051668049">og <ph name="NUMBER_ADDITIONAL_DISABLED" /> til</translation>
-<translation id="2810235462964014915">Forespørsel for å lese og endre <ph name="SITE_NAME" /></translation>
 <translation id="2811205483104563968">Kontoer</translation>
 <translation id="2811564570599779918">Reduksjon av nettsøppel og svindel</translation>
 <translation id="2812049959647166806">Thunderbolt støttes ikke</translation>
@@ -2087,6 +2086,7 @@
 <ph name="DOMAIN" /> krever at smartkortet blir stående i.</translation>
 <translation id="2923234477033317484">Fjern denne kontoen</translation>
 <translation id="2923644930701689793">Få tilgang til kamerarullen på telefonen din</translation>
+<translation id="292371311537977079">Chrome-innstillinger</translation>
 <translation id="2925658782192398150">Ferdig – fant ingen problemer</translation>
 <translation id="2926085873880284723">Gjenopprett standardsnarveier</translation>
 <translation id="2926620265753325858"><ph name="DEVICE_NAME" /> støttes ikke.</translation>
@@ -2670,6 +2670,7 @@
 <translation id="3511528412952710609">Kort</translation>
 <translation id="3514335087372914653">Spillkontroll</translation>
 <translation id="3514373592552233661">Foretrukne nettverk prioriteres fremfor andre kjente nettverk hvis mer enn ett nettverk er tilgjengelig</translation>
+<translation id="3514647716686280777">Du får standard sikkerhetsbeskyttelse. For å få mer beskyttelse mot farlige nettsteder, nedlastinger og utvidelser, slå på Safe Browsing med økt beskyttelse i Chrome-innstillingene.</translation>
 <translation id="3515983984924808886">Berør sikkerhetsnøkkelen en gang til for å bekrefte tilbakestillingen. All informasjon som er lagret på sikkerhetsnøkkelen, inkludert PIN-koden, blir slettet.</translation>
 <translation id="3518985090088779359">Godta og fortsett</translation>
 <translation id="3519564332031442870">Tjenerdeltjeneste for utskrift</translation>
@@ -5274,6 +5275,7 @@
 <translation id="6086846494333236931">Installert av administratoren din</translation>
 <translation id="6087746524533454243">Ser du etter nettleserens Om-side? Gå til</translation>
 <translation id="6087960857463881712">Fantastisk-fjes</translation>
+<translation id="6088535503330933227">Chrome utforsker måter å begrense søppelannonser, svindel og deling mellom nettsteder på. Chrome <ph name="ESTIMATE_INTERESTS_LINK" />, som nettsteder kan bruke til å vise deg annonser. Du kan administrere interessene dine i innstillingene.</translation>
 <translation id="608912389580139775">For å legge til denne siden på leselisten din, klikk på Bokmerke-ikonet</translation>
 <translation id="6091761513005122595">Delingen er aktivert.</translation>
 <translation id="6093888419484831006">Avbryter oppdatering …</translation>
@@ -5462,6 +5464,7 @@
 <translation id="6278428485366576908">Tema</translation>
 <translation id="6278776436938569440">Endre plassering</translation>
 <translation id="6279183038361895380">Trykk på |<ph name="ACCELERATOR" />| for å se markøren</translation>
+<translation id="6279595948631688299">E&amp;ksporter det valgte sertifikatet…</translation>
 <translation id="6280215091796946657">Logg på med en annen konto</translation>
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6282180787514676874">{COUNT,plural, =1{Overskrider grensen på 1 ark}other{Overskrider grensen på {COUNT} ark}}</translation>
@@ -5576,6 +5579,7 @@
 <translation id="6398715114293939307">Fjern Google Play-butikken</translation>
 <translation id="6398765197997659313">Avslutt fullskjerm</translation>
 <translation id="6399774419735315745">Spion</translation>
+<translation id="6401458660421980302">For å sende denne fanen til en annen enhet, logg på Chrome der</translation>
 <translation id="6401597285454423070">Datamaskinen din inneholder en TPM-sikkerhetsenhet (Trusted Platform Module), som brukes til å implementere mange viktige sikkerhetsfunksjoner i ChromeOS. Gå til Chromebook-brukerstøtten for å finne ut mer: https://support.google.com/chromebook/?p=tpm</translation>
 <translation id="6404187344102273690">Chromebook Gaming</translation>
 <translation id="6404511346730675251">Rediger bokmerket</translation>
@@ -5812,6 +5816,7 @@
 <translation id="6619801788773578757">Legg til kioskapp</translation>
 <translation id="6619990499523117484">Bekreft PIN-koden din</translation>
 <translation id="6620254580880484313">Navnet på beholderen</translation>
+<translation id="6621391692573306628">For å sende denne fanen til en annen enhet, logg på Chrome på begge enhetene</translation>
 <translation id="6622980291894852883">Fortsett blokkering av bilder</translation>
 <translation id="6624036901798307345">I nettbrettmodus kan du trykke på fanetellerknappen på verktøyraden for å åpne den nye faneraden som viser miniatyrbilder av alle fanene.</translation>
 <translation id="6624535038674360844"><ph name="FILE_NAME" /> har sensitivt eller farlig innhold. Spør eieren om å fikse dette.</translation>
@@ -7682,6 +7687,7 @@
 <translation id="8438566539970814960">Gjør søking og surfing bedre</translation>
 <translation id="8439506636278576865">Tilby å oversette nettsider på dette språket</translation>
 <translation id="8440630305826533614">Linux-apper</translation>
+<translation id="844063558976952706">Alltid på dette nettstedet</translation>
 <translation id="8443795068008423036">Sørg for at enheten er oppdatert, og prøv på nytt</translation>
 <translation id="8446884382197647889">Les mer</translation>
 <translation id="8447409163267621480">Inkluder enten Ctrl eller Alt</translation>
diff --git a/chrome/app/resources/generated_resources_or.xtb b/chrome/app/resources/generated_resources_or.xtb
index 5e64b67..b4131bc 100644
--- a/chrome/app/resources/generated_resources_or.xtb
+++ b/chrome/app/resources/generated_resources_or.xtb
@@ -1274,7 +1274,6 @@
 <translation id="2191754378957563929">ଚାଲୁ ଅଛି</translation>
 <translation id="2192505247865591433">ଠାରୁ:</translation>
 <translation id="2193365732679659387">ବିଶ୍ୱସ୍ତ ସେଟିଂସ୍</translation>
-<translation id="2194554416429452547">ଟ୍ରାଏଲ ସମୟରେ, Chrome ସ୍ପାମ, ଠକାମୀ ଏବଂ ସାଇଟଗୁଡ଼ିକ ମଧ୍ୟରେ ସେୟାରିଂକୁ ସୀମିତ କରିବାର ଉପାୟଗୁଡ଼ିକୁ ଏକ୍ସପ୍ଲୋର କରୁଛି। Chrome <ph name="ESTIMATE_INTERESTS_LINK" /> ମଧ୍ୟ କରେ ଯାହାକୁ ସାଇଟଗୁଡ଼ିକ ଆପଣଙ୍କୁ ବିଜ୍ଞାପନ ଦେଖାଇବା ପାଇଁ ବ୍ୟବହାର କରିପାରିବ। ଆପଣ ସେଟିଂସରେ ଆପଣଙ୍କ ରୁଚିଗୁଡ଼ିକୁ ପରିଚାଳନା କରିପାରିବେ।</translation>
 <translation id="2194856509914051091">ବିଚାରଯୋଗ୍ୟ ବିଷୟଗୁଡ଼ିକ</translation>
 <translation id="2195331105963583686">ଆପଣ ସେହି ସମୟ ପରେ ମଧ୍ୟ <ph name="DEVICE_TYPE" /> ବ୍ୟବହାର କରିପାରିବେ, କିନ୍ତୁ ଏହା ଆଉ ସ୍ୱଚାଳିତ ସଫ୍ଟୱେୟାର ଏବଂ ସୁରକ୍ଷା ଅପ୍‌ଡେଟ୍‍ଗୁଡ଼ିକ ପାଇବ ନାହିଁ।</translation>
 <translation id="2195729137168608510">ଇମେଲ୍ ସୁରକ୍ଷା</translation>
@@ -1951,7 +1950,6 @@
 <translation id="2806891468525657116">ସର୍ଟକଟ୍ ପୂର୍ବରୁ ବିଦ୍ୟମାନ ଅଛି</translation>
 <translation id="2807517655263062534">ଆପଣ ଡାଉନ୍‌ଲୋଡ୍ କରିଥିବା ଫାଇଲ୍‌ଗୁଡ଼ିକ ଏଠାରେ ଦେଖାଯିବ</translation>
 <translation id="2809586584051668049">ଏବଂ ଆହୁରି <ph name="NUMBER_ADDITIONAL_DISABLED" /> ଜଣ</translation>
-<translation id="2810235462964014915"><ph name="SITE_NAME" /> ପଢ଼ିବା ଏବଂ ସେଥିରେ ପରିବର୍ତ୍ତନ କରିବାକୁ ଅନୁରୋଧ କରାଯାଇଛି</translation>
 <translation id="2811205483104563968">ଆକାଉଣ୍ଟଗୁଡ଼ିକ</translation>
 <translation id="2811564570599779918">ସ୍ପାମ ଏବଂ ଠକାମୀ ହ୍ରାସ</translation>
 <translation id="2812049959647166806">ଥଣ୍ଡର୍‌ବୋଲ୍ଟ ସମର୍ଥିତ ନୁହେଁ</translation>
@@ -5262,6 +5260,7 @@
 <translation id="6086846494333236931">ଆପଣଙ୍କ ବ୍ୟବସ୍ଥାପକଙ୍କ ଦ୍ୱାରା ଇନ୍‍ଷ୍ଟଲ୍ କରାଯାଇଛି</translation>
 <translation id="6087746524533454243">ବ୍ରାଉଜର ବିଷୟରେ ପୃଷ୍ଠାକୁ ଖୋଜୁଛନ୍ତି କି? ଭିଜିଟ କରନ୍ତୁ</translation>
 <translation id="6087960857463881712">ବଢ଼ିଆ ମୁହଁ</translation>
+<translation id="6088535503330933227">ବିଜ୍ଞାପନ ସ୍ପାମ, ଠକାମୀ ଏବଂ ସାଇଟଗୁଡ଼ିକ ମଧ୍ୟରେ ସେୟାରିଂକୁ ସୀମିତ କରିବାର ଉପାୟଗୁଡ଼ିକୁ Chrome ଏକ୍ସପ୍ଲୋର କରୁଛି। Chrome ମଧ୍ୟ <ph name="ESTIMATE_INTERESTS_LINK" /> କରେ ଯାହାକୁ ସାଇଟଗୁଡ଼ିକ ଆପଣଙ୍କୁ ବିଜ୍ଞାପନ ଦେଖାଇବା ପାଇଁ ବ୍ୟବହାର କରିପାରିବ। ଆପଣ ସେଟିଂସରେ ଆପଣଙ୍କ ରୁଚିଗୁଡ଼ିକୁ ପରିଚାଳନା କରିପାରିବେ।</translation>
 <translation id="608912389580139775">ଆପଣଙ୍କ ପଢ଼ିବା ତାଲିକାରେ ଏହି ପୃଷ୍ଠାକୁ ଯୋଗ କରିବା ପାଇଁ, ବୁକମାର୍କ ଆଇକନରେ କ୍ଲିକ୍ କରନ୍ତୁ</translation>
 <translation id="6091761513005122595">ସଫଳତାର ସହ ସେୟାର୍‌ ଖଞ୍ଜାଯାଇଛି।</translation>
 <translation id="6093888419484831006">ଅପ୍‌ଡେଟ୍‌ ବାତିଲ ହେଉଛି...</translation>
diff --git a/chrome/app/resources/generated_resources_pa.xtb b/chrome/app/resources/generated_resources_pa.xtb
index ad8fa87..74b4bf7 100644
--- a/chrome/app/resources/generated_resources_pa.xtb
+++ b/chrome/app/resources/generated_resources_pa.xtb
@@ -1291,7 +1291,6 @@
 <translation id="2191754378957563929">ਚਾਲੂ</translation>
 <translation id="2192505247865591433">ਤੋਂ:</translation>
 <translation id="2193365732679659387">ਭਰੋਸਾ ਸੈਟਿੰਗਾਂ</translation>
-<translation id="2194554416429452547">ਪਰਖ ਦੌਰਾਨ, Chrome ਸਪੈਮ, ਧੋਖਾਧੜੀ, ਅਤੇ ਸਾਈਟਾਂ ਵਿਚਕਾਰ ਸਾਂਝਾਕਰਨ ਨੂੰ ਸੀਮਤ ਕਰਨ ਦੇ ਤਰੀਕਿਆਂ ਦੀ ਪੜਚੋਲ ਕਰ ਰਿਹਾ ਹੈ। Chrome <ph name="ESTIMATE_INTERESTS_LINK" /> ਵੀ ਦਿਖਾਉਂਦਾ ਹੈ, ਜਿਸ ਨੂੰ ਸਾਈਟਾਂ ਤੁਹਾਨੂੰ ਵਿਗਿਆਪਨ ਦਿਖਾਉਣ ਲਈ ਵਰਤ ਸਕਦੀਆਂ ਹਨ। ਤੁਸੀਂ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਜਾ ਕੇ ਆਪਣੀਆਂ ਦਿਲਚਸਪੀਆਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰ ਸਕਦੇ ਹੋ।</translation>
 <translation id="2194856509914051091">ਵਿਚਾਰੇ ਜਾਣ ਵਾਲੀਆਂ ਚੀਜ਼ਾਂ</translation>
 <translation id="2195331105963583686">ਤੁਸੀਂ ਹਾਲੇ ਵੀ ਉਸ ਸਮੇਂ ਤੋਂ ਬਾਅਦ ਇਸ <ph name="DEVICE_TYPE" /> ਨੂੰ ਵਰਤ ਸਕੋਗੇ, ਪਰ ਇਸਨੂੰ ਸਵੈਚਲਿਤ ਸਾਫ਼ਟਵੇਅਰ ਅਤੇ ਸੁਰੱਖਿਆ ਅੱਪਡੇਟ ਨਹੀਂ ਮਿਲਣਗੇ</translation>
 <translation id="2195729137168608510">ਈਮੇਲ ਸੁਰੱਖਿਆ</translation>
@@ -1970,7 +1969,6 @@
 <translation id="2806891468525657116">ਸ਼ਾਰਟਕੱਟ ਪਹਿਲਾਂ ਹੀ ਮੌਜੂਦ ਹੈ</translation>
 <translation id="2807517655263062534">ਤੁਹਾਡੇ ਵੱਲੋਂ ਡਾਊਨਲੋਡ ਕੀਤੀਆਂ ਫ਼ਾਈਲਾਂ ਇੱਥੇ ਦਿਖਾਈ ਦਿੰਦੀਆਂ ਹਨ</translation>
 <translation id="2809586584051668049">ਅਤੇ <ph name="NUMBER_ADDITIONAL_DISABLED" /> ਹੋਰ</translation>
-<translation id="2810235462964014915"><ph name="SITE_NAME" /> ਨੂੰ ਪੜ੍ਹਨ ਅਤੇ ਬਦਲਣ ਦੀ ਬੇਨਤੀ ਕੀਤੀ ਗਈ</translation>
 <translation id="2811205483104563968">ਖਾਤੇ</translation>
 <translation id="2811564570599779918">ਸਪੈਮ ਅਤੇ ਧੋਖਾਧੜੀ ਨੂੰ ਘਟਾਉਣਾ</translation>
 <translation id="2812049959647166806">ਥੰਡਰਬੋਲਟ ਸਮਰਥਿਤ ਨਹੀਂ ਹੈ</translation>
@@ -5286,6 +5284,7 @@
 <translation id="6086846494333236931">ਤੁਹਾਡੇ ਪ੍ਰਸ਼ਾਸਕ ਵੱਲੋਂ ਸਥਾਪਿਤ ਕੀਤਾ ਗਿਆ</translation>
 <translation id="6087746524533454243">ਕੀ ਪੰਨੇ ਸੰਬੰਧੀ ਬ੍ਰਾਊਜ਼ਰ ਨੂੰ ਲੱਭ ਰਹੇ ਹੋ? ਇੱਥੇ ਜਾਓ</translation>
 <translation id="6087960857463881712">ਸੁੰਦਰ ਚਿਹਰਾ</translation>
+<translation id="6088535503330933227">Chrome ਸਪੈਮ, ਧੋਖਾਧੜੀ ਅਤੇ ਸਾਈਟਾਂ ਵਿਚਕਾਰ ਸਾਂਝਾਕਰਨ ਨੂੰ ਸੀਮਤ ਕਰਨ ਦੇ ਤਰੀਕਿਆਂ ਦੀ ਪੜਚੋਲ ਕਰ ਰਿਹਾ ਹੈ। Chrome <ph name="ESTIMATE_INTERESTS_LINK" /> ਵੀ ਦਿਖਾਉਂਦਾ ਹੈ, ਜਿਸਨੂੰ ਸਾਈਟਾਂ ਤੁਹਾਨੂੰ ਵਿਗਿਆਪਨ ਦਿਖਾਉਣ ਲਈ ਵਰਤ ਸਕਦੀਆਂ ਹਨ। ਤੁਸੀਂ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਜਾ ਕੇ ਆਪਣੀਆਂ ਦਿਲਚਸਪੀਆਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰ ਸਕਦੇ ਹੋ।</translation>
 <translation id="608912389580139775">ਆਪਣੀ ਪੜ੍ਹਨ-ਸੂਚੀ ਵਿੱਚ ਇਹ ਪੰਨਾ ਸ਼ਾਮਲ ਕਰਨ ਲਈ, 'ਬੁੱਕਮਾਰਕ' ਪ੍ਰਤੀਕ 'ਤੇ ਕਲਿੱਕ ਕਰੋ</translation>
 <translation id="6091761513005122595">ਸਾਂਝਾਕਰਨ ਨੂੰ ਮਾਊਂਟ ਕਰਨਾ ਸਫਲ ਰਿਹਾ।</translation>
 <translation id="6093888419484831006">ਅੱਪਡੇਟ ਰੱਦ ਕਰ ਰਿਹਾ ਹੈ...</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb
index 7645513..d8d4757 100644
--- a/chrome/app/resources/generated_resources_pl.xtb
+++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -1276,7 +1276,6 @@
 <translation id="2191754378957563929">Włączono</translation>
 <translation id="2192505247865591433">Z:</translation>
 <translation id="2193365732679659387">Ustawienia zaufania</translation>
-<translation id="2194554416429452547">Podczas testów Chrome sprawdza, w jaki sposób można ograniczyć spam, oszustwa i udostępnianie treści między witrynami. Chrome również <ph name="ESTIMATE_INTERESTS_LINK" />, do których witryny mogą dostosowywać pokazywane Ci reklamy. Swoimi zainteresowaniami możesz zarządzać w ustawieniach.</translation>
 <translation id="2194856509914051091">Istotne kwestie</translation>
 <translation id="2195331105963583686">Po tej dacie nadal będzie można używać urządzenia <ph name="DEVICE_TYPE" />, ale nie będziesz już otrzymywać automatycznych aktualizacji zabezpieczeń i oprogramowania</translation>
 <translation id="2195729137168608510">Ochrona poczty e-mail</translation>
@@ -1941,7 +1940,6 @@
 <translation id="2806891468525657116">Skrót już istnieje</translation>
 <translation id="2807517655263062534">Tutaj wyświetlają się pobrane pliki</translation>
 <translation id="2809586584051668049">i jeszcze <ph name="NUMBER_ADDITIONAL_DISABLED" /></translation>
-<translation id="2810235462964014915">Wysłano prośbę o odczytanie i zmianę strony <ph name="SITE_NAME" /></translation>
 <translation id="2811205483104563968">Konta</translation>
 <translation id="2811564570599779918">Ograniczanie spamu i oszustw</translation>
 <translation id="2812049959647166806">Standard Thunderbolt nie jest obsługiwany</translation>
@@ -3869,6 +3867,7 @@
 <translation id="4689421377817139245">Zsynchronizuj tę zakładkę ze swoim iPhonem</translation>
 <translation id="4690091457710545971">&lt;Cztery pliki wygenerowane przez oprogramowanie układowe Wi-Fi firmy Intel: csr.lst, fh_regs.lst, radio_reg.lst, monitor.lst.sysmon. Pierwsze trzy to pliki binarne zawierające zrzuty rejestru. Intel twierdzi, że nie zawierają żadnych danych umożliwiających identyfikację osoby lub urządzenia. Ostatni plik zawiera ślad wykonywania oprogramowania układowego firmy Intel. Wszelkie dane umożliwiające identyfikację osoby lub urządzenia zostały z niego usunięte, ale jest zbyt duży, by go tu wyświetlić. Te pliki zostały wygenerowane w reakcji na niedawne problemy z Wi-Fi na Twoim urządzeniu i zostaną przekazane firmie Intel, by pomóc w rozwiązaniu tych problemów.&gt;</translation>
 <translation id="4691791363716065510">Strona <ph name="ORIGIN" /> będzie mogła wyświetlać plik <ph name="FILENAME" />, dopóki nie zamkniesz wszystkich jej kart</translation>
+<translation id="4692342362587775867">Powiadomienia z tej strony mogą zakłócać działanie usług</translation>
 <translation id="4692623383562244444">Wyszukiwarki</translation>
 <translation id="4692736633446859167">Poprzednio nie zezwoliłeś(-aś) na żadne rozszerzenia na <ph name="SITE" />. Jeśli dodasz tutaj tę witrynę, inne rozszerzenia również będą mogły prosić o uprawnienia do odczytywania i zmieniania danych Twojej witryny na <ph name="SITE" />.</translation>
 <translation id="4693155481716051732">Sushi</translation>
@@ -5256,6 +5255,7 @@
 <translation id="6086846494333236931">Zainstalowane przez administratora</translation>
 <translation id="6087746524533454243">Szukasz strony z informacjami o przeglądarce? Wejdź na</translation>
 <translation id="6087960857463881712">Niesamowita twarz</translation>
+<translation id="6088535503330933227">Chrome sprawdza, w jaki sposób można ograniczyć spam, oszustwa i udostępnianie treści między witrynami. Chrome również <ph name="ESTIMATE_INTERESTS_LINK" />, do których witryny mogą dostosowywać pokazywane Ci reklamy. Swoimi zainteresowaniami możesz zarządzać w ustawieniach.</translation>
 <translation id="608912389580139775">Aby dodać tę stronę do listy Do przeczytania, kliknij ikonę Zakładka</translation>
 <translation id="6091761513005122595">Udział został podłączony.</translation>
 <translation id="6093888419484831006">Anulowanie aktualizacji...</translation>
@@ -7672,6 +7672,7 @@
 <translation id="8438566539970814960">Ulepsz wyszukiwanie i przeglądanie</translation>
 <translation id="8439506636278576865">Proponuj tłumaczenie stron w tym języku</translation>
 <translation id="8440630305826533614">Aplikacje na Linuksa</translation>
+<translation id="844063558976952706">Zawsze w tej witrynie</translation>
 <translation id="8443795068008423036">Sprawdź, czy urządzenie jest aktualne, i spróbuj ponownie</translation>
 <translation id="8446884382197647889">Więcej informacji</translation>
 <translation id="8447409163267621480">Uwzględnij Ctrl lub Alt</translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb
index 3c9f8289..3dfe218 100644
--- a/chrome/app/resources/generated_resources_pt-BR.xtb
+++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -1291,7 +1291,6 @@
 <translation id="2191754378957563929">Ativado</translation>
 <translation id="2192505247865591433">De:</translation>
 <translation id="2193365732679659387">Configurações de confiança</translation>
-<translation id="2194554416429452547">Durante os testes, o Chrome explora maneiras de limitar spam, fraude e compartilhamento entre sites. O Chrome também <ph name="ESTIMATE_INTERESTS_LINK" /> para que os sites possam os usar para mostrar anúncios. Você pode gerenciar seus interesses nas configurações.</translation>
 <translation id="2194856509914051091">Considerações</translation>
 <translation id="2195331105963583686">Você ainda poderá usar este <ph name="DEVICE_TYPE" /> após esse período, mas ele não receberá mais atualizações automáticas de software e segurança</translation>
 <translation id="2195729137168608510">Proteção de e-mail</translation>
@@ -1970,7 +1969,6 @@
 <translation id="2806891468525657116">O atalho já existe</translation>
 <translation id="2807517655263062534">Os arquivos transferidos por download aparecem aqui</translation>
 <translation id="2809586584051668049">e mais <ph name="NUMBER_ADDITIONAL_DISABLED" /></translation>
-<translation id="2810235462964014915">Solicitaram permissão para ler e modificar <ph name="SITE_NAME" /></translation>
 <translation id="2811205483104563968">Contas</translation>
 <translation id="2811564570599779918">Redução de spam e fraudes</translation>
 <translation id="2812049959647166806">O Thunderbolt não é compatível</translation>
@@ -3900,6 +3898,7 @@
 <translation id="4689421377817139245">Sincronizar esse favorito no seu iPhone</translation>
 <translation id="4690091457710545971">&lt;Quatro arquivos gerados pelo firmware de Wi-Fi da Intel: csr.lst, fh_regs.lst, radio_reg.lst, monitor.lst.sysmon. Os três primeiros são arquivos binários que contêm despejos de registro e, segundo a Intel, não contêm possuem pessoais ou de identificação do dispositivo. O último arquivo é um rastreamento de execução do firmware da Intel. Todas as informações pessoais ou de identificação do dispositivo foram apagadas dele, mas ele é grande demais para ser exibido aqui. Esses arquivos foram gerados em resposta a problemas recentes de Wi-Fi no seu dispositivo e serão compartilhados com a Intel para ajudar a solucionar esses problemas.&gt;</translation>
 <translation id="4691791363716065510"><ph name="ORIGIN" /> poderá ver <ph name="FILENAME" /> até que você feche todas as guias desse site</translation>
+<translation id="4692342362587775867">As notificações deste site podem ser inconvenientes</translation>
 <translation id="4692623383562244444">Mecanismos de pesquisa</translation>
 <translation id="4692736633446859167">Anteriormente, você escolheu não permitir nenhuma extensão em <ph name="SITE" />. Se você adicionar esse site, outras extensões também poderão solicitar permissão para ler e mudar os dados do site em <ph name="SITE" />.</translation>
 <translation id="4693155481716051732">Sushi</translation>
@@ -5289,6 +5288,7 @@
 <translation id="6086846494333236931">Instalada pelo administrador</translation>
 <translation id="6087746524533454243">Procurando a página de detalhes do navegador? Acesse</translation>
 <translation id="6087960857463881712">Rosto maravilhado</translation>
+<translation id="6088535503330933227">O Chrome busca maneiras de limitar ocorrências de anúncios de spam, fraude e compartilhamento entre sites. O Chrome também <ph name="ESTIMATE_INTERESTS_LINK" /> para que os sites possam os usar para mostrar anúncios. Você pode gerenciar seus interesses nas configurações.</translation>
 <translation id="608912389580139775">Para adicionar essa página à sua Lista de leitura, clique no ícone "Adicionar aos favoritos"</translation>
 <translation id="6091761513005122595">Compartilhamento ativado.</translation>
 <translation id="6093888419484831006">Cancelando atualização...</translation>
@@ -5918,6 +5918,7 @@
 <translation id="6709133671862442373">Notícias</translation>
 <translation id="6709357832553498500">Conectar usando <ph name="EXTENSIONNAME" /></translation>
 <translation id="6710213216561001401">Anterior</translation>
+<translation id="6710394144992407503">Verificar se há erros de ortografia ao digitar texto em páginas da Web</translation>
 <translation id="6711146141291425900">Vincular conta do <ph name="WEB_DRIVE" /> para downloads</translation>
 <translation id="6712943853047024245">Você já salvou uma senha relacionada a esse nome de usuário em <ph name="WEBSITE" /></translation>
 <translation id="6713233729292711163">Adicionar perfil de trabalho</translation>
@@ -6536,6 +6537,7 @@
 <translation id="7340757554212515731">Envia automaticamente relatórios de erros, assim como dados de uso e diagnósticos ao Google</translation>
 <translation id="7341834142292923918">Quer ter acesso a este site</translation>
 <translation id="7343372807593926528">Descreva o problema antes de enviar feedback.</translation>
+<translation id="7344585835349671209">Gerenciar certificados HTTPS/SSL no dispositivo</translation>
 <translation id="7345706641791090287">Confirmar sua senha</translation>
 <translation id="7346909386216857016">Ok, entendi.</translation>
 <translation id="7347452120014970266">Essa ação vai apagar todos os dados e cookies armazenados por <ph name="ORIGIN_NAME" />, incluindo os dos apps instalados</translation>
@@ -6665,6 +6667,7 @@
 <translation id="7460045493116006516">Tema instalado atualmente</translation>
 <translation id="7461924472993315131">Fixar</translation>
 <translation id="746216226901520237">Na próxima vez, o smartphone desbloqueará o <ph name="DEVICE_TYPE" />. É possível desativar o Smart Lock nas configurações.</translation>
+<translation id="7464153996453281700">O componente já está atualizado</translation>
 <translation id="7464637891177137294">Salve a senha na sua Conta do Google <ph name="ACCOUNT" /></translation>
 <translation id="7465522323587461835">{NUM_OPEN_TABS,plural, =1{# guia aberta, pressione para alternar a barra de guias}one{# guia aberta, pressione para alternar a barra de guias}other{# guias abertas, pressione para alternar a barra de guias}}</translation>
 <translation id="7465635034594602553">Algo deu errado. Espere alguns minutos e abra o app <ph name="APP_NAME" /> novamente.</translation>
@@ -7173,6 +7176,7 @@
 <translation id="793531125873261495">Erro ao fazer o download da máquina virtual. Tente novamente.</translation>
 <translation id="7935451262452051102"><ph name="PERCENT" />% concluído</translation>
 <translation id="7939062555109487992">Opções avançadas</translation>
+<translation id="7939328347457537652">Gerenciar certificados do dispositivo</translation>
 <translation id="7939412583708276221">Manter assim mesmo</translation>
 <translation id="7942349550061667556">Vermelho</translation>
 <translation id="7943368935008348579">Fazer o download dos PDFs</translation>
@@ -7699,6 +7703,7 @@
 <translation id="8438566539970814960">Melhorar as pesquisas e a navegação</translation>
 <translation id="8439506636278576865">Oferecer a tradução de páginas neste idioma</translation>
 <translation id="8440630305826533614">Aplicativos Linux</translation>
+<translation id="844063558976952706">Sempre neste site</translation>
 <translation id="8443795068008423036">Confira se o dispositivo está atualizado e tente novamente</translation>
 <translation id="8446884382197647889">Saiba mais</translation>
 <translation id="8447409163267621480">Incluir a tecla Ctrl ou Alt</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb
index 0195ddd..4fa3649 100644
--- a/chrome/app/resources/generated_resources_pt-PT.xtb
+++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -1277,7 +1277,6 @@
 <translation id="2191754378957563929">Ativado</translation>
 <translation id="2192505247865591433">De:</translation>
 <translation id="2193365732679659387">Definições fidedignas</translation>
-<translation id="2194554416429452547">Durante as avaliações, o Chrome explora formas de limitar o spam, as fraudes e a partilha entre sites. O Chrome também <ph name="ESTIMATE_INTERESTS_LINK" /> que os sites podem usar para lhe apresentar anúncios. Pode gerir os seus interesses nas definições.</translation>
 <translation id="2194856509914051091">Aspetos a considerar</translation>
 <translation id="2195331105963583686">Vai continuar a poder utilizar este <ph name="DEVICE_TYPE" /> após essa data, mas deixará de receber atualizações de software e de segurança automáticas.</translation>
 <translation id="2195729137168608510">Protecção de email</translation>
@@ -1953,7 +1952,6 @@
 <translation id="2806891468525657116">O atalho já existe.</translation>
 <translation id="2807517655263062534">Os ficheiros que transferir são apresentados aqui</translation>
 <translation id="2809586584051668049">e mais <ph name="NUMBER_ADDITIONAL_DISABLED" /></translation>
-<translation id="2810235462964014915">Pediram para ler e alterar <ph name="SITE_NAME" /></translation>
 <translation id="2811205483104563968">Contas</translation>
 <translation id="2811564570599779918">Redução de spam e fraudes</translation>
 <translation id="2812049959647166806">O Thunderbolt não é suportado</translation>
@@ -5270,6 +5268,7 @@
 <translation id="6086846494333236931">Instalada pelo gestor</translation>
 <translation id="6087746524533454243">Está à procura da página Acerca do navegador? Visite</translation>
 <translation id="6087960857463881712">Cara de fantástico</translation>
+<translation id="6088535503330933227">O Chrome está a explorar formas de limitar o spam, as fraudes e a partilha entre sites. O Chrome também <ph name="ESTIMATE_INTERESTS_LINK" /> que os sites podem usar para lhe apresentar anúncios. Pode gerir os seus interesses nas definições.</translation>
 <translation id="608912389580139775">Para adicionar esta página à sua Lista de leitura, clique no ícone de marcador</translation>
 <translation id="6091761513005122595">A partilha foi montada com êxito.</translation>
 <translation id="6093888419484831006">A cancelar a atualização...</translation>
@@ -7679,6 +7678,7 @@
 <translation id="8438566539970814960">Melhorar as pesquisas e a navegação</translation>
 <translation id="8439506636278576865">Oferecer para traduzir páginas neste idioma</translation>
 <translation id="8440630305826533614">Apps para Linux</translation>
+<translation id="844063558976952706">Sempre neste Website</translation>
 <translation id="8443795068008423036">Certifique-se de que o seu dispositivo está atualizado e tente novamente</translation>
 <translation id="8446884382197647889">Saiba Mais</translation>
 <translation id="8447409163267621480">Inclua Ctrl ou Alt.</translation>
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb
index 8a7c6fa1..2a97f1a 100644
--- a/chrome/app/resources/generated_resources_ro.xtb
+++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -1278,7 +1278,6 @@
 <translation id="2191754378957563929">Activat</translation>
 <translation id="2192505247865591433">De la:</translation>
 <translation id="2193365732679659387">Setări privind încrederea</translation>
-<translation id="2194554416429452547">În perioadele de încercare, Chrome explorează moduri de a limita spamul, frauda și transferul între site-uri. În plus, Chrome <ph name="ESTIMATE_INTERESTS_LINK" />, pe care site-urile le pot folosi pentru a-ți afișa anunțuri. Îți poți gestiona interesele din setări.</translation>
 <translation id="2194856509914051091">De reținut</translation>
 <translation id="2195331105963583686">Vei putea folosi în continuare <ph name="DEVICE_TYPE" />, dar nu vei mai primi actualizări automate de software și de securitate</translation>
 <translation id="2195729137168608510">Protecție e-mail</translation>
@@ -1954,7 +1953,6 @@
 <translation id="2806891468525657116">Comanda rapidă există deja</translation>
 <translation id="2807517655263062534">Fișierele pe care le descarci apar aici</translation>
 <translation id="2809586584051668049">și încă <ph name="NUMBER_ADDITIONAL_DISABLED" /></translation>
-<translation id="2810235462964014915">Au solicitat să citească și să schimbe <ph name="SITE_NAME" /></translation>
 <translation id="2811205483104563968">Conturi</translation>
 <translation id="2811564570599779918">Reducerea spamului și a fraudei</translation>
 <translation id="2812049959647166806">Thunderbolt nu este acceptat</translation>
@@ -5269,6 +5267,7 @@
 <translation id="6086846494333236931">Instalată de administrator</translation>
 <translation id="6087746524533454243">Cauți pagina despre browser? Accesează</translation>
 <translation id="6087960857463881712">Față extraordinară</translation>
+<translation id="6088535503330933227">Chrome explorează modalități de a limita spamul publicitar, fraudele și permiterea accesului între site-uri. În plus, Chrome <ph name="ESTIMATE_INTERESTS_LINK" />, pe care site-urile le pot folosi pentru a-ți afișa anunțuri. Îți poți gestiona interesele din setări.</translation>
 <translation id="608912389580139775">Pentru a adăuga pagina în lista de lecturi, dă clic pe pictograma Marcaj</translation>
 <translation id="6091761513005122595">Dispozitivul de stocare în rețea a fost montat.</translation>
 <translation id="6093888419484831006">Se anulează actualizarea...</translation>
@@ -7679,6 +7678,7 @@
 <translation id="8438566539970814960">Îmbunătățește căutările și navigarea</translation>
 <translation id="8439506636278576865">Oferă-te să traduci paginile în această limbă</translation>
 <translation id="8440630305826533614">Aplicații Linux</translation>
+<translation id="844063558976952706">Întotdeauna pe acest site</translation>
 <translation id="8443795068008423036">Asigură-te că dispozitivul este actualizat și încearcă din nou</translation>
 <translation id="8446884382197647889">Află mai multe</translation>
 <translation id="8447409163267621480">Include Ctrl sau Alt</translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb
index e0d6225..5af3952 100644
--- a/chrome/app/resources/generated_resources_ru.xtb
+++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -1279,7 +1279,6 @@
 <translation id="2191754378957563929">ВКЛ</translation>
 <translation id="2192505247865591433">Из:</translation>
 <translation id="2193365732679659387">Настройки доверия</translation>
-<translation id="2194554416429452547">Во время эксперимента Chrome изучает способы ограничения спама, мошенничества и обмена информацией между сайтами. Браузер также <ph name="ESTIMATE_INTERESTS_LINK" />, чтобы на их основе сайты показывали вам рекламу. Параметры этой функции можно задать в настройках.</translation>
 <translation id="2194856509914051091">Важная информация</translation>
 <translation id="2195331105963583686">После этого срока вы по-прежнему сможете пользоваться устройством <ph name="DEVICE_TYPE" />, но оно больше не будет получать обновления ПО и безопасности.</translation>
 <translation id="2195729137168608510">Защита электронной почты</translation>
@@ -1955,7 +1954,6 @@
 <translation id="2806891468525657116">Ярлык уже добавлен</translation>
 <translation id="2807517655263062534">Скачанные файлы появятся здесь</translation>
 <translation id="2809586584051668049">и ещё <ph name="NUMBER_ADDITIONAL_DISABLED" /></translation>
-<translation id="2810235462964014915">Запрошен доступ на чтение и изменение данных сайта "<ph name="SITE_NAME" />"</translation>
 <translation id="2811205483104563968">Аккаунты</translation>
 <translation id="2811564570599779918">Противодействие спаму и мошенничеству</translation>
 <translation id="2812049959647166806">Thunderbolt не поддерживается</translation>
@@ -5269,6 +5267,7 @@
 <translation id="6086846494333236931">Установлено администратором</translation>
 <translation id="6087746524533454243">Ищете информацию о браузере? Перейдите на страницу</translation>
 <translation id="6087960857463881712">Модник</translation>
+<translation id="6088535503330933227">Chrome изучает способы ограничения спама, мошенничества и обмена информацией между сайтами. Браузер также <ph name="ESTIMATE_INTERESTS_LINK" />, чтобы на их основе сайты показывали вам рекламу. Параметры этой функции можно задать в настройках.</translation>
 <translation id="608912389580139775">Чтобы добавить эту страницу в свой список для чтения, нажмите на значок закладки.</translation>
 <translation id="6091761513005122595">Ресурс подключен.</translation>
 <translation id="6093888419484831006">Отмена обновления...</translation>
@@ -7683,6 +7682,7 @@
 <translation id="8438566539970814960">Помогать улучшить просмотр страниц и поиск</translation>
 <translation id="8439506636278576865">Предлагать перевести страницы на этом языке</translation>
 <translation id="8440630305826533614">Приложения для Linux</translation>
+<translation id="844063558976952706">Всегда на этом сайте</translation>
 <translation id="8443795068008423036">Обновите операционную систему устройства и повторите попытку.</translation>
 <translation id="8446884382197647889">Подробнее...</translation>
 <translation id="8447409163267621480">Сочетание должно начинаться с клавиши Ctrl или Alt</translation>
diff --git a/chrome/app/resources/generated_resources_si.xtb b/chrome/app/resources/generated_resources_si.xtb
index 670bb015..a5e5a65 100644
--- a/chrome/app/resources/generated_resources_si.xtb
+++ b/chrome/app/resources/generated_resources_si.xtb
@@ -1278,7 +1278,6 @@
 <translation id="2191754378957563929">ක්‍රියාත්මකයි</translation>
 <translation id="2192505247865591433">වෙතින්:</translation>
 <translation id="2193365732679659387">විශ්වාස සැකසීම්</translation>
-<translation id="2194554416429452547">අත්හදා බැලීම් අතරතුර, Chrome අයාචිත තැපැල්, වංචා සහ අඩවි අතර බෙදා ගැනීම සීමා කිරීමට ක්‍රම ගවේෂණය කරයි. Chrome ඔබට වෙළඳ දැන්වීම් පෙන්වීමට අඩවි භාවිත කළ හැකි <ph name="ESTIMATE_INTERESTS_LINK" />. ඔබට සැකසීම් තුළ ඔබේ ලැදිකම් කළමනාකරණය කළ හැකිය.</translation>
 <translation id="2194856509914051091">සලකා බැලිය යුතු කරුණු</translation>
 <translation id="2195331105963583686">ඔබට ඒ කාලයට පසුව තවමත් මෙම <ph name="DEVICE_TYPE" /> භාවිත කිරීමට හැකි වෙයි, නමුත් එය තවදුරටත් ස්වයංක්‍රීය මෘදුකාංග සහ ආරක්‍ෂක යාවත්කාලීන නොලබයි</translation>
 <translation id="2195729137168608510">ඊමේල් ආරක්ෂාව</translation>
@@ -1957,7 +1956,6 @@
 <translation id="2806891468525657116">කෙටිමඟ දැනටමත් තිබේ</translation>
 <translation id="2807517655263062534">ඔබ බාගන්නා ගොනු මෙහි දිස් වනු ඇත</translation>
 <translation id="2809586584051668049">සහ <ph name="NUMBER_ADDITIONAL_DISABLED" /> තවත්</translation>
-<translation id="2810235462964014915"><ph name="SITE_NAME" /> කියවීමට සහ වෙනස් කිරීමට ඉල්ලුවේය</translation>
 <translation id="2811205483104563968">ගිණුම්</translation>
 <translation id="2811564570599779918">අයාචිත සහ වංචා අඩු කිරීම</translation>
 <translation id="2812049959647166806">තණ්ඩර්බෝල්ට් හට සහය නොදැක්වේ</translation>
@@ -5273,6 +5271,7 @@
 <translation id="6086846494333236931">ඔබේ පරිපාලක විසින් ස්ථාපනය කරන ලදී</translation>
 <translation id="6087746524533454243">පිටුව ගැන බ්‍රවුසරය සඳහා සොයන්නේද? පිවිසෙන්න</translation>
 <translation id="6087960857463881712">නියම මුහුණ</translation>
+<translation id="6088535503330933227">Chrome වෙළඳ දැන්වීම් අයාචිත, වංචා, සහ අඩවි අතර බෙදා ගැනීම සීමා කිරීමට ක්‍රම ගවේෂණය කරයි. Chrome ඔබට වෙළඳ දැන්වීම් පෙන්වීමට අඩවි භාවිතා කළ හැකි <ph name="ESTIMATE_INTERESTS_LINK" />. ඔබට සැකසීම් තුළ ඔබේ ලැදිකම් කළමනාකරණය කළ හැක.</translation>
 <translation id="608912389580139775">මෙම පිටුව ඔබගේ කියවීම් ලැයිස්තුවට එක් කිරීමට, පිටුසන් නිරූපකය ක්ලික් කරන්න</translation>
 <translation id="6091761513005122595">කොටස සාර්ථකව නැංවිණි.</translation>
 <translation id="6093888419484831006">යාවත්කාලීන අවලංගු කරමින්...</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb
index 838cbc7..a08cb3c6 100644
--- a/chrome/app/resources/generated_resources_sk.xtb
+++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -1280,7 +1280,6 @@
 <translation id="2191754378957563929">zapnuté</translation>
 <translation id="2192505247865591433">Zdroj:</translation>
 <translation id="2193365732679659387">Nastavenie dôveryhodnosti</translation>
-<translation id="2194554416429452547">Počas skúšobných období hľadá Chrome spôsoby, ako obmedziť spam, podvody a zdieľanie obsahu medzi webmi. Chrome okrem toho <ph name="ESTIMATE_INTERESTS_LINK" />, na základe ktorých vám budú môcť weby zobrazovať reklamy. Svoje záujmy môžete spravovať v nastaveniach.</translation>
 <translation id="2194856509914051091">Čo je potrebné zohľadniť</translation>
 <translation id="2195331105963583686">Po tomto dátume budete môcť <ph name="DEVICE_TYPE" /> naďalej používať, ale už nebude dostávať automatické aktualizácie softvéru a zabezpečenia</translation>
 <translation id="2195729137168608510">Ochrana e-mailu</translation>
@@ -1956,7 +1955,6 @@
 <translation id="2806891468525657116">Skratka už existuje</translation>
 <translation id="2807517655263062534">Tu sa zobrazia súbory, ktoré stiahnete</translation>
 <translation id="2809586584051668049">a ďalšie (počet: <ph name="NUMBER_ADDITIONAL_DISABLED" />)</translation>
-<translation id="2810235462964014915">Rozšírenia, ktoré požiadali o čítanie a zmenu údajov na <ph name="SITE_NAME" /></translation>
 <translation id="2811205483104563968">Účty</translation>
 <translation id="2811564570599779918">Redukcia spamu a podvodov</translation>
 <translation id="2812049959647166806">Príslušenstvo Thunderbolt nie je podporované</translation>
@@ -5272,6 +5270,7 @@
 <translation id="6086846494333236931">Nainštalované vaším správcom</translation>
 <translation id="6087746524533454243">Hľadáte stránku s informáciami o prehliadači? Prejdite na</translation>
 <translation id="6087960857463881712">Paráda</translation>
+<translation id="6088535503330933227">Chrome hľadá spôsoby, ako obmedziť reklamný spam, podvody a zdieľanie obsahu medzi webmi. Chrome okrem toho <ph name="ESTIMATE_INTERESTS_LINK" />, na základe ktorých vám budú môcť weby zobrazovať reklamy. Záujmy môžete spravovať v nastaveniach.</translation>
 <translation id="608912389580139775">Ak chcete túto stránku pridať do svojho čitateľského zoznamu, kliknite na ikonu uloženia ako záložky</translation>
 <translation id="6091761513005122595">Zdieľané úložisko sa úspešne pripojilo.</translation>
 <translation id="6093888419484831006">Zrušenie aktualizácie...</translation>
@@ -7687,6 +7686,7 @@
 <translation id="8438566539970814960">Zlepšovať vyhľadávanie a prehliadanie</translation>
 <translation id="8439506636278576865">Ponúkať preklad stránok v tomto jazyku</translation>
 <translation id="8440630305826533614">Aplikácie pre Linux</translation>
+<translation id="844063558976952706">Vždy na týchto stránkach</translation>
 <translation id="8443795068008423036">Skontrolujte, či je zariadenie aktuálne a skúste to znova</translation>
 <translation id="8446884382197647889">Ďalšie informácie</translation>
 <translation id="8447409163267621480">Použite buď Ctrl, alebo Alt</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb
index 688168b..9fa03e40 100644
--- a/chrome/app/resources/generated_resources_sl.xtb
+++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -1292,7 +1292,6 @@
 <translation id="2191754378957563929">Vklopljeno</translation>
 <translation id="2192505247865591433">Iz:</translation>
 <translation id="2193365732679659387">Nastavitve zaupanja</translation>
-<translation id="2194554416429452547">Med preizkusi Chrome raziskuje načine, kako omejiti neželeno vsebino, prevare in deljenja med spletnimi mesti. Chrome prav tako <ph name="ESTIMATE_INTERESTS_LINK" />, ki jih spletna mesta lahko uporabijo pri prikazovanju oglasov. Zanimanja lahko upravljate v nastavitvah.</translation>
 <translation id="2194856509914051091">Kaj morate upoštevati</translation>
 <translation id="2195331105963583686">Po tem datumu boste še vedno lahko uporabljali to napravo <ph name="DEVICE_TYPE" />, vendar ne bo več prejemala samodejnih posodobitev programske opreme in varnostnih posodobitev.</translation>
 <translation id="2195729137168608510">E-poštna zaščita</translation>
@@ -1971,7 +1970,6 @@
 <translation id="2806891468525657116">Bližnjica že obstaja</translation>
 <translation id="2807517655263062534">Tu so prikazane datoteke, ki jih prenesete</translation>
 <translation id="2809586584051668049">in še <ph name="NUMBER_ADDITIONAL_DISABLED" /></translation>
-<translation id="2810235462964014915">Zahtevano branje in spreminjanje za <ph name="SITE_NAME" /></translation>
 <translation id="2811205483104563968">Računi</translation>
 <translation id="2811564570599779918">Zmanjšanje vsiljene vsebine in prevar</translation>
 <translation id="2812049959647166806">Thunderbolt ni podprt</translation>
@@ -5288,6 +5286,7 @@
 <translation id="6086846494333236931">Namestil skrbnik</translation>
 <translation id="6087746524533454243">Ali iščete stran z vizitko brskalnika? Obiščite</translation>
 <translation id="6087960857463881712">Navdušen obraz</translation>
+<translation id="6088535503330933227">Chrome raziskuje načine, kako omejiti prikazovanje vsiljenih oglasov, prevare in deljenja med spletnimi mesti. Chrome prav tako <ph name="ESTIMATE_INTERESTS_LINK" />, ki jih spletna mesta lahko uporabijo pri prikazovanju oglasov. Zanimanja lahko upravljate v nastavitvah.</translation>
 <translation id="608912389580139775">Če želite dodati to stran na bralni seznam, se dotaknite ikone za ustvarjanje zaznamkov.</translation>
 <translation id="6091761513005122595">Datotečno sredstvo v skupni rabi je bilo uspešno vpeto.</translation>
 <translation id="6093888419484831006">Preklic posodabljanja ...</translation>
@@ -7703,6 +7702,7 @@
 <translation id="8438566539970814960">Izboljšanje iskanja in brskanja</translation>
 <translation id="8439506636278576865">Ponudi prevajanje strani v tem jeziku</translation>
 <translation id="8440630305826533614">Aplikacije za Linux</translation>
+<translation id="844063558976952706">Vedno na tem mestu</translation>
 <translation id="8443795068008423036">Preverite, ali je naprava posodobljena, in poskusite znova.</translation>
 <translation id="8446884382197647889">Več o tem</translation>
 <translation id="8447409163267621480">Vključevati morajo ali Ctrl ali Alt</translation>
diff --git a/chrome/app/resources/generated_resources_sq.xtb b/chrome/app/resources/generated_resources_sq.xtb
index 7b88bdf..01431f0 100644
--- a/chrome/app/resources/generated_resources_sq.xtb
+++ b/chrome/app/resources/generated_resources_sq.xtb
@@ -1274,7 +1274,6 @@
 <translation id="2191754378957563929">Aktiv</translation>
 <translation id="2192505247865591433">Nga:</translation>
 <translation id="2193365732679659387">Cilësimet e besimit</translation>
-<translation id="2194554416429452547">Gjatë provave, Chrome eksploron mënyra për të kufizuar përmbajtjet e bezdisshme, mashtrimet dhe ndarjen mes sajteve. Chrome <ph name="ESTIMATE_INTERESTS_LINK" /> që sajtet mund t'i përdorin për të të shfaqur reklama. Mund t'i menaxhosh interesat e tu te cilësimet.</translation>
 <translation id="2194856509914051091">Gjëra për të pasur parasysh</translation>
 <translation id="2195331105963583686">Do të jesh sërish në gjendje ta përdorësh këtë <ph name="DEVICE_TYPE" /> pas kësaj kohe, por pajisja nuk do të marrë më përditësime automatike të softuerëve dhe të sigurisë</translation>
 <translation id="2195729137168608510">Mbrojtja e mail-it</translation>
@@ -1951,7 +1950,6 @@
 <translation id="2806891468525657116">Shkurtorja ekziston tashmë</translation>
 <translation id="2807517655263062534">Skedarët që shkarkon shfaqen këtu</translation>
 <translation id="2809586584051668049">dhe <ph name="NUMBER_ADDITIONAL_DISABLED" /> të tjerë</translation>
-<translation id="2810235462964014915">Kërkuar për të lexuar dhe për të ndryshuar <ph name="SITE_NAME" /></translation>
 <translation id="2811205483104563968">Llogaritë</translation>
 <translation id="2811564570599779918">Reduktimi i mesazheve të bezdisshme dhe mashtrimit</translation>
 <translation id="2812049959647166806">Thunderbolt nuk mbështetet</translation>
@@ -5265,6 +5263,7 @@
 <translation id="6086846494333236931">Instaluar nga administratori yt</translation>
 <translation id="6087746524533454243">Po kërkon për faqen e informacioneve të sistemit? Vizito</translation>
 <translation id="6087960857463881712">Fytyrë e mrekullueshme</translation>
+<translation id="6088535503330933227">Chrome po eksploron mënyra për të kufizuar reklamat e bezdisshme, mashtrimet dhe ndarjen mes sajteve. Chrome <ph name="ESTIMATE_INTERESTS_LINK" /> që sajtet mund t'i përdorin për të të shfaqur reklama. Mund t'i menaxhosh interesat e tu te cilësimet.</translation>
 <translation id="608912389580139775">Për ta shtuar këtë faqe te lista jote e leximit, kliko ikonën "Faqeshënuesi"</translation>
 <translation id="6091761513005122595">Ndarja u montua me sukses.</translation>
 <translation id="6093888419484831006">Po anulon përditësimin...</translation>
diff --git a/chrome/app/resources/generated_resources_sr-Latn.xtb b/chrome/app/resources/generated_resources_sr-Latn.xtb
index 7132ef9..14743fae 100644
--- a/chrome/app/resources/generated_resources_sr-Latn.xtb
+++ b/chrome/app/resources/generated_resources_sr-Latn.xtb
@@ -1277,7 +1277,6 @@
 <translation id="2191754378957563929">Uključeno</translation>
 <translation id="2192505247865591433">Od:</translation>
 <translation id="2193365732679659387">Podešavanja pouzdanosti</translation>
-<translation id="2194554416429452547">Tokom probnih perioda, Chrome istražuje načine da ograniči nepoželjan sadržaj, prevaru i deljenje između sajtova. Chrome takođe <ph name="ESTIMATE_INTERESTS_LINK" /> koja sajtovi mogu da koriste da bi vam prikazivali oglase. Možete da upravljate interesovanjima u podešavanjima.</translation>
 <translation id="2194856509914051091">Šta treba imati u vidu</translation>
 <translation id="2195331105963583686">Posle tog perioda i dalje ćete moći da koristite <ph name="DEVICE_TYPE" />, ali uređaj neće više dobijati automatska ažuriranja softvera i bezbednosna ažuriranja</translation>
 <translation id="2195729137168608510">Zaštita e-pošte</translation>
@@ -1953,7 +1952,6 @@
 <translation id="2806891468525657116">Prečica već postoji</translation>
 <translation id="2807517655263062534">Datoteke koje preuzmete će se pojaviti ovde</translation>
 <translation id="2809586584051668049">i još <ph name="NUMBER_ADDITIONAL_DISABLED" /></translation>
-<translation id="2810235462964014915">Traže čitanje i menjanje sajta <ph name="SITE_NAME" /></translation>
 <translation id="2811205483104563968">Nalozi</translation>
 <translation id="2811564570599779918">Smanjivanje nepoželjnog sadržaja i prevara</translation>
 <translation id="2812049959647166806">Thunderbolt nije podržan</translation>
@@ -5269,6 +5267,7 @@
 <translation id="6086846494333236931">Instalirao je administrator</translation>
 <translation id="6087746524533454243">Tražite stranicu sa osnovnim podacima o pregledaču? Posetite</translation>
 <translation id="6087960857463881712">Zadovoljno lice</translation>
+<translation id="6088535503330933227">Chrome istražuje načine da ograniči nepoželjne oglase, prevaru i deljenje između sajtova. Chrome takođe <ph name="ESTIMATE_INTERESTS_LINK" /> koja sajtovi mogu da koriste da bi vam prikazivali oglase. Možete da upravljate interesovanjima u podešavanjima.</translation>
 <translation id="608912389580139775">Da biste dodali ovu stranicu na listu za čitanje, kliknite na ikonu obeleživača</translation>
 <translation id="6091761513005122595">Deljena datoteka je učitana.</translation>
 <translation id="6093888419484831006">Otkazivanje ažuriranja...</translation>
@@ -7684,6 +7683,7 @@
 <translation id="8438566539970814960">Poboljšaj pretrage i pregledanje</translation>
 <translation id="8439506636278576865">Ponudi prevod stranica na ovom jeziku</translation>
 <translation id="8440630305826533614">Linux aplikacije</translation>
+<translation id="844063558976952706">Uvek na ovom sajtu</translation>
 <translation id="8443795068008423036">Proverite da li je uređaj ažuran i probajte ponovo</translation>
 <translation id="8446884382197647889">Saznajte više</translation>
 <translation id="8447409163267621480">Koristite ili Ctrl ili Alt</translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb
index 3d56508..1d63f4b 100644
--- a/chrome/app/resources/generated_resources_sr.xtb
+++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -1277,7 +1277,6 @@
 <translation id="2191754378957563929">Укључено</translation>
 <translation id="2192505247865591433">Од:</translation>
 <translation id="2193365732679659387">Подешавања поузданости</translation>
-<translation id="2194554416429452547">Током пробних периода, Chrome истражује начине да ограничи непожељан садржај, превару и дељење између сајтова. Chrome такође <ph name="ESTIMATE_INTERESTS_LINK" /> која сајтови могу да користе да би вам приказивали огласе. Можете да управљате интересовањима у подешавањима.</translation>
 <translation id="2194856509914051091">Шта треба имати у виду</translation>
 <translation id="2195331105963583686">После тог периода и даље ћете моћи да користите <ph name="DEVICE_TYPE" />, али уређај неће више добијати аутоматска ажурирања софтвера и безбедносна ажурирања</translation>
 <translation id="2195729137168608510">Заштита е-поште</translation>
@@ -1953,7 +1952,6 @@
 <translation id="2806891468525657116">Пречица већ постоји</translation>
 <translation id="2807517655263062534">Датотеке које преузмете ће се појавити овде</translation>
 <translation id="2809586584051668049">и још <ph name="NUMBER_ADDITIONAL_DISABLED" /></translation>
-<translation id="2810235462964014915">Траже читање и мењање сајта <ph name="SITE_NAME" /></translation>
 <translation id="2811205483104563968">Налози</translation>
 <translation id="2811564570599779918">Смањивање непожељног садржаја и превара</translation>
 <translation id="2812049959647166806">Thunderbolt није подржан</translation>
@@ -5269,6 +5267,7 @@
 <translation id="6086846494333236931">Инсталирао је администратор</translation>
 <translation id="6087746524533454243">Тражите страницу са основним подацима о прегледачу? Посетите</translation>
 <translation id="6087960857463881712">Задовољно лице</translation>
+<translation id="6088535503330933227">Chrome истражује начине да ограничи непожељне огласе, превару и дељење између сајтова. Chrome такође <ph name="ESTIMATE_INTERESTS_LINK" /> која сајтови могу да користе да би вам приказивали огласе. Можете да управљате интересовањима у подешавањима.</translation>
 <translation id="608912389580139775">Да бисте додали ову страницу на листу за читање, кликните на икону обележивача</translation>
 <translation id="6091761513005122595">Дељена датотека је учитана.</translation>
 <translation id="6093888419484831006">Отказивање ажурирања...</translation>
@@ -7684,6 +7683,7 @@
 <translation id="8438566539970814960">Побољшај претраге и прегледање</translation>
 <translation id="8439506636278576865">Понуди превод страница на овом језику</translation>
 <translation id="8440630305826533614">Linux апликације</translation>
+<translation id="844063558976952706">Увек на овом сајту</translation>
 <translation id="8443795068008423036">Проверите да ли је уређај ажуран и пробајте поново</translation>
 <translation id="8446884382197647889">Сазнајте више</translation>
 <translation id="8447409163267621480">Користите или Ctrl или Alt</translation>
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb
index aa474306..ac7867b 100644
--- a/chrome/app/resources/generated_resources_sv.xtb
+++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -1290,7 +1290,6 @@
 <translation id="2191754378957563929">På</translation>
 <translation id="2192505247865591433">Från:</translation>
 <translation id="2193365732679659387">Inställningar för tillförlitlighet</translation>
-<translation id="2194554416429452547">Under provperioder utforskar Chrome olika sätt att begränsa skräppost, bedrägerier och delning mellan webbplatser. Chrome <ph name="ESTIMATE_INTERESTS_LINK" /> också. Dessa kan användas på webbplatser för att visa annonser. Du kan hantera dina intressen i inställningarna.</translation>
 <translation id="2194856509914051091">Tänk på detta</translation>
 <translation id="2195331105963583686">Du kan fortfarande använda <ph name="DEVICE_TYPE" /> efter det, men den får inte längre några automatiska program- eller säkerhetsuppdateringar</translation>
 <translation id="2195729137168608510">E-postskydd</translation>
@@ -1969,7 +1968,6 @@
 <translation id="2806891468525657116">Genvägen finns redan</translation>
 <translation id="2807517655263062534">Filer som du laddar ned visas här</translation>
 <translation id="2809586584051668049">och ytterligare <ph name="NUMBER_ADDITIONAL_DISABLED" /></translation>
-<translation id="2810235462964014915">Har begärt att få läsa och ändra <ph name="SITE_NAME" /></translation>
 <translation id="2811205483104563968">Konton</translation>
 <translation id="2811564570599779918">Motverka spam och bedrägeri</translation>
 <translation id="2812049959647166806">Thunderbolt stöds inte</translation>
@@ -5286,6 +5284,7 @@
 <translation id="6086846494333236931">Har installerats av administratören</translation>
 <translation id="6087746524533454243">Letar du webbläsarens about-sida? Besök</translation>
 <translation id="6087960857463881712">Entusiastiskt ansikte</translation>
+<translation id="6088535503330933227">Chrome utforskar olika sätt att begränsa skräppost, bedrägerier och delning mellan webbplatser. Chrome <ph name="ESTIMATE_INTERESTS_LINK" /> också. Dessa kan användas på webbplatser för att visa annonser. Du kan hantera dina intressen i inställningarna.</translation>
 <translation id="608912389580139775">Om du vill lägga till den här sidan i läslistan klickar du på bokmärkesikonen</translation>
 <translation id="6091761513005122595">Den delade resursen har monterats.</translation>
 <translation id="6093888419484831006">Avbryter uppdatering ...</translation>
@@ -7698,6 +7697,7 @@
 <translation id="8438566539970814960">Förbättra sökningar och surfandet</translation>
 <translation id="8439506636278576865">Erbjud att översätta sidor på detta språk</translation>
 <translation id="8440630305826533614">Linux-appar</translation>
+<translation id="844063558976952706">Alltid på den här webbplatsen</translation>
 <translation id="8443795068008423036">Kontrollera att enheten är uppdaterad och försök igen.</translation>
 <translation id="8446884382197647889">Läs mer</translation>
 <translation id="8447409163267621480">Ctrl- eller alt-tangenten måste finnas med</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb
index fad0cbd..a6c6918 100644
--- a/chrome/app/resources/generated_resources_sw.xtb
+++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -1285,7 +1285,6 @@
 <translation id="2191754378957563929">Imewashwa</translation>
 <translation id="2192505247865591433">Kutoka:</translation>
 <translation id="2193365732679659387">Mipangilio ya kuamini</translation>
-<translation id="2194554416429452547">Wakati wa vipindi vya kujaribu, Chrome inagundua njia za kuzuia taka, ulaghai na ushiriki miongoni mwa tovuti. Chrome pia <ph name="ESTIMATE_INTERESTS_LINK" /> ambayo tovuti zinaweza kutumia ili kukuonyesha matangazo. Unaweza kudhibiti mambo yanayokuvutia kwa kwenda kwenye mipangilio.</translation>
 <translation id="2194856509914051091">Mambo ya kuzingatia</translation>
 <translation id="2195331105963583686">Bado utaweza kutumia <ph name="DEVICE_TYPE" /> hii baada ya wakati huo, lakini haitapata tena masasisho ya kiotomatiki ya programu na usalama.</translation>
 <translation id="2195729137168608510">Ulinzi wa Barua Pepe</translation>
@@ -1965,7 +1964,6 @@
 <translation id="2806891468525657116">Tayari umeweka njia hii ya mkato</translation>
 <translation id="2807517655263062534">Faili unazopakua zitaonekana hapa</translation>
 <translation id="2809586584051668049">na <ph name="NUMBER_ADDITIONAL_DISABLED" /> zaidi</translation>
-<translation id="2810235462964014915">Vilivyoomba ruhusa ya kusoma na kubadilisha <ph name="SITE_NAME" /></translation>
 <translation id="2811205483104563968">Akaunti</translation>
 <translation id="2811564570599779918">Upunguzaji wa taka na ulaghai</translation>
 <translation id="2812049959647166806">Thunderbolt haiwezi kutumika</translation>
@@ -5278,6 +5276,7 @@
 <translation id="6086846494333236931">Kiendelezi kimesakinishwa na msimamizi wako</translation>
 <translation id="6087746524533454243">Je, unatafuta ukurasa wa 'kuhusu' wa kivinjari? Tembelea</translation>
 <translation id="6087960857463881712">Uso wa kuvutia</translation>
+<translation id="6088535503330933227">Chrome inagundua njia za kuzuia matangazo taka, ulaghai na ushiriki kati ya tovuti. Chrome pia <ph name="ESTIMATE_INTERESTS_LINK" /> ambayo tovuti zinaweza kutumia ili kukuonyesha matangazo. Unaweza kudhibiti mambo yanayokuvutia kwenye mipangilio.</translation>
 <translation id="608912389580139775">Bofya aikoni ya Alamisho ili uweke ukurasa huu kwenye orodha yako ya kusoma</translation>
 <translation id="6091761513005122595">Imepachika faili ya kushiriki.</translation>
 <translation id="6093888419484831006">Inaghairi usasishaji...</translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb
index 13cbed6..9c28311 100644
--- a/chrome/app/resources/generated_resources_ta.xtb
+++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -1289,7 +1289,6 @@
 <translation id="2191754378957563929">இயக்கப்பட்டுள்ளது</translation>
 <translation id="2192505247865591433">அனுப்புநர்:</translation>
 <translation id="2193365732679659387">நம்பிக்கை தொடர்பான அமைப்புகள்</translation>
-<translation id="2194554416429452547">கட்டணமற்ற உபயோகக் காலத்தின்போது, ஸ்பேம், மோசடி, தளங்களுக்கு இடையே பகிர்தல் போன்றவற்றைக் குறைப்பதற்கான வழிகளை Chrome ஆராய்கிறது. Chrome <ph name="ESTIMATE_INTERESTS_LINK" />, இவற்றின் அடிப்படையில் விளம்பரங்களை உங்களுக்குக் காட்டுவதற்காகத் தளங்கள் பயன்படுத்தலாம். அமைப்புகளுக்குச் சென்று உங்கள் ஆர்வங்களை நிர்வகிக்கலாம்.</translation>
 <translation id="2194856509914051091">கருத்தில்கொள்ள வேண்டியவை</translation>
 <translation id="2195331105963583686">இருப்பினும் அதற்குப் பிறகும் இந்த <ph name="DEVICE_TYPE" /> சாதனத்தை நீங்கள் பயன்படுத்த முடியும். ஆனால் மென்பொருளும் பாதுகாப்பும் இனி தானாகவே புதுப்பிக்கப்படாது</translation>
 <translation id="2195729137168608510">மின்னஞ்சல் பாதுகாப்பு</translation>
@@ -1968,7 +1967,6 @@
 <translation id="2806891468525657116">ஷார்ட்கட் ஏற்கனவே உள்ளது</translation>
 <translation id="2807517655263062534">நீங்கள் பதிவிறக்கும் ஃபைல்கள்  இங்கே தோன்றும்</translation>
 <translation id="2809586584051668049">மேலும் <ph name="NUMBER_ADDITIONAL_DISABLED" /></translation>
-<translation id="2810235462964014915"><ph name="SITE_NAME" /> தளத்தில் உள்ள தரவைப் படிக்கவும் மாற்றவும் அனுமதி கோரப்பட்டுள்ளது</translation>
 <translation id="2811205483104563968">கணக்குகள்</translation>
 <translation id="2811564570599779918">ஸ்பேம் &amp; மோசடியைக் குறைத்தல்</translation>
 <translation id="2812049959647166806">Thunderbolt ஆதரிக்கப்படவில்லை</translation>
@@ -5284,6 +5282,7 @@
 <translation id="6086846494333236931">உங்கள் நிர்வாகி நிறுவினார்</translation>
 <translation id="6087746524533454243">உலாவியின் அறிமுகப் பக்கத்தைத் தேடுகிறீர்களா? இந்தத் தளத்திற்குச் செல்க</translation>
 <translation id="6087960857463881712">அழகான முகம்</translation>
+<translation id="6088535503330933227">விளம்பர ஸ்பேம், மோசடி, தளங்களுக்கு இடையே பகிர்தல் போன்றவற்றைக் குறைப்பதற்கான வழிகளை Chrome ஆராய்கிறது. Chrome <ph name="ESTIMATE_INTERESTS_LINK" />, இவற்றின் அடிப்படையில் தளங்கள் உங்களுக்கு விளம்பரங்களைக் காட்டலாம். அமைப்புகளுக்குச் சென்று உங்கள் ஆர்வங்களை நிர்வகிக்கலாம்.</translation>
 <translation id="608912389580139775">இந்தப் பக்கத்தை வாசிப்புப் பட்டியலில் சேர்க்க, புக்மார்க் ஐகானைக் கிளிக் செய்யுங்கள்</translation>
 <translation id="6091761513005122595">பகிர்வு ஏற்றப்பட்டது.</translation>
 <translation id="6093888419484831006">புதுப்பிப்பை ரத்துசெய்கிறது...</translation>
@@ -7689,6 +7688,7 @@
 <translation id="8438566539970814960">தேடல்களையும் உலாவலையும் மேலும் சிறப்பாக்குக</translation>
 <translation id="8439506636278576865">பக்கங்களை இந்த மொழியில் மொழிபெயர்ப்பதற்கான அனுமதி</translation>
 <translation id="8440630305826533614">Linux ஆப்ஸ்</translation>
+<translation id="844063558976952706">இந்த தளத்திற்கு எப்போதும்</translation>
 <translation id="8443795068008423036">உங்கள் சாதனம் சமீபத்திய பதிப்பில் இயங்குவதை உறுதிசெய்து மீண்டும் முயலவும்</translation>
 <translation id="8446884382197647889">மேலும் அறிக</translation>
 <translation id="8447409163267621480">கன்ட்ரோல் அல்லது ஆல்ட் விசையைப் பயன்படுத்தித் தொடங்கவும்</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb
index 664cc84..2c98fdae 100644
--- a/chrome/app/resources/generated_resources_te.xtb
+++ b/chrome/app/resources/generated_resources_te.xtb
@@ -991,6 +991,7 @@
 <translation id="1916502483199172559">డిఫాల్ట్ ఎరుపు రంగు అవతార్</translation>
 <translation id="1918141783557917887">&amp;చిన్నగా</translation>
 <translation id="1920390473494685033">కాంటాక్ట్‌లు</translation>
+<translation id="1921544956190977703">ప్రమాదకరమైన వెబ్‌సైట్‌లు, డౌన్‌లోడ్‌లు, ఎక్స్‌టెన్షన్‌ల నుండి రక్షణ పొందడానికి మీ దగ్గర Chrome అత్యంత శక్తివంతమైన సెక్యూరిటీ ఉంది</translation>
 <translation id="1921584744613111023"><ph name="DPI" /> dpi</translation>
 <translation id="1923468477587371721">మీరు విడిగా ప్రోడక్ట్ భాషను మార్చితే తప్ప, Gmail, Drive, ఇంకా YouTube వంటి Google సైట్‌లు మీ Google ఖాతా భాషను ఉపయోగిస్తాయి</translation>
 <translation id="1923539912171292317">ఆటోమేటిక్‌ క్లిక్‌లు</translation>
@@ -1288,7 +1289,6 @@
 <translation id="2191754378957563929">ఆన్ చేయబడ్డాయి</translation>
 <translation id="2192505247865591433">నుండి:</translation>
 <translation id="2193365732679659387">విశ్వసనీయత సెట్టింగ్‌లు</translation>
-<translation id="2194554416429452547">ట్రయల్స్ సమయంలో, స్పామ్, మోసంతో పాటు సైట్‌ల మధ్య షేరింగ్‌ను పరిమితం చేసే మార్గాలను Chrome అన్వేషిస్తోంది. Chrome <ph name="ESTIMATE_INTERESTS_LINK" />, ఆ అంచనాలను సైట్లు మీకు యాడ్లు చూపడానికి వినియోగించుకుంటాయి. మీరు మీ ఆసక్తులను సెట్టింగ్‌లలో మేనేజ్ చేయవచ్చు.</translation>
 <translation id="2194856509914051091">పరిగణించాల్సిన విషయాలు</translation>
 <translation id="2195331105963583686">మీరు ఆ సమయం తర్వాత కూడా ఈ <ph name="DEVICE_TYPE" />ను ఉపయోగించగలరు, కానీ ఆపై ఆటోమేటిక్ సాఫ్ట్‌వేర్, భద్రతాపరమైన అప్‌డేట్‌లు దీనికి అందించబడవు</translation>
 <translation id="2195729137168608510">ఈమెయిల్‌ రక్షణ</translation>
@@ -1967,7 +1967,6 @@
 <translation id="2806891468525657116">షార్ట్‌కట్ ఇప్పటికే ఉంది</translation>
 <translation id="2807517655263062534">మీరు డౌన్‌లోడ్ చేసిన ఫైళ్లు ఇక్కడ కనిపిస్తాయి</translation>
 <translation id="2809586584051668049">ఇంకా మరో <ph name="NUMBER_ADDITIONAL_DISABLED" /></translation>
-<translation id="2810235462964014915"><ph name="SITE_NAME" />లో చదవడానికి, మార్చడానికి రిక్వెస్ట్ పంపబడింది</translation>
 <translation id="2811205483104563968">ఖాతాలు</translation>
 <translation id="2811564570599779918">స్పామ్, మోసాన్ని తగ్గించడం</translation>
 <translation id="2812049959647166806">Thunderboltలో మద్దతు లేదు</translation>
@@ -2092,6 +2091,7 @@
 మీ స్మార్ట్ కార్డ్‌ను ఇన్‌సర్ట్ చేసి ఉంచమని <ph name="DOMAIN" /> మిమ్మల్ని కోరుతుంది.</translation>
 <translation id="2923234477033317484">ఈ ఖాతాను తీసివేయండి</translation>
 <translation id="2923644930701689793">మీ ఫోన్ కెమెరా రోల్‌ను యాక్సెస్ చేయండి</translation>
+<translation id="292371311537977079">Chrome సెట్టింగ్‌లు</translation>
 <translation id="2925658782192398150">పూర్తయింది, సమస్యలు ఏవీ కనుగొనబడలేదు</translation>
 <translation id="2926085873880284723">డిఫాల్ట్ షార్ట్‌కట్‌లను పునరుద్ధరించండి</translation>
 <translation id="2926620265753325858"><ph name="DEVICE_NAME" /> సపోర్ట్ చేయదు.</translation>
@@ -2675,6 +2675,7 @@
 <translation id="3511528412952710609">స్వల్పం</translation>
 <translation id="3514335087372914653">గేమ్ కంట్రోల్</translation>
 <translation id="3514373592552233661">ఒకటి కంటే ఎక్కువ నెట్‌వర్క్‌లు అందుబాటులో ఉంటే, తెలిసిన ఇతర నెట్‌వర్క్‌ల కంటే ప్రాధాన్య నెట్‌వర్క్‌లకు ప్రాధాన్యత ఇవ్వబడుతుంది</translation>
+<translation id="3514647716686280777">మీరు స్టాండర్డ్ సెక్యూరిటీ రక్షణను పొందుతున్నారు. ప్రమాదకరమైన వెబ్‌సైట్‌లు, డౌన్‌లోడ్‌లు, ఎక్స్‌టెన్షన్‌ల నుండి మరింత రక్షణను పొందడానికి, Chrome సెట్టింగ్‌లలో మెరుగైన సురక్షిత బ్రౌజింగ్ ఫీచర్‌ను ఆన్ చేయండి.</translation>
 <translation id="3515983984924808886">రీసెట్‌ను నిర్ధారించడానికి మీ 'సెక్యూరిటీ కీ'ని మళ్లీ తాకండి. 'సెక్యూరిటీ కీ'లో నిల్వ చేసిన మొత్తం సమాచారం, అలాగే దాని పిన్ కూడా తొలగించబడతాయి.</translation>
 <translation id="3518985090088779359">అంగీకరించు &amp; కొనసాగు</translation>
 <translation id="3519564332031442870">ప్రింట్ బ్యాక్ ఎండ్ సర్వీస్</translation>
@@ -5282,6 +5283,7 @@
 <translation id="6086846494333236931">మీ నిర్వాహకుడు ఇన్‌స్టాల్ చేశారు</translation>
 <translation id="6087746524533454243">బ్రౌజర్‌కు సంబంధించిన వివరాల పేజీ కోసం వెతుకుతున్నారా? సందర్శించండి</translation>
 <translation id="6087960857463881712">అద్భుతమైన ముఖం</translation>
+<translation id="6088535503330933227">యాడ్ స్పామ్, మోసంతో పాటు సైట్‌ల మధ్య షేరింగ్‌ను పరిమితం చేసే మార్గాలను Chrome అన్వేషిస్తోంది. Chrome <ph name="ESTIMATE_INTERESTS_LINK" />, ఆ అంచనాలను సైట్‌లు మీకు యాడ్‌లు చూపడానికి వినియోగించుకుంటాయి. మీరు మీ ఆసక్తులను సెట్టింగ్‌లలో మేనేజ్ చేయవచ్చు.</translation>
 <translation id="608912389580139775">ఈ పేజీని మీ చదవాల్సిన లిస్ట్‌కు జోడించడానికి, బుక్‌మార్క్ చిహ్నాన్ని క్లిక్ చేయండి</translation>
 <translation id="6091761513005122595">షేర్ విజయవంతంగా మౌంట్ చేయబడింది.</translation>
 <translation id="6093888419484831006">అప్‌డేట్‌ రద్దు చేయడం...</translation>
@@ -5470,6 +5472,7 @@
 <translation id="6278428485366576908">థీమ్</translation>
 <translation id="6278776436938569440">లొకేషన్‌ను మార్చు</translation>
 <translation id="6279183038361895380">మీ కర్సర్‌ను చూపడానికి |<ph name="ACCELERATOR" />| నొక్కండి</translation>
+<translation id="6279595948631688299">ఎంచుకున్న సర్టిఫికెట్‌ను ఎగుమతి చేయండి...</translation>
 <translation id="6280215091796946657">వేరొక ఖాతాతో సైన్ ఇన్ చేయండి</translation>
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6282180787514676874">{COUNT,plural, =1{1 పేపర్ షీట్ పరిమితిని మించి ఉంది}other{{COUNT} పేపర్ షీట్‌ల పరిమితిని మించి ఉంది}}</translation>
@@ -5584,6 +5587,7 @@
 <translation id="6398715114293939307">Google Play Storeను తీసివేయండి</translation>
 <translation id="6398765197997659313">ఫుల్-స్క్రీన్‌ నుండి నిష్క్రమించండి</translation>
 <translation id="6399774419735315745">గూఢచారి</translation>
+<translation id="6401458660421980302">ఈ ట్యాబ్‌ను మరొక పరికరానికి పంపడానికి, అక్కడ Chromeకు సైన్ ఇన్ చేయండి</translation>
 <translation id="6401597285454423070">మీ కంప్యూటర్ విశ్వసనీయ ప్లాట్‌ఫామ్ మాడ్యూల్ (TPM) సెక్యూరిటీ పరికరాన్ని కలిగి ఉంది, ఇది ChromeOSలో అనేక కీలకమైన సెక్యూరిటీ ఫీచర్‌లను అమలు చేయడానికి ఉపయోగించబడుతుంది. మరింత తెలుసుకోవడానికి Chromebook సహాయ కేంద్రాన్ని సందర్శించండి: https://support.google.com/chromebook/?p=tpm</translation>
 <translation id="6404187344102273690">Chromebook గేమింగ్</translation>
 <translation id="6404511346730675251">బుక్‌మార్క్‌ను ఎడిట్ చేయండి</translation>
@@ -5820,6 +5824,7 @@
 <translation id="6619801788773578757">కియోస్క్ అప్లికేషన్‌ని జోడించండి</translation>
 <translation id="6619990499523117484">మీ PINను నిర్ధారించండి</translation>
 <translation id="6620254580880484313">కంటైనర్ పేరు</translation>
+<translation id="6621391692573306628">ఈ ట్యాబ్‌ను మరొక పరికరానికి పంపడానికి, రెండు పరికరాల్లోనూ Chromeకు సైన్ ఇన్ చేయండి</translation>
 <translation id="6622980291894852883">చిత్రాలను నిరోధించడాన్ని కొనసాగించు</translation>
 <translation id="6624036901798307345">టాబ్లెట్ మోడ్‌లో, ప్రతి ట్యాబ్ యొక్క థంబ్‌నెయిల్స్‌ను చూపే కొత్త ట్యాబ్‌ల బార్‌ను తెరవడానికి ట్యాబ్ కౌంటర్ టూల్‌బార్ బటన్‌పై నొక్కండి.</translation>
 <translation id="6624535038674360844"><ph name="FILE_NAME" />, గోప్యమైన, లేదా హానికరమైన కంటెంట్‌ను కలిగి ఉంది. పరిష్కరించమని ఫైల్ యజమానిని అడగండి.</translation>
@@ -7687,6 +7692,7 @@
 <translation id="8438566539970814960">సెర్చ్‌లను, బ్రౌజింగ్‌ను మెరుగుపరచండి</translation>
 <translation id="8439506636278576865">ఈ భాషలో పేజీలకు అనువాదం అందించు</translation>
 <translation id="8440630305826533614">Linux యాప్‌లు</translation>
+<translation id="844063558976952706">ఎల్లప్పుడూ ఈ సైట్‌లో</translation>
 <translation id="8443795068008423036">దయచేసి మీ పరికరం అప్‌డేట్ అయ్యి ఉందని నిర్ధారించుకొని, మళ్లీ ట్రై చేయండి</translation>
 <translation id="8446884382197647889">మరింత తెలుసుకోండి</translation>
 <translation id="8447409163267621480">Ctrl లేదా Altను చేర్చండి</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb
index 79b26fd7..7e40ab45 100644
--- a/chrome/app/resources/generated_resources_th.xtb
+++ b/chrome/app/resources/generated_resources_th.xtb
@@ -1278,7 +1278,6 @@
 <translation id="2191754378957563929">เปิด</translation>
 <translation id="2192505247865591433">จาก:</translation>
 <translation id="2193365732679659387">การตั้งค่าความเชื่อถือ</translation>
-<translation id="2194554416429452547">ระหว่างช่วงทดลองใช้ Chrome จะสำรวจวิธีจำกัดสแปม การประพฤติมิชอบ และการแชร์ระหว่างเว็บไซต์ Chrome จะ<ph name="ESTIMATE_INTERESTS_LINK" />ด้วย ซึ่งเว็บไซต์สามารถใช้ข้อมูลเพื่อแสดงโฆษณาแก่คุณ คุณจัดการความสนใจได้ในการตั้งค่า</translation>
 <translation id="2194856509914051091">สิ่งที่ควรพิจารณา</translation>
 <translation id="2195331105963583686">คุณยังคงใช้ <ph name="DEVICE_TYPE" /> นี้ได้หลังจากเวลานั้น แต่จะไม่ได้รับการอัปเดตซอฟต์แวร์และการอัปเดตการรักษาความปลอดภัยอัตโนมัติอีกต่อไป</translation>
 <translation id="2195729137168608510">การป้องกันอีเมล </translation>
@@ -1954,7 +1953,6 @@
 <translation id="2806891468525657116">มีทางลัดนี้อยู่แล้ว</translation>
 <translation id="2807517655263062534">ไฟล์ที่คุณดาวน์โหลดจะปรากฏที่นี่</translation>
 <translation id="2809586584051668049">และอีก <ph name="NUMBER_ADDITIONAL_DISABLED" /> รายการ</translation>
-<translation id="2810235462964014915">ได้ขออ่านและเปลี่ยนแปลง <ph name="SITE_NAME" /></translation>
 <translation id="2811205483104563968">บัญชี</translation>
 <translation id="2811564570599779918">การลดจำนวนสแปมและการประพฤติมิชอบ</translation>
 <translation id="2812049959647166806">ไม่รองรับ Thunderbolt</translation>
@@ -5268,6 +5266,7 @@
 <translation id="6086846494333236931">ติดตั้งโดยผู้ดูแลระบบ</translation>
 <translation id="6087746524533454243">หากต้องการดูหน้าข้อมูลเกี่ยวกับเบราว์เซอร์ โปรดไปที่</translation>
 <translation id="6087960857463881712">ใบหน้าเจ๋ง</translation>
+<translation id="6088535503330933227">Chrome จะสำรวจวิธีจำกัดสแปมโฆษณา การประพฤติมิชอบ และการแชร์ระหว่างเว็บไซต์ Chrome จะ<ph name="ESTIMATE_INTERESTS_LINK" />ด้วย ซึ่งเว็บไซต์สามารถใช้ข้อมูลเพื่อแสดงโฆษณาแก่คุณ คุณจัดการความสนใจได้ในการตั้งค่า</translation>
 <translation id="608912389580139775">คลิกไอคอนบุ๊กมาร์กเพื่อเพิ่มหน้านี้ลงในเรื่องรออ่าน</translation>
 <translation id="6091761513005122595">ต่อเชื่อมพื้นที่แชร์สำเร็จแล้ว</translation>
 <translation id="6093888419484831006">กำลังยกเลิกการอัปเดต…</translation>
@@ -7679,6 +7678,7 @@
 <translation id="8438566539970814960">ปรับปรุงการค้นหาและการท่องเว็บให้ดียิ่งขึ้น</translation>
 <translation id="8439506636278576865">เสนอที่จะแปลหน้าต่างๆ ที่เป็นภาษานี้</translation>
 <translation id="8440630305826533614">แอป Linux</translation>
+<translation id="844063558976952706">ทำงานบนไซต์นี้เสมอ</translation>
 <translation id="8443795068008423036">โปรดตรวจสอบว่าอุปกรณ์เป็นเวอร์ชันล่าสุด แล้วลองอีกครั้ง</translation>
 <translation id="8446884382197647889">ดูข้อมูลเพิ่มเติม</translation>
 <translation id="8447409163267621480">รวมปุ่ม Ctrl หรือ Alt</translation>
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb
index b336758..9ee0d81 100644
--- a/chrome/app/resources/generated_resources_tr.xtb
+++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -1276,7 +1276,6 @@
 <translation id="2191754378957563929">Açık</translation>
 <translation id="2192505247865591433">Nereden:</translation>
 <translation id="2193365732679659387">Güven ayarları</translation>
-<translation id="2194554416429452547">Chrome, denemeler sırasında spam, sahtekarlık ve siteler arası paylaşımı kısıtlamanın yollarını arar. Chrome ayrıca sitelerin size reklam göstermek için kullanabileceği <ph name="ESTIMATE_INTERESTS_LINK" />. İlgi alanlarınızı ayarlardan yönetebilirsiniz.</translation>
 <translation id="2194856509914051091">Dikkate alınması gereken noktalar</translation>
 <translation id="2195331105963583686">Bundan sonra <ph name="DEVICE_TYPE" /> cihazını hâlâ kullanabileceksiniz ancak cihaz artık otomatik yazılım ve güvenlik güncellemelerini almayacak</translation>
 <translation id="2195729137168608510">E-posta Koruması</translation>
@@ -1951,7 +1950,6 @@
 <translation id="2806891468525657116">Kısayol zaten mevcut</translation>
 <translation id="2807517655263062534">İndirdiğiniz dosyalar burada görünür</translation>
 <translation id="2809586584051668049">ve diğer <ph name="NUMBER_ADDITIONAL_DISABLED" /> öğe</translation>
-<translation id="2810235462964014915"><ph name="SITE_NAME" /> sitesini okuyup değiştirmeyi istedi</translation>
 <translation id="2811205483104563968">Hesaplar</translation>
 <translation id="2811564570599779918">Spam ve sahtekarlık azaltma</translation>
 <translation id="2812049959647166806">Thunderbolt desteklenmiyor</translation>
@@ -5266,6 +5264,7 @@
 <translation id="6086846494333236931">Yöneticiniz tarafından yüklendi</translation>
 <translation id="6087746524533454243">Tarayıcı bilgisi sayfasını mı arıyorsunuz? Şu adresi ziyaret edin:</translation>
 <translation id="6087960857463881712">Çok beğenen</translation>
+<translation id="6088535503330933227">Chrome; reklam spam'i, sahtekarlık ve siteler arası paylaşımı kısıtlamanın yollarını arar. Chrome ayrıca sitelerin size reklam göstermek için kullanabileceği <ph name="ESTIMATE_INTERESTS_LINK" />. İlgi alanlarınızı ayarlardan yönetebilirsiniz.</translation>
 <translation id="608912389580139775">Bu sayfayı okuma listenize eklemek için Yer İşareti simgesini tıklayın</translation>
 <translation id="6091761513005122595">Paylaşım başarıyla eklendi.</translation>
 <translation id="6093888419484831006">Güncelleme iptal ediliyor...</translation>
@@ -7670,6 +7669,7 @@
 <translation id="8438566539970814960">Aramaları ve göz atmayı daha iyi yap</translation>
 <translation id="8439506636278576865">Bu dildeki sayfaları çevirmeyi öner</translation>
 <translation id="8440630305826533614">Linux uygulamaları</translation>
+<translation id="844063558976952706">Bu sitede her zaman</translation>
 <translation id="8443795068008423036">Lütfen cihazınızın güncel olduğundan emin olup tekrar deneyin</translation>
 <translation id="8446884382197647889">Daha Fazla Bilgi Edinin</translation>
 <translation id="8447409163267621480">Ctrl veya Alt tuşunu ekleyin</translation>
diff --git a/chrome/app/resources/generated_resources_uk.xtb b/chrome/app/resources/generated_resources_uk.xtb
index 4617fbce..5c24bf4 100644
--- a/chrome/app/resources/generated_resources_uk.xtb
+++ b/chrome/app/resources/generated_resources_uk.xtb
@@ -1292,7 +1292,6 @@
 <translation id="2191754378957563929">Увімкнено</translation>
 <translation id="2192505247865591433">Від:</translation>
 <translation id="2193365732679659387">Налаштування довіри</translation>
-<translation id="2194554416429452547">Під час пробних періодів Chrome досліджує способи протидіяти спаму й шахрайству, а також обмежити обмін даними між сайтами. Chrome також <ph name="ESTIMATE_INTERESTS_LINK" />, які можуть використовувати інші сайти для показу оголошень. Ви можете керувати своїми інтересами в налаштуваннях.</translation>
 <translation id="2194856509914051091">Що варто врахувати</translation>
 <translation id="2195331105963583686">Після цього ви й надалі зможете користуватися пристроєм <ph name="DEVICE_TYPE" />, але він не буде отримувати автоматичні оновлення програмного забезпечення й системи безпеки</translation>
 <translation id="2195729137168608510">Захист електронної пошти</translation>
@@ -1971,7 +1970,6 @@
 <translation id="2806891468525657116">Ярлик уже є</translation>
 <translation id="2807517655263062534">Тут відображаються завантажені файли</translation>
 <translation id="2809586584051668049">і ще <ph name="NUMBER_ADDITIONAL_DISABLED" /></translation>
-<translation id="2810235462964014915">Надіслано запит на читання та зберігання для такого сайту: <ph name="SITE_NAME" /></translation>
 <translation id="2811205483104563968">Облікові записи</translation>
 <translation id="2811564570599779918">Боротьба зі спамом і шахрайством</translation>
 <translation id="2812049959647166806">Thunderbolt не підтримується</translation>
@@ -5283,6 +5281,7 @@
 <translation id="6086846494333236931">Установив адміністратор</translation>
 <translation id="6087746524533454243">Шукаєте сторінку з інформацією про веб-переглядач? Перейдіть на сторінку</translation>
 <translation id="6087960857463881712">Гарне обличчя</translation>
+<translation id="6088535503330933227">Chrome шукає способи протидіяти рекламному спаму й шахрайству, а також обмежити обмін даними між сайтами. Chrome також <ph name="ESTIMATE_INTERESTS_LINK" />, які можуть використовувати інші сайти для показу оголошень. Ви можете керувати своїми інтересами в налаштуваннях.</translation>
 <translation id="608912389580139775">Щоб додати цю сторінку в список читання, натисніть значок закладки</translation>
 <translation id="6091761513005122595">Спільний доступ надано.</translation>
 <translation id="6093888419484831006">Скасування оновлення...</translation>
@@ -7698,6 +7697,7 @@
 <translation id="8438566539970814960">Покращувати пошук і веб-перегляд</translation>
 <translation id="8439506636278576865">Пропонувати переклад сторінок цією мовою</translation>
 <translation id="8440630305826533614">Додатки Linux</translation>
+<translation id="844063558976952706">Завжди на цьому сайті</translation>
 <translation id="8443795068008423036">Переконайтеся, що пристрій оновлений, і повторіть спробу</translation>
 <translation id="8446884382197647889">Докладніше</translation>
 <translation id="8447409163267621480">Натискайте Ctrl або Alt</translation>
diff --git a/chrome/app/resources/generated_resources_ur.xtb b/chrome/app/resources/generated_resources_ur.xtb
index 3a242dad..6bc2d87 100644
--- a/chrome/app/resources/generated_resources_ur.xtb
+++ b/chrome/app/resources/generated_resources_ur.xtb
@@ -1278,7 +1278,6 @@
 <translation id="2191754378957563929">آن</translation>
 <translation id="2192505247865591433">منجانب:</translation>
 <translation id="2193365732679659387">ٹرسٹ کی ترتیبات</translation>
-<translation id="2194554416429452547">‏ٹرائلز کے دوران، Chrome سپام، دھوکہ اور سائٹس کے درمیان اشتراک کو محدود کرنے کے طریقے دریافت کر رہا ہے۔ Chrome <ph name="ESTIMATE_INTERESTS_LINK" /> کرتا ہے جو سائٹس آپ کو اشتہارات دکھانے کے لیے استعمال کر سکتی ہیں۔ آپ ترتیبات میں اپنی دلچسپیوں کا نظم کر سکتے ہیں۔</translation>
 <translation id="2194856509914051091">قابل غور چیزیں</translation>
 <translation id="2195331105963583686">اس وقت کے بعد، آپ اب بھی اس <ph name="DEVICE_TYPE" /> کا استعمال کر سکیں گے، لیکن اب اسے خودکار سافٹ ویئر اور سیکیورٹی اپ ڈیٹس حاصل نہیں ہوں گی</translation>
 <translation id="2195729137168608510">ای میل کا تحفظ</translation>
@@ -1955,7 +1954,6 @@
 <translation id="2806891468525657116">شارٹ کٹ پہلے سے موجود ہے</translation>
 <translation id="2807517655263062534">آپ کی ڈاؤن لوڈ کردہ فائلز یہاں ظاہر ہوتی ہیں</translation>
 <translation id="2809586584051668049">اور <ph name="NUMBER_ADDITIONAL_DISABLED" /> مزید</translation>
-<translation id="2810235462964014915"><ph name="SITE_NAME" /> پڑھنے اور تبدیل کرنے کی درخواست کی گئی</translation>
 <translation id="2811205483104563968">اکاؤنٹس</translation>
 <translation id="2811564570599779918">اسپام اور دھوکہ دہی میں تخفیف</translation>
 <translation id="2812049959647166806">‏Thunderbolt تعاون یافتہ نہیں ہے</translation>
@@ -5268,6 +5266,7 @@
 <translation id="6086846494333236931">آپ کے منتظم نے انسٹال کیا ہے</translation>
 <translation id="6087746524533454243">براؤزر کے تعارف کا صفحہ تلاش کر رہے ہیں؟ ملاحظہ کریں</translation>
 <translation id="6087960857463881712">زبردست چہرہ</translation>
+<translation id="6088535503330933227">‏Chrome اشتہار سے متعلق اسپام، دھوکہ اور سائٹس کے درمیان اشتراک کو محدود کرنے کے طریقے دریافت کر رہا ہے۔ Chrome <ph name="ESTIMATE_INTERESTS_LINK" /> بھی کرتا ہے جو سائٹس آپ کو اشتہارات دکھانے کے لیے استعمال کر سکتی ہیں۔ آپ ترتیبات میں اپنی دلچسپیوں کا نظم کر سکتے ہیں۔</translation>
 <translation id="608912389580139775">اس صفحے کو اپنی پڑھنے کی فہرست میں شامل کرنے کیلئے بُک مارک آئیکن پر کلک کریں</translation>
 <translation id="6091761513005122595">اشتراک کو کامیابی کے ساتھ ماؤنٹ کر دیا گیا۔</translation>
 <translation id="6093888419484831006">اپ ڈیٹ منسوخ کیا جا رہا ہے…</translation>
diff --git a/chrome/app/resources/generated_resources_uz.xtb b/chrome/app/resources/generated_resources_uz.xtb
index 9529dc81..c2ec825 100644
--- a/chrome/app/resources/generated_resources_uz.xtb
+++ b/chrome/app/resources/generated_resources_uz.xtb
@@ -1284,7 +1284,6 @@
 <translation id="2191754378957563929">Yoniq</translation>
 <translation id="2192505247865591433">Qayerdan:</translation>
 <translation id="2193365732679659387">Ishonch sozlamalari</translation>
-<translation id="2194554416429452547">Sinov davrida Chrome spam, firibgarlik va saytlararo fayl almashinuviga qarshi kurash usullarini oʻrganadi. Shuningdek, Chrome sizga reklama chiqaradigan saytlarda <ph name="ESTIMATE_INTERESTS_LINK" />. Qiziqishlarni sozlamalr orqali boshqarish mumkin.</translation>
 <translation id="2194856509914051091">Bularni hisobga olish kerak</translation>
 <translation id="2195331105963583686">Bundan keyin ham <ph name="DEVICE_TYPE" /> qurilmasidan foydalanish mumkin, faqatgina uning dasturlari va xavfsizlik sozlamalari avtomatik yangilanmaydi</translation>
 <translation id="2195729137168608510">Elektron pochta himoyasi</translation>
@@ -1968,7 +1967,6 @@
 <translation id="2806891468525657116">Bunday tezkor tugma mavjud</translation>
 <translation id="2807517655263062534">Yuklab olingan fayllar shu yerda turadi</translation>
 <translation id="2809586584051668049">shuningdek, <ph name="NUMBER_ADDITIONAL_DISABLED" /></translation>
-<translation id="2810235462964014915"><ph name="SITE_NAME" /> maʼlumotlarini oʻqish va oʻzgartirish soʻraldi</translation>
 <translation id="2811205483104563968">Hisoblar</translation>
 <translation id="2811564570599779918">Spam va firibgarlikka qarshi kurash</translation>
 <translation id="2812049959647166806">Thunderbolt qoʻllab-quvvatlanmaydi</translation>
@@ -5298,6 +5296,7 @@
 <translation id="6086846494333236931">Administratoringiz tomonidan o‘rnatilgan</translation>
 <translation id="6087746524533454243">Brauzer haqida sahifasini qidiryapsizmi? Bu sahifaga kiring</translation>
 <translation id="6087960857463881712">Hayratdagi yuz</translation>
+<translation id="6088535503330933227">Chrome spam, firibgarlik va saytlararo fayl almashinuviga qarshi kurash usullarini oʻrganadi. Shuningdek, Chrome sizga reklama chiqaradigan saytlarda <ph name="ESTIMATE_INTERESTS_LINK" />. Qiziqishlarni sozlamalr orqali boshqarish mumkin.</translation>
 <translation id="608912389580139775">Bu sahifani Saqlangan sahifalarga kiritish uchun Bukmark belgisini bosing</translation>
 <translation id="6091761513005122595">Umumiy ruxsat berildi.</translation>
 <translation id="6093888419484831006">Yangilash bekor qilinmoqda...</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb
index d4251a9..ee079789 100644
--- a/chrome/app/resources/generated_resources_vi.xtb
+++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -1296,7 +1296,6 @@
 <translation id="2191754378957563929">Đang bật</translation>
 <translation id="2192505247865591433">Từ:</translation>
 <translation id="2193365732679659387">Cài đặt tin cậy</translation>
-<translation id="2194554416429452547">Trong khi thử nghiệm, Chrome vẫn tiếp tục cải tiến các phương pháp để hạn chế thư rác, hành vi gian lận và hoạt động chia sẻ giữa các trang. Chrome cũng <ph name="ESTIMATE_INTERESTS_LINK" /> mà các trang web có thể sử dụng để hiện quảng cáo cho bạn. Bạn có thể quản lý những gì bạn quan tâm trong phần cài đặt.</translation>
 <translation id="2194856509914051091">Những yếu tố cần xem xét</translation>
 <translation id="2195331105963583686">Bạn vẫn có thể sử dụng <ph name="DEVICE_TYPE" /> này sau thời gian đó, nhưng thiết bị sẽ không nhận được các bản cập nhật bảo mật và phần mềm tự động nữa</translation>
 <translation id="2195729137168608510">Bảo vệ Email</translation>
@@ -1980,7 +1979,6 @@
 <translation id="2806891468525657116">Lối tắt đã tồn tại</translation>
 <translation id="2807517655263062534">Các tệp bạn tải xuống sẽ xuất hiện ở đây</translation>
 <translation id="2809586584051668049">và <ph name="NUMBER_ADDITIONAL_DISABLED" /> mục khác</translation>
-<translation id="2810235462964014915">Đã yêu cầu đọc và thay đổi <ph name="SITE_NAME" /></translation>
 <translation id="2811205483104563968">Tài khoản</translation>
 <translation id="2811564570599779918">Giảm nội dung rác và lừa đảo</translation>
 <translation id="2812049959647166806">Không hỗ trợ Thunderbolt</translation>
@@ -5308,6 +5306,7 @@
 <translation id="6086846494333236931">Do quản trị viên của bạn cài đặt</translation>
 <translation id="6087746524533454243">Bạn đang tìm trình duyệt giới thiệu trang? Hãy truy cập</translation>
 <translation id="6087960857463881712">Khuôn mặt vui nhộn</translation>
+<translation id="6088535503330933227">Chrome đang nghiên cứu các phương pháp hạn chế quảng cáo không liên quan, hành vi gian lận và hoạt động chia sẻ giữa các trang web. Chrome cũng <ph name="ESTIMATE_INTERESTS_LINK" /> mà các trang web có thể sử dụng để hiện quảng cáo cho bạn. Bạn có thể vào phần cài đặt để quản lý các mối quan tâm của mình.</translation>
 <translation id="608912389580139775">Để thêm trang này vào danh sách đọc, hãy nhấp vào biểu tượng Dấu trang</translation>
 <translation id="6091761513005122595">Đã kết nối thành công với thư mục chia sẻ.</translation>
 <translation id="6093888419484831006">Đang hủy cập nhật...</translation>
@@ -7724,6 +7723,7 @@
 <translation id="8438566539970814960">Cải thiện tính năng tìm kiếm và duyệt web</translation>
 <translation id="8439506636278576865">Đề xuất dịch trang bằng ngôn ngữ này</translation>
 <translation id="8440630305826533614">Ứng dụng Linux</translation>
+<translation id="844063558976952706">Luôn sẵn có trên trang web này</translation>
 <translation id="8443795068008423036">Vui lòng đảm bảo rằng thiết bị của bạn đã được cập nhật rồi thử lại</translation>
 <translation id="8446884382197647889">Tìm hiểu thêm</translation>
 <translation id="8447409163267621480">Bao gồm phím Ctrl hoặc phím Alt</translation>
diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb
index 573249a..c4b1bee2 100644
--- a/chrome/app/resources/generated_resources_zh-CN.xtb
+++ b/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -1270,7 +1270,6 @@
 <translation id="2191754378957563929">已开启</translation>
 <translation id="2192505247865591433">来源:</translation>
 <translation id="2193365732679659387">信任设置</translation>
-<translation id="2194554416429452547">在试用版阶段,Chrome 会探索各种方式来限制网络垃圾、欺诈行为以及网站间共享。Chrome 还会<ph name="ESTIMATE_INTERESTS_LINK" />以供网站用于向您展示广告。您可在设置中管理自己的兴趣。</translation>
 <translation id="2194856509914051091">注意事项</translation>
 <translation id="2195331105963583686">在此之后,您仍能使用此 <ph name="DEVICE_TYPE" />,但它将无法继续自动完成软件更新和安全更新</translation>
 <translation id="2195729137168608510">电子邮件保护</translation>
@@ -1945,7 +1944,6 @@
 <translation id="2806891468525657116">快捷方式已存在</translation>
 <translation id="2807517655263062534">您下载的文件会显示在此处</translation>
 <translation id="2809586584051668049">及另外<ph name="NUMBER_ADDITIONAL_DISABLED" />个扩展程序</translation>
-<translation id="2810235462964014915">已请求读取和更改“<ph name="SITE_NAME" />”</translation>
 <translation id="2811205483104563968">帐号</translation>
 <translation id="2811564570599779918">垃圾内容和欺诈行为削减</translation>
 <translation id="2812049959647166806">Thunderbolt 不受支持</translation>
@@ -5253,6 +5251,7 @@
 <translation id="6086846494333236931">这是您的管理员安装的</translation>
 <translation id="6087746524533454243">想要查看浏览器简介页面?请访问</translation>
 <translation id="6087960857463881712">酷炫表情</translation>
+<translation id="6088535503330933227">Chrome 会探索各种方式来限制垃圾广告、欺诈行为以及网站间共享。Chrome 还会<ph name="ESTIMATE_INTERESTS_LINK" />以供网站用于向您展示广告。您可在设置中管理自己的兴趣。</translation>
 <translation id="608912389580139775">若要将此网页添加到您的阅读清单中,请点击“书签”图标</translation>
 <translation id="6091761513005122595">已成功装载共享资源。</translation>
 <translation id="6093888419484831006">正在取消更新...</translation>
@@ -5877,6 +5876,7 @@
 <translation id="6709133671862442373">资讯</translation>
 <translation id="6709357832553498500">使用“<ph name="EXTENSIONNAME" />”连接</translation>
 <translation id="6710213216561001401">上一项</translation>
+<translation id="6710394144992407503">在网页上输入文字时检查是否有拼写错误</translation>
 <translation id="6711146141291425900">关联“<ph name="WEB_DRIVE" />”帐号以保存下载内容</translation>
 <translation id="6712943853047024245">您已经保存过此用户名在 <ph name="WEBSITE" /> 的密码</translation>
 <translation id="6713233729292711163">添加工作资料</translation>
@@ -6495,6 +6495,7 @@
 <translation id="7340757554212515731">自动向 Google 发送崩溃报告以及诊断数据和使用情况数据</translation>
 <translation id="7341834142292923918">想要访问此网站</translation>
 <translation id="7343372807593926528">请先阐明问题,然后再发送反馈。</translation>
+<translation id="7344585835349671209">管理您设备上的 HTTPS/SSL 证书</translation>
 <translation id="7345706641791090287">确认您的密码</translation>
 <translation id="7346909386216857016">知道了</translation>
 <translation id="7347452120014970266">此操作会清除 <ph name="ORIGIN_NAME" /> 及其安装的应用存储的所有数据和 Cookie</translation>
@@ -6624,6 +6625,7 @@
 <translation id="7460045493116006516">您已安装的当前主题背景</translation>
 <translation id="7461924472993315131">固定</translation>
 <translation id="746216226901520237">下次,您只需使用手机就能解锁您的 <ph name="DEVICE_TYPE" /> 了。您可在“设置”中关闭 Smart Lock。</translation>
+<translation id="7464153996453281700">组件已是最新版本</translation>
 <translation id="7464637891177137294">将密码保存在您的 Google 帐号 (<ph name="ACCOUNT" />) 中</translation>
 <translation id="7465522323587461835">{NUM_OPEN_TABS,plural, =1{共有 # 个打开的标签页,按一下此按钮即可显示/隐藏标签栏}other{共有 # 个打开的标签页,按一下此按钮即可显示/隐藏标签栏}}</translation>
 <translation id="7465635034594602553">出了点问题。请在几分钟后重新运行 <ph name="APP_NAME" />。</translation>
@@ -7131,6 +7133,7 @@
 <translation id="793531125873261495">下载虚拟机时出错。请重试。</translation>
 <translation id="7935451262452051102">已完成 <ph name="PERCENT" />%</translation>
 <translation id="7939062555109487992">高级选项</translation>
+<translation id="7939328347457537652">管理设备证书</translation>
 <translation id="7939412583708276221">仍然保留</translation>
 <translation id="7942349550061667556">红色</translation>
 <translation id="7943368935008348579">下载 PDF 文件</translation>
@@ -7657,6 +7660,7 @@
 <translation id="8438566539970814960">改善搜索和浏览体验</translation>
 <translation id="8439506636278576865">询问是否翻译此语言的网页</translation>
 <translation id="8440630305826533614">Linux 应用</translation>
+<translation id="844063558976952706">始终在该网站上</translation>
 <translation id="8443795068008423036">请确保您的设备已更新到最新版本,然后重试</translation>
 <translation id="8446884382197647889">了解详情</translation>
 <translation id="8447409163267621480">必须以 Ctrl 键或 Alt 键开头</translation>
diff --git a/chrome/app/resources/generated_resources_zh-HK.xtb b/chrome/app/resources/generated_resources_zh-HK.xtb
index 9bbcf3d..e602c51 100644
--- a/chrome/app/resources/generated_resources_zh-HK.xtb
+++ b/chrome/app/resources/generated_resources_zh-HK.xtb
@@ -1290,7 +1290,6 @@
 <translation id="2191754378957563929">開啟</translation>
 <translation id="2192505247865591433">來自:</translation>
 <translation id="2193365732679659387">信任設定</translation>
-<translation id="2194554416429452547">在試用期間,Chrome 會研究如何防範垃圾郵件和欺詐行為,以及限制網站之間分享資訊的方法。Chrome 亦會<ph name="ESTIMATE_INTERESTS_LINK" />,並讓網站使用這些興趣來向您展示廣告。您可在設定中管理興趣。</translation>
 <translation id="2194856509914051091">考慮因素</translation>
 <translation id="2195331105963583686">您仍可在該時間點後使用此 <ph name="DEVICE_TYPE" />,但屆時此裝置將無法自動取得軟件和安全性更新</translation>
 <translation id="2195729137168608510">電郵保護</translation>
@@ -1969,7 +1968,6 @@
 <translation id="2806891468525657116">捷徑已存在</translation>
 <translation id="2807517655263062534">您下載的檔案會在這裡顯示</translation>
 <translation id="2809586584051668049">和另外 <ph name="NUMBER_ADDITIONAL_DISABLED" /> 個</translation>
-<translation id="2810235462964014915">已要求讀取並變更 <ph name="SITE_NAME" /></translation>
 <translation id="2811205483104563968">帳戶</translation>
 <translation id="2811564570599779918">減少垃圾內容和欺詐行為</translation>
 <translation id="2812049959647166806">系統不支援 Thunderbolt</translation>
@@ -5283,6 +5281,7 @@
 <translation id="6086846494333236931">已由管理員安裝</translation>
 <translation id="6087746524533454243">要查看瀏覽器的「關於」頁面嗎?請前往</translation>
 <translation id="6087960857463881712">開懷大笑</translation>
+<translation id="6088535503330933227">Chrome 正在研究如何防範垃圾廣告和欺詐行為,以及限制網站之間分享資訊的方法。Chrome 亦會<ph name="ESTIMATE_INTERESTS_LINK" />,並讓網站使用這些興趣來向您展示廣告。您可在設定中管理興趣。</translation>
 <translation id="608912389580139775">如要將網頁加入您的閱讀清單,請按一下「書籤」圖示</translation>
 <translation id="6091761513005122595">已成功連接共用裝置。</translation>
 <translation id="6093888419484831006">正在取消更新…</translation>
@@ -7696,6 +7695,7 @@
 <translation id="8438566539970814960">改善搜尋和瀏覽體驗</translation>
 <translation id="8439506636278576865">翻譯這個語言的網頁</translation>
 <translation id="8440630305826533614">Linux 應用程式</translation>
+<translation id="844063558976952706">永遠在這個網站上使用</translation>
 <translation id="8443795068008423036">請確保裝置為最新版本,然後再試一次</translation>
 <translation id="8446884382197647889">瞭解詳情</translation>
 <translation id="8447409163267621480">必須以 Ctrl 或 Alt 鍵開頭</translation>
diff --git a/chrome/app/resources/generated_resources_zh-TW.xtb b/chrome/app/resources/generated_resources_zh-TW.xtb
index d64ea879..ffc579b 100644
--- a/chrome/app/resources/generated_resources_zh-TW.xtb
+++ b/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -1278,7 +1278,6 @@
 <translation id="2191754378957563929">開啟</translation>
 <translation id="2192505247865591433">來源:</translation>
 <translation id="2193365732679659387">信任設定</translation>
-<translation id="2194554416429452547">在試用期間,Chrome 會探索如何防範垃圾內容和詐欺行為,以及限制網站之間分享資訊的方法。Chrome 還會<ph name="ESTIMATE_INTERESTS_LINK" />,讓網站可以使用這項資訊向你顯示廣告。你可以前往設定管理自己的興趣喜好。</translation>
 <translation id="2194856509914051091">注意事項</translation>
 <translation id="2195331105963583686">你仍然可以在該時間點之後使用這部 <ph name="DEVICE_TYPE" />,但屆時這部裝置將無法自動取得軟體和安全性更新</translation>
 <translation id="2195729137168608510">電子郵件保護</translation>
@@ -1954,7 +1953,6 @@
 <translation id="2806891468525657116">捷徑已經存在</translation>
 <translation id="2807517655263062534">你下載的檔案會顯示在這裡</translation>
 <translation id="2809586584051668049">和另外 <ph name="NUMBER_ADDITIONAL_DISABLED" /> 個</translation>
-<translation id="2810235462964014915">要求讀取及變更 <ph name="SITE_NAME" /></translation>
 <translation id="2811205483104563968">帳戶</translation>
 <translation id="2811564570599779918">減少垃圾內容和詐欺情形</translation>
 <translation id="2812049959647166806">系統不支援 Thunderbolt</translation>
@@ -5266,6 +5264,7 @@
 <translation id="6086846494333236931">由您的管理員安裝</translation>
 <translation id="6087746524533454243">要查看瀏覽器的「關於」頁面嗎?請前往</translation>
 <translation id="6087960857463881712">好看的臉蛋</translation>
+<translation id="6088535503330933227">Chrome 會探索如何防範垃圾內容和詐欺行為,以及限制網站之間分享資訊的方法。Chrome 還會<ph name="ESTIMATE_INTERESTS_LINK" />,讓網站可以使用這項資訊向你顯示廣告。你可以前往設定管理自己的興趣喜好。</translation>
 <translation id="608912389580139775">如要將這個網頁加入閱讀清單,請按一下「書籤」圖示</translation>
 <translation id="6091761513005122595">已成功共用掛接的裝置。</translation>
 <translation id="6093888419484831006">正在取消更新...</translation>
@@ -7678,6 +7677,7 @@
 <translation id="8438566539970814960">改善搜尋和瀏覽體驗</translation>
 <translation id="8439506636278576865">翻譯這個語言的網頁</translation>
 <translation id="8440630305826533614">Linux 應用程式</translation>
+<translation id="844063558976952706">永遠在這個網站上使用</translation>
 <translation id="8443795068008423036">確認裝置為最新版本,然後再試一次</translation>
 <translation id="8446884382197647889">瞭解詳情</translation>
 <translation id="8447409163267621480">必須包含 Ctrl 或 Alt 鍵</translation>
diff --git a/chrome/app/resources/generated_resources_zu.xtb b/chrome/app/resources/generated_resources_zu.xtb
index 5722eaa..bea2f69 100644
--- a/chrome/app/resources/generated_resources_zu.xtb
+++ b/chrome/app/resources/generated_resources_zu.xtb
@@ -1289,7 +1289,6 @@
 <translation id="2191754378957563929">Vuliwe</translation>
 <translation id="2192505247865591433">Kusuka ku-:</translation>
 <translation id="2193365732679659387">Themba izilungiselelo</translation>
-<translation id="2194554416429452547">Ngesikhathi sokuzama, i-Chrome ihlola izindlela zokukhawulela ugaxekile, ukukhwabanisa, nokwabelana phakathi kwamasayithi. I-Chrome nayo <ph name="ESTIMATE_INTERESTS_LINK" /> ukuthi amasayithi angasebenza ukukubonisa izikhangiso. Ungaphatha ongaba nentshisekelo kukho kumasethingi.</translation>
 <translation id="2194856509914051091">Izinto okufanele uzicabangele</translation>
 <translation id="2195331105963583686">Usazokwazi ukusebenzisa le <ph name="DEVICE_TYPE" /> ngemuva kwaleso sikhathi, kodwa ngeke isathola isofthiwe ezenzakalelayo nezibuyekezo zokuvikelwa</translation>
 <translation id="2195729137168608510">Ukuvikelwa kwe-imeyili</translation>
@@ -1969,7 +1968,6 @@
 <translation id="2806891468525657116">Isinqamuleli sesivele sikhona</translation>
 <translation id="2807517655263062534">Amafayela owalandayo azovela lapha</translation>
 <translation id="2809586584051668049">nokuningi okungu-<ph name="NUMBER_ADDITIONAL_DISABLED" /></translation>
-<translation id="2810235462964014915">Kucele ukufunda nokushintsha i-<ph name="SITE_NAME" /></translation>
 <translation id="2811205483104563968">Ama-akhawunti</translation>
 <translation id="2811564570599779918">Ukwehliswa kogaxekile nokukhwabanisa</translation>
 <translation id="2812049959647166806">I-thunderbolt ayisekelwe</translation>
@@ -5286,6 +5284,7 @@
 <translation id="6086846494333236931">Kufakwe umqondisi wakho</translation>
 <translation id="6087746524533454243">Ufuna ikhasi elimayelana ne-browser? Vakashela</translation>
 <translation id="6087960857463881712">Ubuso obuhle</translation>
+<translation id="6088535503330933227">I-Chrome ihlola izindlela zokukhawulela ogaxekile besikhangiso, ukukhwabanisa, nokwabelana phakathi kwamasayithi. I-Chrome iphinde yenze i-<ph name="ESTIMATE_INTERESTS_LINK" /> engasetshenziswa amasayithi ukukubonisa izikhangiso. Ungaphatha ongaba nentshisekelo kukho kumasethingi.</translation>
 <translation id="608912389580139775">Ukwengeza leli khasi kuhlu lwakho lokufunda, chofoza isithonjana sebhukhimakhi</translation>
 <translation id="6091761513005122595">Yabelana ngokukhweziwe ngempumelelo.</translation>
 <translation id="6093888419484831006">Ikhansela isibuyekezo...</translation>
diff --git a/chrome/app/resources/google_chrome_strings_am.xtb b/chrome/app/resources/google_chrome_strings_am.xtb
index 2e1575f..1ee850b7 100644
--- a/chrome/app/resources/google_chrome_strings_am.xtb
+++ b/chrome/app/resources/google_chrome_strings_am.xtb
@@ -68,6 +68,7 @@
 <translation id="2139300032719313227">ChromeOSን ዳግም አስጀምር</translation>
 <translation id="2151406531797534936">እባክዎ Chrome ን አሁን ዳግም ያስጀምሩ</translation>
 <translation id="2174917724755363426">መጫኑ አልተጠናቀቀም። እርግጠኛ ነዎት መሰረዝ ይፈልጋሉ?</translation>
+<translation id="223889379102603431">Chrome እንዴት የስር እውቅና ማረጋገጫዎቹን እንደሚያስተዳድር ላይ መረጃ</translation>
 <translation id="2258103955319320201">በሁሉም መሣሪያዎችዎ ላይ የእርስዎን የChrome አሳሽ ነገሮች ለመድረስ ይግቡ፣ ከዚያ ስምረትን ያብሩ</translation>
 <translation id="2290014774651636340">የGoogle ኤ ፒ አይ ቁልፎች ይጎድላሉ። አንዳንድ የGoogle Chrome ተግባራት ይሰናከላሉ።</translation>
 <translation id="2290095356545025170">እርግጠኛ ነዎት Google Chromeን ማራገፍ ይፈልጋሉ?</translation>
@@ -353,6 +354,7 @@
 <translation id="8129812357326543296">ስለ &amp;Google Chrome</translation>
 <translation id="813913629614996137">በማስጀመር ላይ…</translation>
 <translation id="8255190535488645436">Google Chrome ካሜራዎን እና ማይክሮፎንዎን እየተጠቀመ ነው።</translation>
+<translation id="8270775718612349140">በChrome የሚተዳደሩ የእውቅና ማረጋገጫዎች</translation>
 <translation id="8286862437124483331">Google Chrome የይለፍ ቃሎችን ለማሳየት እየሞከረ ነው። ይህንን ለመፍቀድ የእርስዎን Windows የይለፍ ቃል ይተይቡ።</translation>
 <translation id="828798499196665338">የእርስዎ ወላጅ ለChrome «የጣቢያዎች፣ መተግበሪያዎች እና ቅጥያዎች ፈቃዶች»ን አጥፍተዋል። ይህን <ph name="EXTENSION_TYPE_PARAMETER" /> ማንቃት አይፈቀድም።</translation>
 <translation id="8290100596633877290">ኧረ ገዳይ! Google Chrome ተሰናክሏል። አሁን እንደገና ይጀመር?</translation>
diff --git a/chrome/app/resources/google_chrome_strings_be.xtb b/chrome/app/resources/google_chrome_strings_be.xtb
index cc2334c..dca5df3 100644
--- a/chrome/app/resources/google_chrome_strings_be.xtb
+++ b/chrome/app/resources/google_chrome_strings_be.xtb
@@ -68,6 +68,7 @@
 <translation id="2139300032719313227">Перазапусціце Chrome OS</translation>
 <translation id="2151406531797534936">Перазапусціце Chrome</translation>
 <translation id="2174917724755363426">Усталяванне не завершана. Вы сапраўды хочаце скасаваць яго?</translation>
+<translation id="223889379102603431">Інфармацыя пра тое, як Chrome кіруе сваімі каранёвымі сертыфікатамі</translation>
 <translation id="2258103955319320201">Каб мець доступ да даных Chrome на ўсіх сваіх прыладах, увайдзіце ва ўліковы запіс, а затым уключыце сінхранізацыю</translation>
 <translation id="2290014774651636340">Адсутнічаюць ключы Google API. Некаторыя функцыі Google Chrome будуць выключаны.</translation>
 <translation id="2290095356545025170">Сапраўды выдаліць Google Chrome?</translation>
@@ -353,6 +354,7 @@
 <translation id="8129812357326543296">Пра &amp;Google Chrome</translation>
 <translation id="813913629614996137">Ідзе ініцыялізацыя...</translation>
 <translation id="8255190535488645436">Google Chrome выкарыстоўвае вашу камеру і мікрафон.</translation>
+<translation id="8270775718612349140">Сертыфікаты, якімі кіруе Chrome</translation>
 <translation id="8286862437124483331">Google Chrome спрабуе паказаць паролі. Каб дазволіць гэта, увядзіце пароль Windows.</translation>
 <translation id="828798499196665338">Бацькі выключылі "Дазволы для сайтаў, праграм і пашырэнняў" для Chrome. Уключэнне гэтага элемента (<ph name="EXTENSION_TYPE_PARAMETER" />) забаронена.</translation>
 <translation id="8290100596633877290">Памылка! Збой браўзера Google Chrome. Перазапусціць яго?</translation>
diff --git a/chrome/app/resources/google_chrome_strings_de.xtb b/chrome/app/resources/google_chrome_strings_de.xtb
index 8adbb6c..b483205 100644
--- a/chrome/app/resources/google_chrome_strings_de.xtb
+++ b/chrome/app/resources/google_chrome_strings_de.xtb
@@ -65,6 +65,7 @@
 <translation id="2139300032719313227">Chrome OS neu starten</translation>
 <translation id="2151406531797534936">Starte Chrome jetzt neu</translation>
 <translation id="2174917724755363426">Die Installation wurde nicht abgeschlossen. Möchtest du den Vorgang wirklich abbrechen?</translation>
+<translation id="223889379102603431">Informationen zur Verwaltung von Root-Zertifikaten in Chrome</translation>
 <translation id="2258103955319320201">Wenn du auf allen deinen Geräten auf deine Chrome-Browserinhalte zugreifen möchtest, melde dich an und aktiviere die Synchronisierung</translation>
 <translation id="2290014774651636340">Google API-Schlüssel fehlen. Einige Funktionen von Google Chrome sind deaktiviert.</translation>
 <translation id="2290095356545025170">Möchtest du Google Chrome wirklich deinstallieren?</translation>
@@ -346,6 +347,7 @@
 <translation id="8129812357326543296">Über &amp;Google Chrome</translation>
 <translation id="813913629614996137">Initialisierung…</translation>
 <translation id="8255190535488645436">Google Chrome verwendet deine Kamera und dein Mikrofon.</translation>
+<translation id="8270775718612349140">Von Chrome verwaltete Zertifikate</translation>
 <translation id="8286862437124483331">Google Chrome möchte Passwörter anzeigen. Gib dein Windows-Passwort ein, um dies zuzulassen.</translation>
 <translation id="828798499196665338">Dein Elternteil hat "Berechtigungen für Websites, Apps und Erweiterungen" für Chrome deaktiviert. Das Aktivieren dieser <ph name="EXTENSION_TYPE_PARAMETER" /> ist nicht zulässig.</translation>
 <translation id="8290100596633877290">Google Chrome ist abgestürzt. Jetzt neu starten?</translation>
diff --git a/chrome/app/resources/google_chrome_strings_et.xtb b/chrome/app/resources/google_chrome_strings_et.xtb
index 202513d..9df5848 100644
--- a/chrome/app/resources/google_chrome_strings_et.xtb
+++ b/chrome/app/resources/google_chrome_strings_et.xtb
@@ -67,6 +67,7 @@
 <translation id="2139300032719313227">Taaskäivitage Chrome OS</translation>
 <translation id="2151406531797534936">Käivitage Chrome kohe uuesti</translation>
 <translation id="2174917724755363426">Installimine ei ole lõpetatud. Kas soovite kindlasti tühistada?</translation>
+<translation id="223889379102603431">Teave selle kohta, kuidas Chrome oma juursertifikaate haldab</translation>
 <translation id="2258103955319320201">Selleks et oma Chrome'i brauseri sisule kõigis oma seadmetes juurde pääseda, logige sisse ja lülitage siis sisse sünkroonimine</translation>
 <translation id="2290014774651636340">Google API võtmed on puudu. Google Chrome'i teatud funktsioonid keelatakse.</translation>
 <translation id="2290095356545025170">Olete kindel, et soovite Google Chrome'i desinstallida?</translation>
@@ -351,6 +352,7 @@
 <translation id="8129812357326543296">Teave &amp;Google Chrome'i kohta</translation>
 <translation id="813913629614996137">Lähtestamine …</translation>
 <translation id="8255190535488645436">Google Chrome kasutab kaamerat ja mikrofoni.</translation>
+<translation id="8270775718612349140">Chrome'i hallatavad sertifikaadid</translation>
 <translation id="8286862437124483331">Google Chrome proovib kuvada paroole. Selle lubamiseks sisestage Windowsi parool.</translation>
 <translation id="828798499196665338">Sinu vanem lülitas valiku „Saitide, rakenduste ja laienduste load” Chrome'i puhul välja. Laienduse <ph name="EXTENSION_TYPE_PARAMETER" /> lubamine on keelatud.</translation>
 <translation id="8290100596633877290">Tohoh! Google Chrome jooksis kokku. Kas soovite kohe taaskäivitada?</translation>
diff --git a/chrome/app/resources/google_chrome_strings_eu.xtb b/chrome/app/resources/google_chrome_strings_eu.xtb
index 759e739..65e9aed 100644
--- a/chrome/app/resources/google_chrome_strings_eu.xtb
+++ b/chrome/app/resources/google_chrome_strings_eu.xtb
@@ -69,6 +69,7 @@
 <translation id="2139300032719313227">Berrabiarazi Chrome OS</translation>
 <translation id="2151406531797534936">Berrabiarazi Chrome</translation>
 <translation id="2174917724755363426">Ez da osatu instalazioa. Ziur bertan behera utzi nahi duzula?</translation>
+<translation id="223889379102603431">Chrome-k erroko ziurtagiriak kudeatzeko moduari buruzko informazioa</translation>
 <translation id="2258103955319320201">Chrome arakatzaileko gauzak gailu guztietan atzitzeko, hasi saioa eta aktibatu sinkronizazioa</translation>
 <translation id="2290014774651636340">Google APIko gakoak falta dira. Agian Google Chrome-ren funtzio batzuk desgaituta egongo dira.</translation>
 <translation id="2290095356545025170">Ziur Google Chrome desinstalatu nahi duzula?</translation>
@@ -354,6 +355,7 @@
 <translation id="8129812357326543296">&amp;Google Chrome arakatzaileari buruz</translation>
 <translation id="813913629614996137">Hasieratzen…</translation>
 <translation id="8255190535488645436">Google Chrome zure mikrofonoa eta kamera erabiltzen ari da.</translation>
+<translation id="8270775718612349140">Chrome-k kudeatutako ziurtagiriak</translation>
 <translation id="8286862437124483331">Google Chrome pasahitzak erakusten saiatzen ari da. Hori baimentzeko, idatzi Windows pasahitza.</translation>
 <translation id="828798499196665338">Zure gurasoak "Webguneen, aplikazioen eta luzapenen baimenak" desaktibatu ditu Chrome-n. Ezin da gaitu <ph name="EXTENSION_TYPE_PARAMETER" />.</translation>
 <translation id="8290100596633877290">Google Chrome-k huts egin du. Berriro abiarazi nahi duzu?</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fi.xtb b/chrome/app/resources/google_chrome_strings_fi.xtb
index 1b0bbc4..2aca511 100644
--- a/chrome/app/resources/google_chrome_strings_fi.xtb
+++ b/chrome/app/resources/google_chrome_strings_fi.xtb
@@ -66,6 +66,7 @@
 <translation id="2139300032719313227">Käynnistä Chrome-käyttöjärjestelmä uudelleen</translation>
 <translation id="2151406531797534936">Käynnistä Chrome uudelleen nyt</translation>
 <translation id="2174917724755363426">Asennus ei ole valmis. Haluatko varmasti perua sen?</translation>
+<translation id="223889379102603431">Tietoa siitä, miten Chrome hallinnoi juurivarmenteitaan</translation>
 <translation id="2258103955319320201">Jos haluat pääsyn Chromen selainsisältöön kaikilla laitteilla, kirjaudu sisään ja laita sitten synkronointi päälle.</translation>
 <translation id="2290014774651636340">Googlen sovellusliittymän avaimet puuttuvat. Jotkin Google Chromen toiminnoista poistetaan käytöstä.</translation>
 <translation id="2290095356545025170">Haluatko varmasti poistaa Google Chromen?</translation>
@@ -348,6 +349,7 @@
 <translation id="8129812357326543296">Tietoja &amp;Google Chromesta</translation>
 <translation id="813913629614996137">Käynnistetään…</translation>
 <translation id="8255190535488645436">Google Chrome käyttää kameraasi ja mikrofoniasi.</translation>
+<translation id="8270775718612349140">Chromen hallinnoimat varmenteet</translation>
 <translation id="8286862437124483331">Google Chrome yrittää näyttää salasanoja. Salli tämä kirjoittamalla Windows-salasanasi.</translation>
 <translation id="828798499196665338">Vanhempasi ovat laittaneet Chromen sivustojen, sovellusten ja laajennusten käyttöluvat pois päältä. Käyttöönottoa (<ph name="EXTENSION_TYPE_PARAMETER" />) ei sallita.</translation>
 <translation id="8290100596633877290">Hups! Google Chrome kaatui. Käynnistetäänkö uudelleen?</translation>
diff --git a/chrome/app/resources/google_chrome_strings_gu.xtb b/chrome/app/resources/google_chrome_strings_gu.xtb
index 2a0c63f..9584be1 100644
--- a/chrome/app/resources/google_chrome_strings_gu.xtb
+++ b/chrome/app/resources/google_chrome_strings_gu.xtb
@@ -70,6 +70,7 @@
 <translation id="2139300032719313227">ChromeOS ફરી શરૂ કરો</translation>
 <translation id="2151406531797534936">કૃપા કરીને હવે Chrome ફરી શરૂ કરો</translation>
 <translation id="2174917724755363426">ઇન્સ્ટૉલેશનની પ્રક્રિયા પૂર્ણ થઈ નથી. શું તમે ખરેખર રદ કરવા માગો છો?</translation>
+<translation id="223889379102603431">Chrome તેના રૂટ પ્રમાણપત્રો કેવી રીતે મેનેજ કરે છે તે વિશેની માહિતી</translation>
 <translation id="2258103955319320201">Chrome બ્રાઉઝર પરની તમારી વસ્તુઓને તમારા બધા ડિવાઇસ પર ઍક્સેસ કરવા માટે, સાઇન ઇન કરો અને પછી સિંક કરવાની સુવિધા ચાલુ કરો</translation>
 <translation id="2290014774651636340">Google API કીઝ ખૂટે છે. Google Chrome ની કેટલીક કાર્યક્ષમતા અક્ષમ થશે.</translation>
 <translation id="2290095356545025170">શું તમને ખાતરી છે કે તમારે Google Chromeને અનઇન્સ્ટૉલ કરવું છે?</translation>
@@ -356,6 +357,7 @@
 <translation id="8129812357326543296">&amp;Google Chrome વિશે</translation>
 <translation id="813913629614996137">પ્રારંભ કરી રહ્યું છે...</translation>
 <translation id="8255190535488645436">Google Chrome તમારા કૅમેરા અને માઇક્રોફોનનો ઉપયોગ કરી રહ્યું છે.</translation>
+<translation id="8270775718612349140">Chrome દ્વારા મેનેજ કરાતા પ્રમાણપત્રો</translation>
 <translation id="8286862437124483331">Google Chrome પાસવર્ડ્સ બતાવવાનો પ્રયાસ કરી રહ્યું છે. આની મંજૂરી આપવા માટે તમારો Windows પાસવર્ડ લખો.</translation>
 <translation id="828798499196665338">તમારા માતાપિતાએ Chrome માટે "સાઇટ, ઍપ અને એક્સ્ટેન્શન માટેની પરવાનગીઓ" બંધ કરી છે. આ <ph name="EXTENSION_TYPE_PARAMETER" /> ચાલુ કરવાની મંજૂરી નથી.</translation>
 <translation id="8290100596633877290">ઓહ! Google Chrome ક્રેશ થઈ ગયું. હમણાં ફરીથી લોંચ કરીએ?</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ky.xtb b/chrome/app/resources/google_chrome_strings_ky.xtb
index 1a81fa4..dd1887b4 100644
--- a/chrome/app/resources/google_chrome_strings_ky.xtb
+++ b/chrome/app/resources/google_chrome_strings_ky.xtb
@@ -70,6 +70,7 @@
 <translation id="2139300032719313227">ChromeOS'ту өчүрүп-күйгүзүңүз</translation>
 <translation id="2151406531797534936">Chrome'ду азыр өчүрүп күйгүзүңүз</translation>
 <translation id="2174917724755363426">Орнотулган жок. Чын эле токтотосузбу?</translation>
+<translation id="223889379102603431">Chrome негизги тастыктамаларын кантип башкара тургандыгы жөнүндө маалымат</translation>
 <translation id="2258103955319320201">Chrome серепчисиндеги файлдарды бардык түзмөктөрүңүздө колдонуу үчүн аккаунтуңузга кирип, шайкештирүүнү күйгүзүңүз</translation>
 <translation id="2290014774651636340">Google API ачкычтары жок. Google Chrome'дун айрым функциялары өчүрүлөт.</translation>
 <translation id="2290095356545025170">Google Chrome'ду чын эле орнотуудан чыгаргыңыз келеби?</translation>
@@ -356,6 +357,7 @@
 <translation id="8129812357326543296">&amp;Google Chrome жөнүндө</translation>
 <translation id="813913629614996137">Баштапкы маанини берүүдө...</translation>
 <translation id="8255190535488645436">Google Chrome камераңыз менен микрофонуңузду колдонуп жатат.</translation>
+<translation id="8270775718612349140">Chrome башкарган тастыктамалар</translation>
 <translation id="8286862437124483331">Google Chrome сырсөздөрдү көрсөткөнгө аракет кылып жатат. Ага уруксат берүү үчүн Windows сырсөзүңүздү териңиз.</translation>
 <translation id="828798499196665338">Ата-энеңиз Chrome үчүн "Сайттарга, колдонмолорго жана кеңейтүүлөргө уруксаттарды" өчүрүп койгон. Бул <ph name="EXTENSION_TYPE_PARAMETER" /> кеңейтүүсүн иштетүүгө болбойт.</translation>
 <translation id="8290100596633877290">Мына с-с-сага! Google Chrome кыйрады. Кайра жүктөйлүбү эми?</translation>
diff --git a/chrome/app/resources/google_chrome_strings_mr.xtb b/chrome/app/resources/google_chrome_strings_mr.xtb
index bac0713..33b3742 100644
--- a/chrome/app/resources/google_chrome_strings_mr.xtb
+++ b/chrome/app/resources/google_chrome_strings_mr.xtb
@@ -69,6 +69,7 @@
 <translation id="2139300032719313227">ChromeOS रीस्टार्ट करा</translation>
 <translation id="2151406531797534936">कृपया आता Chrome रीस्टार्ट करा</translation>
 <translation id="2174917724755363426">इंस्टॉलेशन पूर्ण झाले नाही. तुम्हाला नक्की रद्द करायचे आहे का?</translation>
+<translation id="223889379102603431">Chrome त्याची रूट सर्टिफिकेट कशी व्यवस्थापित करते याबद्दल माहिती</translation>
 <translation id="2258103955319320201">तुमच्या Chrome ब्राउझरवरील आशय तुमच्या सर्व डिव्हाइसवर अ‍ॅक्सेस करण्यासाठी साइन इन करा, त्यानंतर सिंक सुरू करा</translation>
 <translation id="2290014774651636340">Google API की गहाळ आहेत. Google Chrome ची काही कार्यक्षमता अक्षम केली जाईल.</translation>
 <translation id="2290095356545025170">तुमची खात्री आहे की तुम्ही Google Chrome अनइंस्टॉल करू इच्छिता?</translation>
@@ -354,6 +355,7 @@
 <translation id="8129812357326543296">&amp;Google Chrome विषयी</translation>
 <translation id="813913629614996137">सुरू करत आहे…</translation>
 <translation id="8255190535488645436">Google Chrome तुमचा कॅमेरा आणि मायक्रोफोन वापरत आहे.</translation>
+<translation id="8270775718612349140">Chrome द्वारे व्यवस्थापित केलेली सर्टिफिकेट</translation>
 <translation id="8286862437124483331">Google Chrome पासवर्ड दर्शविण्‍याचा प्रयत्‍न करत आहे. यास अनुमती देण्‍यासाठी तुमचा Windows पासवर्ड टाइप करा.</translation>
 <translation id="828798499196665338">तुमच्या पालकांनी Chrome साठी "साइट, अ‍ॅप्स आणि एक्स्टेंशनकरिता परवानग्या" सुरू केल्या आहेत. हे <ph name="EXTENSION_TYPE_PARAMETER" /> सुरू करण्यास अनुमती नाही.</translation>
 <translation id="8290100596633877290">अरेरे! Google Chrome क्रॅश झाला. त्वरित पुन्हा लाँच करायचा?</translation>
diff --git a/chrome/app/resources/google_chrome_strings_pt-BR.xtb b/chrome/app/resources/google_chrome_strings_pt-BR.xtb
index a56f8d01..19f3210 100644
--- a/chrome/app/resources/google_chrome_strings_pt-BR.xtb
+++ b/chrome/app/resources/google_chrome_strings_pt-BR.xtb
@@ -66,6 +66,7 @@
 <translation id="2139300032719313227">Reiniciar o ChromeOS</translation>
 <translation id="2151406531797534936">Reinicie o Chrome agora</translation>
 <translation id="2174917724755363426">A instalação não foi concluída. Tem certeza de que quer cancelar?</translation>
+<translation id="223889379102603431">Informações sobre como o Chrome gerencia os certificados raiz dele</translation>
 <translation id="2258103955319320201">Para ter acesso aos recursos do navegador Chrome em todos os seus dispositivos, faça login e ative a sincronização</translation>
 <translation id="2290014774651636340">As chaves da API do Google não foram encontradas. Algumas funcionalidades do Google Chrome serão desativadas.</translation>
 <translation id="2290095356545025170">Você quer mesmo desinstalar o Google Chrome?</translation>
@@ -348,6 +349,7 @@
 <translation id="8129812357326543296">Sobre o Google Chrome</translation>
 <translation id="813913629614996137">Inicializando…</translation>
 <translation id="8255190535488645436">O Google Chrome está usando sua câmera e seu microfone.</translation>
+<translation id="8270775718612349140">Certificados gerenciados pelo Chrome</translation>
 <translation id="8286862437124483331">O Google Chrome está tentando mostrar senhas. Digite sua senha do Windows para permitir isso.</translation>
 <translation id="828798499196665338">Seu pai/mãe desativou "Permissões para sites, apps e extensões" no Chrome. Não é permitido ativar <ph name="EXTENSION_TYPE_PARAMETER" />.</translation>
 <translation id="8290100596633877290">Nossa! Houve uma falha no Google Chrome. Reiniciar agora?</translation>
diff --git a/chrome/app/resources/google_chrome_strings_zh-CN.xtb b/chrome/app/resources/google_chrome_strings_zh-CN.xtb
index f31bf5f6..4dd85be 100644
--- a/chrome/app/resources/google_chrome_strings_zh-CN.xtb
+++ b/chrome/app/resources/google_chrome_strings_zh-CN.xtb
@@ -64,6 +64,7 @@
 <translation id="2139300032719313227">重启 Chrome 操作系统</translation>
 <translation id="2151406531797534936">请立即重启 Chrome</translation>
 <translation id="2174917724755363426">尚未完成安装,确定要取消吗?</translation>
+<translation id="223889379102603431">与 Chrome 如何管理其根证书有关的信息</translation>
 <translation id="2258103955319320201">如需在您的所有设备上访问自己的 Chrome 浏览器信息,请登录您的帐号,然后开启同步功能</translation>
 <translation id="2290014774651636340">缺少 Google API 密钥,因此 Google Chrome 的部分功能将无法使用。</translation>
 <translation id="2290095356545025170">确定要卸载 Google Chrome 浏览器吗?</translation>
@@ -345,6 +346,7 @@
 <translation id="8129812357326543296">关于 Google Chrome(&amp;G)</translation>
 <translation id="813913629614996137">正在初始化…</translation>
 <translation id="8255190535488645436">Google Chrome 正在使用您的摄像头和麦克风。</translation>
+<translation id="8270775718612349140">由 Chrome 管理的证书</translation>
 <translation id="8286862437124483331">Google Chrome正在尝试显示密码,请输入您的Windows密码以允许此操作。</translation>
 <translation id="828798499196665338">您的家长已为 Chrome 停用“网站、应用和扩展程序的权限”。因此,您无法启用该<ph name="EXTENSION_TYPE_PARAMETER" />。</translation>
 <translation id="8290100596633877290">哎呀!Google Chrome 浏览器崩溃了。是否立即重新启动?</translation>
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index 7917ba2..2c108169 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -1271,55 +1271,6 @@
     "prefetch/prefetch_headers.h",
     "prefetch/prefetch_prefs.cc",
     "prefetch/prefetch_prefs.h",
-    "prefetch/prefetch_proxy/chrome_prefetch_service_delegate.cc",
-    "prefetch/prefetch_proxy/chrome_prefetch_service_delegate.h",
-    "prefetch/prefetch_proxy/chrome_speculation_host_delegate.cc",
-    "prefetch/prefetch_proxy/chrome_speculation_host_delegate.h",
-    "prefetch/prefetch_proxy/prefetch_container.cc",
-    "prefetch/prefetch_proxy/prefetch_container.h",
-    "prefetch/prefetch_proxy/prefetch_proxy_canary_checker.cc",
-    "prefetch/prefetch_proxy/prefetch_proxy_canary_checker.h",
-    "prefetch/prefetch_proxy/prefetch_proxy_cookie_listener.cc",
-    "prefetch/prefetch_proxy/prefetch_proxy_cookie_listener.h",
-    "prefetch/prefetch_proxy/prefetch_proxy_dns_prober.cc",
-    "prefetch/prefetch_proxy/prefetch_proxy_dns_prober.h",
-    "prefetch/prefetch_proxy/prefetch_proxy_features.cc",
-    "prefetch/prefetch_proxy/prefetch_proxy_features.h",
-    "prefetch/prefetch_proxy/prefetch_proxy_from_string_url_loader.cc",
-    "prefetch/prefetch_proxy/prefetch_proxy_from_string_url_loader.h",
-    "prefetch/prefetch_proxy/prefetch_proxy_network_context.cc",
-    "prefetch/prefetch_proxy/prefetch_proxy_network_context.h",
-    "prefetch/prefetch_proxy/prefetch_proxy_network_context_client.cc",
-    "prefetch/prefetch_proxy/prefetch_proxy_network_context_client.h",
-    "prefetch/prefetch_proxy/prefetch_proxy_origin_decider.cc",
-    "prefetch/prefetch_proxy/prefetch_proxy_origin_decider.h",
-    "prefetch/prefetch_proxy/prefetch_proxy_origin_prober.cc",
-    "prefetch/prefetch_proxy/prefetch_proxy_origin_prober.h",
-    "prefetch/prefetch_proxy/prefetch_proxy_params.cc",
-    "prefetch/prefetch_proxy/prefetch_proxy_params.h",
-    "prefetch/prefetch_proxy/prefetch_proxy_prefetch_metrics_collector.cc",
-    "prefetch/prefetch_proxy/prefetch_proxy_prefetch_metrics_collector.h",
-    "prefetch/prefetch_proxy/prefetch_proxy_prefetch_status.h",
-    "prefetch/prefetch_proxy/prefetch_proxy_probe_result.cc",
-    "prefetch/prefetch_proxy/prefetch_proxy_probe_result.h",
-    "prefetch/prefetch_proxy/prefetch_proxy_proxy_configurator.cc",
-    "prefetch/prefetch_proxy/prefetch_proxy_proxy_configurator.h",
-    "prefetch/prefetch_proxy/prefetch_proxy_proxying_url_loader_factory.cc",
-    "prefetch/prefetch_proxy/prefetch_proxy_proxying_url_loader_factory.h",
-    "prefetch/prefetch_proxy/prefetch_proxy_service.cc",
-    "prefetch/prefetch_proxy/prefetch_proxy_service.h",
-    "prefetch/prefetch_proxy/prefetch_proxy_service_factory.cc",
-    "prefetch/prefetch_proxy/prefetch_proxy_service_factory.h",
-    "prefetch/prefetch_proxy/prefetch_proxy_subresource_manager.cc",
-    "prefetch/prefetch_proxy/prefetch_proxy_subresource_manager.h",
-    "prefetch/prefetch_proxy/prefetch_proxy_tab_helper.cc",
-    "prefetch/prefetch_proxy/prefetch_proxy_tab_helper.h",
-    "prefetch/prefetch_proxy/prefetch_proxy_url_loader_interceptor.cc",
-    "prefetch/prefetch_proxy/prefetch_proxy_url_loader_interceptor.h",
-    "prefetch/prefetch_proxy/prefetch_type.cc",
-    "prefetch/prefetch_proxy/prefetch_type.h",
-    "prefetch/prefetch_proxy/prefetched_mainframe_response_container.cc",
-    "prefetch/prefetch_proxy/prefetched_mainframe_response_container.h",
     "prefs/browser_prefs.cc",
     "prefs/browser_prefs.h",
     "prefs/chrome_command_line_pref_store.cc",
@@ -1358,6 +1309,55 @@
     "preloading/prefetch/no_state_prefetch/no_state_prefetch_navigation_throttle.h",
     "preloading/prefetch/no_state_prefetch/no_state_prefetch_tab_helper.cc",
     "preloading/prefetch/no_state_prefetch/no_state_prefetch_tab_helper.h",
+    "preloading/prefetch/prefetch_proxy/chrome_prefetch_service_delegate.cc",
+    "preloading/prefetch/prefetch_proxy/chrome_prefetch_service_delegate.h",
+    "preloading/prefetch/prefetch_proxy/chrome_speculation_host_delegate.cc",
+    "preloading/prefetch/prefetch_proxy/chrome_speculation_host_delegate.h",
+    "preloading/prefetch/prefetch_proxy/prefetch_container.cc",
+    "preloading/prefetch/prefetch_proxy/prefetch_container.h",
+    "preloading/prefetch/prefetch_proxy/prefetch_proxy_canary_checker.cc",
+    "preloading/prefetch/prefetch_proxy/prefetch_proxy_canary_checker.h",
+    "preloading/prefetch/prefetch_proxy/prefetch_proxy_cookie_listener.cc",
+    "preloading/prefetch/prefetch_proxy/prefetch_proxy_cookie_listener.h",
+    "preloading/prefetch/prefetch_proxy/prefetch_proxy_dns_prober.cc",
+    "preloading/prefetch/prefetch_proxy/prefetch_proxy_dns_prober.h",
+    "preloading/prefetch/prefetch_proxy/prefetch_proxy_features.cc",
+    "preloading/prefetch/prefetch_proxy/prefetch_proxy_features.h",
+    "preloading/prefetch/prefetch_proxy/prefetch_proxy_from_string_url_loader.cc",
+    "preloading/prefetch/prefetch_proxy/prefetch_proxy_from_string_url_loader.h",
+    "preloading/prefetch/prefetch_proxy/prefetch_proxy_network_context.cc",
+    "preloading/prefetch/prefetch_proxy/prefetch_proxy_network_context.h",
+    "preloading/prefetch/prefetch_proxy/prefetch_proxy_network_context_client.cc",
+    "preloading/prefetch/prefetch_proxy/prefetch_proxy_network_context_client.h",
+    "preloading/prefetch/prefetch_proxy/prefetch_proxy_origin_decider.cc",
+    "preloading/prefetch/prefetch_proxy/prefetch_proxy_origin_decider.h",
+    "preloading/prefetch/prefetch_proxy/prefetch_proxy_origin_prober.cc",
+    "preloading/prefetch/prefetch_proxy/prefetch_proxy_origin_prober.h",
+    "preloading/prefetch/prefetch_proxy/prefetch_proxy_params.cc",
+    "preloading/prefetch/prefetch_proxy/prefetch_proxy_params.h",
+    "preloading/prefetch/prefetch_proxy/prefetch_proxy_prefetch_metrics_collector.cc",
+    "preloading/prefetch/prefetch_proxy/prefetch_proxy_prefetch_metrics_collector.h",
+    "preloading/prefetch/prefetch_proxy/prefetch_proxy_prefetch_status.h",
+    "preloading/prefetch/prefetch_proxy/prefetch_proxy_probe_result.cc",
+    "preloading/prefetch/prefetch_proxy/prefetch_proxy_probe_result.h",
+    "preloading/prefetch/prefetch_proxy/prefetch_proxy_proxy_configurator.cc",
+    "preloading/prefetch/prefetch_proxy/prefetch_proxy_proxy_configurator.h",
+    "preloading/prefetch/prefetch_proxy/prefetch_proxy_proxying_url_loader_factory.cc",
+    "preloading/prefetch/prefetch_proxy/prefetch_proxy_proxying_url_loader_factory.h",
+    "preloading/prefetch/prefetch_proxy/prefetch_proxy_service.cc",
+    "preloading/prefetch/prefetch_proxy/prefetch_proxy_service.h",
+    "preloading/prefetch/prefetch_proxy/prefetch_proxy_service_factory.cc",
+    "preloading/prefetch/prefetch_proxy/prefetch_proxy_service_factory.h",
+    "preloading/prefetch/prefetch_proxy/prefetch_proxy_subresource_manager.cc",
+    "preloading/prefetch/prefetch_proxy/prefetch_proxy_subresource_manager.h",
+    "preloading/prefetch/prefetch_proxy/prefetch_proxy_tab_helper.cc",
+    "preloading/prefetch/prefetch_proxy/prefetch_proxy_tab_helper.h",
+    "preloading/prefetch/prefetch_proxy/prefetch_proxy_url_loader_interceptor.cc",
+    "preloading/prefetch/prefetch_proxy/prefetch_proxy_url_loader_interceptor.h",
+    "preloading/prefetch/prefetch_proxy/prefetch_type.cc",
+    "preloading/prefetch/prefetch_proxy/prefetch_type.h",
+    "preloading/prefetch/prefetch_proxy/prefetched_mainframe_response_container.cc",
+    "preloading/prefetch/prefetch_proxy/prefetched_mainframe_response_container.h",
     "preloading/prefetch/search_prefetch/cache_alias_search_prefetch_url_loader.cc",
     "preloading/prefetch/search_prefetch/cache_alias_search_prefetch_url_loader.h",
     "preloading/prefetch/search_prefetch/field_trial_settings.cc",
@@ -2246,6 +2246,7 @@
     "//components/safe_browsing/core/common/proto:csd_proto",
     "//components/safe_search_api",
     "//components/safe_search_api:safe_search_client",
+    "//components/saved_tab_groups:core",
     "//components/schema_org/common:improved_mojom",
     "//components/search",
     "//components/search_engines",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index fce166c..ba3bd65 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -49,8 +49,8 @@
 #include "chrome/browser/permissions/abusive_origin_notifications_permission_revocation_config.h"
 #include "chrome/browser/permissions/quiet_notification_permission_ui_config.h"
 #include "chrome/browser/predictors/loading_predictor_config.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_features.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_params.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_features.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_params.h"
 #include "chrome/browser/resource_coordinator/tab_manager_features.h"
 #include "chrome/browser/share/share_features.h"
 #include "chrome/browser/sharing/features.h"
@@ -1592,29 +1592,6 @@
      std::size(kDiscountConsentNtpNativeDialog), nullptr},
 };
 
-const FeatureEntry::FeatureParam kNtpRecipeTasksModuleFakeData[] = {
-    {ntp_features::kNtpRecipeTasksModuleDataParam, "fake"}};
-const FeatureEntry::FeatureParam kNtpRecipeTasksModuleHistorical7Days[] = {
-    {ntp_features::kNtpRecipeTasksModuleExperimentGroupParam, "historical-7"}};
-const FeatureEntry::FeatureParam kNtpRecipeTasksModuleHistorical14Days[] = {
-    {ntp_features::kNtpRecipeTasksModuleExperimentGroupParam, "historical-14"}};
-const FeatureEntry::FeatureParam kNtpRecipeTasksModuleMix7Days[] = {
-    {ntp_features::kNtpRecipeTasksModuleExperimentGroupParam, "mix-7"}};
-const FeatureEntry::FeatureParam kNtpRecipeTasksModuleMix14Days[] = {
-    {ntp_features::kNtpRecipeTasksModuleExperimentGroupParam, "mix-14"}};
-const FeatureEntry::FeatureVariation kNtpRecipeTasksModuleVariations[] = {
-    {"- Fake Data", kNtpRecipeTasksModuleFakeData,
-     std::size(kNtpRecipeTasksModuleFakeData), nullptr},
-    {"- Historical Arm (7 days)", kNtpRecipeTasksModuleHistorical7Days,
-     std::size(kNtpRecipeTasksModuleHistorical7Days), "t3349934"},
-    {"- Historical Arm (14 days)", kNtpRecipeTasksModuleHistorical14Days,
-     std::size(kNtpRecipeTasksModuleHistorical14Days), "t3349935"},
-    {"- Recommended Mix Arm (7 days)", kNtpRecipeTasksModuleMix7Days,
-     std::size(kNtpRecipeTasksModuleMix7Days), "t3349936"},
-    {"- Recommended Mix Arm (14 days)", kNtpRecipeTasksModuleMix14Days,
-     std::size(kNtpRecipeTasksModuleMix14Days), "t3349937"},
-};
-
 const FeatureEntry::FeatureParam kNtpDriveModuleFakeData[] = {
     {ntp_features::kNtpDriveModuleDataParam, "fake"}};
 const FeatureEntry::FeatureParam kNtpDriveModuleManagedUsersOnly[] = {
@@ -1709,6 +1686,29 @@
     {"(Rounded Corners)", kRealboxMatchSearchboxThemeRoundedCorners,
      std::size(kRealboxMatchSearchboxThemeRoundedCorners), nullptr}};
 
+const FeatureEntry::FeatureParam kNtpRecipeTasksModuleFakeData[] = {
+    {ntp_features::kNtpRecipeTasksModuleDataParam, "fake"}};
+const FeatureEntry::FeatureParam kNtpRecipeTasksModuleHistorical7Days[] = {
+    {ntp_features::kNtpRecipeTasksModuleExperimentGroupParam, "historical-7"}};
+const FeatureEntry::FeatureParam kNtpRecipeTasksModuleHistorical14Days[] = {
+    {ntp_features::kNtpRecipeTasksModuleExperimentGroupParam, "historical-14"}};
+const FeatureEntry::FeatureParam kNtpRecipeTasksModuleMix7Days[] = {
+    {ntp_features::kNtpRecipeTasksModuleExperimentGroupParam, "mix-7"}};
+const FeatureEntry::FeatureParam kNtpRecipeTasksModuleMix14Days[] = {
+    {ntp_features::kNtpRecipeTasksModuleExperimentGroupParam, "mix-14"}};
+const FeatureEntry::FeatureVariation kNtpRecipeTasksModuleVariations[] = {
+    {"- Fake Data", kNtpRecipeTasksModuleFakeData,
+     std::size(kNtpRecipeTasksModuleFakeData), nullptr},
+    {"- Historical Arm (7 days)", kNtpRecipeTasksModuleHistorical7Days,
+     std::size(kNtpRecipeTasksModuleHistorical7Days), "t3349934"},
+    {"- Historical Arm (14 days)", kNtpRecipeTasksModuleHistorical14Days,
+     std::size(kNtpRecipeTasksModuleHistorical14Days), "t3349935"},
+    {"- Recommended Mix Arm (7 days)", kNtpRecipeTasksModuleMix7Days,
+     std::size(kNtpRecipeTasksModuleMix7Days), "t3349936"},
+    {"- Recommended Mix Arm (14 days)", kNtpRecipeTasksModuleMix14Days,
+     std::size(kNtpRecipeTasksModuleMix14Days), "t3349937"},
+};
+
 const FeatureEntry::FeatureParam kNtpSafeBrowsingModuleFastCooldown[] = {
     {ntp_features::kNtpSafeBrowsingModuleCooldownPeriodDaysParam, "0.001"},
     {ntp_features::kNtpSafeBrowsingModuleCountMaxParam, "1"}};
@@ -2115,7 +2115,6 @@
      kFeedPositionAndroid_pull_up_feed_target_non_feed_active,
      std::size(kFeedPositionAndroid_pull_up_feed_target_non_feed_active),
      nullptr},
-
 };
 
 const FeatureEntry::FeatureParam kSearchResumption_use_new_service[] = {
@@ -3726,6 +3725,9 @@
     {"dns-proxy-enable-doh", flag_descriptions::kDnsProxyEnableDOHName,
      flag_descriptions::kDnsProxyEnableDOHDescription, kOsCrOS,
      FEATURE_VALUE_TYPE(::features::kDnsProxyEnableDOH)},
+    {"hotspot", flag_descriptions::kHotspotName,
+     flag_descriptions::kHotspotDescription, kOsCrOS,
+     FEATURE_VALUE_TYPE(chromeos::features::kHotspot)},
     {"instant-tethering", flag_descriptions::kTetherName,
      flag_descriptions::kTetherDescription, kOsCrOS,
      FEATURE_VALUE_TYPE(chromeos::features::kInstantTethering)},
@@ -4596,9 +4598,6 @@
      flag_descriptions::kReengagementNotificationName,
      flag_descriptions::kReengagementNotificationDescription, kOsAndroid,
      FEATURE_VALUE_TYPE(chrome::android::kReengagementNotification)},
-    {"toolbar-iph-android", flag_descriptions::kToolbarIphAndroidName,
-     flag_descriptions::kToolbarIphAndroidDescription, kOsAndroid,
-     FEATURE_VALUE_TYPE(chrome::android::kToolbarIphAndroid)},
     {"back-gesture-refactor-android",
      flag_descriptions::kBackGestureRefactorAndroidName,
      flag_descriptions::kBackGestureRefactorAndroidDescription, kOsAndroid,
diff --git a/chrome/browser/android/oom_intervention/oom_intervention_decider.cc b/chrome/browser/android/oom_intervention/oom_intervention_decider.cc
index 08383ec..a58214d 100644
--- a/chrome/browser/android/oom_intervention/oom_intervention_decider.cc
+++ b/chrome/browser/android/oom_intervention/oom_intervention_decider.cc
@@ -137,18 +137,18 @@
     return;
 
   // Migrate `kBlacklist` to `kBlocklist`.
-  auto* old_pref_value = prefs_->GetList(kBlacklist);
-  if (!old_pref_value->GetListDeprecated().empty()) {
-    prefs_->Set(kBlocklist, *old_pref_value);
+  const base::Value::List& old_pref_value = prefs_->GetValueList(kBlacklist);
+  if (!old_pref_value.empty()) {
+    prefs_->SetList(kBlocklist, old_pref_value.Clone());
     ListPrefUpdate update(prefs_, kBlacklist);
-    update->ClearList();
+    update->GetList().clear();
   }
 
   if (delegate_->WasLastShutdownClean())
     return;
 
-  base::Value::ConstListView declined_list =
-      prefs_->GetList(kDeclinedHostList)->GetListDeprecated();
+  const base::Value::List& declined_list =
+      prefs_->GetValueList(kDeclinedHostList);
   if (!declined_list.empty()) {
     const std::string& last_declined = declined_list.back().GetString();
     if (!IsInList(kBlocklist, last_declined))
@@ -157,8 +157,7 @@
 }
 
 bool OomInterventionDecider::IsOptedOut(const std::string& host) const {
-  if (prefs_->GetList(kBlocklist)->GetListDeprecated().size() >=
-      kMaxBlocklistSize)
+  if (prefs_->GetValueList(kBlocklist).size() >= kMaxBlocklistSize)
     return true;
 
   return IsInList(kBlocklist, host);
@@ -166,7 +165,7 @@
 
 bool OomInterventionDecider::IsInList(const char* list_name,
                                       const std::string& host) const {
-  for (const auto& value : prefs_->GetList(list_name)->GetListDeprecated()) {
+  for (const auto& value : prefs_->GetValueList(list_name)) {
     if (value.GetString() == host)
       return true;
   }
@@ -178,9 +177,10 @@
   if (IsInList(list_name, host))
     return;
   ListPrefUpdate update(prefs_, list_name);
-  update->Append(host);
-  if (update->GetListDeprecated().size() > kMaxListSize)
-    update->EraseListIter(update->GetListDeprecated().begin());
+  base::Value::List& update_list = update->GetList();
+  update_list.Append(host);
+  if (update_list.size() > kMaxListSize)
+    update_list.erase(update_list.begin());
 
   // Save the list immediately because we typically modify lists under high
   // memory pressure, in which the browser process can be killed by the OS
diff --git a/chrome/browser/ash/dbus/ash_dbus_helper.cc b/chrome/browser/ash/dbus/ash_dbus_helper.cc
index 2611392..015b305 100644
--- a/chrome/browser/ash/dbus/ash_dbus_helper.cc
+++ b/chrome/browser/ash/dbus/ash_dbus_helper.cc
@@ -84,6 +84,7 @@
 #include "chromeos/dbus/missive/missive_client.h"
 #include "chromeos/dbus/permission_broker/permission_broker_client.h"
 #include "chromeos/dbus/power/power_manager_client.h"
+#include "chromeos/dbus/shill/shill_clients.h"
 #include "chromeos/dbus/tpm_manager/tpm_manager_client.h"
 #include "chromeos/dbus/u2f/u2f_client.h"
 #include "device/bluetooth/dbus/bluez_dbus_manager.h"
@@ -129,6 +130,8 @@
   // Initialize Chrome dbus clients.
   dbus::Bus* bus = chromeos::DBusThreadManager::Get()->GetSystemBus();
 
+  chromeos::shill_clients::Initialize(bus);
+
   // NOTE: base::Feature is not initialized yet, so any non MultiProcessMash
   // dbus client initialization for Ash should be done in Shell::Init.
   InitializeDBusClient<AnomalyDetectorClient>(bus);
@@ -325,6 +328,7 @@
   ArcAppfuseProviderClient::Shutdown();
   AnomalyDetectorClient::Shutdown();
 
+  chromeos::shill_clients::Shutdown();
   chromeos::DBusThreadManager::Shutdown();
   chromeos::SystemSaltGetter::Shutdown();
 }
diff --git a/chrome/browser/ash/login/enterprise_enrollment_browsertest.cc b/chrome/browser/ash/login/enterprise_enrollment_browsertest.cc
index b65efd5..b51b53c 100644
--- a/chrome/browser/ash/login/enterprise_enrollment_browsertest.cc
+++ b/chrome/browser/ash/login/enterprise_enrollment_browsertest.cc
@@ -479,7 +479,8 @@
 
   CheckActiveDirectoryCredentialsShown();
   CheckConfigurationSelectionVisible(false);
-  content::DOMMessageQueue message_queue;
+  content::DOMMessageQueue message_queue(
+      LoginDisplayHost::default_host()->GetOobeWebContents());
   SetupActiveDirectoryJSNotifications();
   SetExpectedJoinRequest("machine_name", "" /* machine_domain */,
                          authpolicy::KerberosEncryptionTypes::ENC_TYPES_ALL,
@@ -507,7 +508,8 @@
 
   UpstartClient::Get()->StartAuthPolicyService();
 
-  content::DOMMessageQueue message_queue;
+  content::DOMMessageQueue message_queue(
+      LoginDisplayHost::default_host()->GetOobeWebContents());
   SetupActiveDirectoryJSNotifications();
   SetExpectedJoinRequest(
       "machine_name", kAdMachineDomain,
@@ -540,7 +542,8 @@
 
   UpstartClient::Get()->StartAuthPolicyService();
 
-  content::DOMMessageQueue message_queue;
+  content::DOMMessageQueue message_queue(
+      LoginDisplayHost::default_host()->GetOobeWebContents());
   // Checking error in case of empty password. Whether password is not empty
   // being checked in the UI. Machine name length is checked after that in the
   // authpolicyd.
@@ -585,7 +588,8 @@
 
   UpstartClient::Get()->StartAuthPolicyService();
 
-  content::DOMMessageQueue message_queue;
+  content::DOMMessageQueue message_queue(
+      LoginDisplayHost::default_host()->GetOobeWebContents());
   SetupActiveDirectoryJSNotifications();
   // Legacy type triggers error card.
   SubmitActiveDirectoryCredentials("machine_name", "" /* machine_dn */,
@@ -610,7 +614,8 @@
   UpstartClient::Get()->StartAuthPolicyService();
 
   ExecutePendingJavaScript();
-  content::DOMMessageQueue message_queue;
+  content::DOMMessageQueue message_queue(
+      LoginDisplayHost::default_host()->GetOobeWebContents());
   SetupActiveDirectoryJSNotifications();
 
   // Unlock password step should we shown.
diff --git a/chrome/browser/ash/login/screens/update_required_screen.cc b/chrome/browser/ash/login/screens/update_required_screen.cc
index 7010c7e8..5dbc37bb 100644
--- a/chrome/browser/ash/login/screens/update_required_screen.cc
+++ b/chrome/browser/ash/login/screens/update_required_screen.cc
@@ -329,9 +329,11 @@
     const VersionUpdater::UpdateInfo& update_info) {
   switch (update_info.status.current_operation()) {
     case update_engine::Operation::CHECKING_FOR_UPDATE:
+    case update_engine::Operation::CLEANUP_PREVIOUS_UPDATE:
     case update_engine::Operation::ATTEMPTING_ROLLBACK:
     case update_engine::Operation::DISABLED:
     case update_engine::Operation::IDLE:
+    case update_engine::Operation::UPDATED_BUT_DEFERRED:
       break;
     case update_engine::Operation::UPDATE_AVAILABLE:
     case update_engine::Operation::DOWNLOADING:
diff --git a/chrome/browser/ash/login/screens/update_screen.cc b/chrome/browser/ash/login/screens/update_screen.cc
index 38b5ed4..f7c2e7b6 100644
--- a/chrome/browser/ash/login/screens/update_screen.cc
+++ b/chrome/browser/ash/login/screens/update_screen.cc
@@ -309,8 +309,10 @@
       // Do nothing in these cases, we don't want to notify the user of the
       // check unless there is an update.
     case update_engine::Operation::ATTEMPTING_ROLLBACK:
+    case update_engine::Operation::CLEANUP_PREVIOUS_UPDATE:
     case update_engine::Operation::DISABLED:
     case update_engine::Operation::IDLE:
+    case update_engine::Operation::UPDATED_BUT_DEFERRED:
       break;
     case update_engine::Operation::UPDATE_AVAILABLE:
       if (view_)
diff --git a/chrome/browser/ash/login/screens/user_creation_screen.cc b/chrome/browser/ash/login/screens/user_creation_screen.cc
index 0a3c7a8..2b7baed 100644
--- a/chrome/browser/ash/login/screens/user_creation_screen.cc
+++ b/chrome/browser/ash/login/screens/user_creation_screen.cc
@@ -48,28 +48,18 @@
   }
 }
 
-UserCreationScreen::UserCreationScreen(UserCreationView* view,
+UserCreationScreen::UserCreationScreen(base::WeakPtr<UserCreationView> view,
                                        ErrorScreen* error_screen,
                                        const ScreenExitCallback& exit_callback)
     : BaseScreen(UserCreationView::kScreenId, OobeScreenPriority::DEFAULT),
-      view_(view),
+      view_(std::move(view)),
       error_screen_(error_screen),
       exit_callback_(exit_callback) {
   network_state_informer_ = base::MakeRefCounted<NetworkStateInformer>();
   network_state_informer_->Init();
-  if (view_)
-    view_->Bind(this);
 }
 
-UserCreationScreen::~UserCreationScreen() {
-  if (view_)
-    view_->Unbind();
-}
-
-void UserCreationScreen::OnViewDestroyed(UserCreationView* view) {
-  if (view_ == view)
-    view_ = nullptr;
-}
+UserCreationScreen::~UserCreationScreen() = default;
 
 // static
 void UserCreationScreen::SetUserCreationScreenExitTestDelegate(
@@ -117,7 +107,8 @@
   error_screen_->Hide();
 }
 
-void UserCreationScreen::OnUserActionDeprecated(const std::string& action_id) {
+void UserCreationScreen::OnUserAction(const base::Value::List& args) {
+  const std::string& action_id = args[0].GetString();
   if (action_id == kUserActionSignIn) {
     context()->sign_in_as_child = false;
     RunExitCallback(Result::SIGNIN);
@@ -133,7 +124,7 @@
     context()->is_user_creation_enabled = false;
     RunExitCallback(Result::CANCEL);
   } else {
-    BaseScreen::OnUserActionDeprecated(action_id);
+    BaseScreen::OnUserAction(args);
   }
 }
 
diff --git a/chrome/browser/ash/login/screens/user_creation_screen.h b/chrome/browser/ash/login/screens/user_creation_screen.h
index 501fd29..3d68e23 100644
--- a/chrome/browser/ash/login/screens/user_creation_screen.h
+++ b/chrome/browser/ash/login/screens/user_creation_screen.h
@@ -44,7 +44,7 @@
 
   static std::string GetResultString(Result result);
 
-  explicit UserCreationScreen(UserCreationView* view,
+  explicit UserCreationScreen(base::WeakPtr<UserCreationView> view,
                               ErrorScreen* error_screen,
                               const ScreenExitCallback& exit_callback);
   ~UserCreationScreen() override;
@@ -52,10 +52,6 @@
   UserCreationScreen(const UserCreationScreen&) = delete;
   UserCreationScreen& operator=(const UserCreationScreen&) = delete;
 
-  // Called when the screen is being destroyed. This should call Unbind() on the
-  // associated View if this class is destroyed before that.
-  void OnViewDestroyed(UserCreationView* view);
-
   // NetworkStateInformer::NetworkStateInformerObserver implementation:
   void UpdateState(NetworkError::ErrorReason reason) override;
 
@@ -67,13 +63,13 @@
   bool MaybeSkip(WizardContext* context) override;
   void ShowImpl() override;
   void HideImpl() override;
-  void OnUserActionDeprecated(const std::string& action_id) override;
+  void OnUserAction(const base::Value::List& args) override;
   bool HandleAccelerator(LoginAcceleratorAction action) override;
 
   // Runs either exit_callback_ or |test_exit_delegate| observer.
   void RunExitCallback(Result result);
 
-  UserCreationView* view_ = nullptr;
+  base::WeakPtr<UserCreationView> view_;
 
   scoped_refptr<NetworkStateInformer> network_state_informer_;
 
diff --git a/chrome/browser/ash/login/users/chrome_user_manager_impl.cc b/chrome/browser/ash/login/users/chrome_user_manager_impl.cc
index be30c82..81712a9b 100644
--- a/chrome/browser/ash/login/users/chrome_user_manager_impl.cc
+++ b/chrome/browser/ash/login/users/chrome_user_manager_impl.cc
@@ -735,12 +735,11 @@
 
 void ChromeUserManagerImpl::LoadDeviceLocalAccounts(
     std::set<AccountId>* device_local_accounts_set) {
-  const base::Value* prefs_device_local_accounts =
-      GetLocalState()->GetList(kDeviceLocalAccountsWithSavedData);
+  const base::Value::List& prefs_device_local_accounts =
+      GetLocalState()->GetValueList(kDeviceLocalAccountsWithSavedData);
   std::vector<AccountId> device_local_accounts;
-  ParseUserList(prefs_device_local_accounts->GetListDeprecated(),
-                std::set<AccountId>(), &device_local_accounts,
-                device_local_accounts_set);
+  ParseUserList(prefs_device_local_accounts, std::set<AccountId>(),
+                &device_local_accounts, device_local_accounts_set);
   for (const AccountId& account_id : device_local_accounts) {
     policy::DeviceLocalAccount::Type type;
     if (!policy::IsDeviceLocalAccountUser(account_id.GetUserEmail(), &type)) {
diff --git a/chrome/browser/ash/login/version_updater/version_updater.cc b/chrome/browser/ash/login/version_updater/version_updater.cc
index 131dc895..c576f76 100644
--- a/chrome/browser/ash/login/version_updater/version_updater.cc
+++ b/chrome/browser/ash/login/version_updater/version_updater.cc
@@ -237,9 +237,11 @@
       if (!ignore_idle_status_)
         exit_update = true;
       break;
+    case update_engine::Operation::CLEANUP_PREVIOUS_UPDATE:
     case update_engine::Operation::DISABLED:
     case update_engine::Operation::ERROR:
     case update_engine::Operation::REPORTING_ERROR_EVENT:
+    case update_engine::Operation::UPDATED_BUT_DEFERRED:
       break;
     default:
       NOTREACHED();
diff --git a/chrome/browser/ash/login/wizard_controller.cc b/chrome/browser/ash/login/wizard_controller.cc
index 4a3d18c..d064df5 100644
--- a/chrome/browser/ash/login/wizard_controller.cc
+++ b/chrome/browser/ash/login/wizard_controller.cc
@@ -746,7 +746,8 @@
                           weak_factory_.GetWeakPtr())));
 
   append(std::make_unique<UserCreationScreen>(
-      oobe_ui->GetView<UserCreationScreenHandler>(), oobe_ui->GetErrorScreen(),
+      oobe_ui->GetView<UserCreationScreenHandler>()->AsWeakPtr(),
+      oobe_ui->GetErrorScreen(),
       base::BindRepeating(&WizardController::OnUserCreationScreenExit,
                           weak_factory_.GetWeakPtr())));
 
diff --git a/chrome/browser/ash/net/system_proxy_manager_browsertest.cc b/chrome/browser/ash/net/system_proxy_manager_browsertest.cc
index d6b8e4e..b344777 100644
--- a/chrome/browser/ash/net/system_proxy_manager_browsertest.cc
+++ b/chrome/browser/ash/net/system_proxy_manager_browsertest.cc
@@ -20,7 +20,7 @@
 #include "chrome/browser/ash/policy/core/browser_policy_connector_ash.h"
 #include "chrome/browser/ash/policy/core/device_policy_cros_browser_test.h"
 #include "chrome/browser/notifications/notification_display_service_tester.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_test_utils.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_test_utils.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/login/login_handler.h"
 #include "chrome/browser/ui/login/login_handler_test_utils.h"
diff --git a/chrome/browser/ash/policy/scheduled_task_handler/os_and_policies_update_checker.cc b/chrome/browser/ash/policy/scheduled_task_handler/os_and_policies_update_checker.cc
index ea24adb..d3a4a23 100644
--- a/chrome/browser/ash/policy/scheduled_task_handler/os_and_policies_update_checker.cc
+++ b/chrome/browser/ash/policy/scheduled_task_handler/os_and_policies_update_checker.cc
@@ -182,6 +182,8 @@
     case update_engine::Operation::UPDATE_AVAILABLE:
     case update_engine::Operation::CHECKING_FOR_UPDATE:
     case update_engine::Operation::ATTEMPTING_ROLLBACK:
+    case update_engine::Operation::CLEANUP_PREVIOUS_UPDATE:
+    case update_engine::Operation::UPDATED_BUT_DEFERRED:
       // Do nothing on intermediate states.
       break;
 
diff --git a/chrome/browser/autofill/form_structure_browsertest.cc b/chrome/browser/autofill/form_structure_browsertest.cc
index 36b47d3..47e230f 100644
--- a/chrome/browser/autofill/form_structure_browsertest.cc
+++ b/chrome/browser/autofill/form_structure_browsertest.cc
@@ -194,12 +194,14 @@
        // TODO(crbug.com/1150895) Remove once launched.
        features::kAutofillParsingPatternProvider,
        features::kAutofillPageLanguageDetection,
-       // TODO(crbug/1165780): Remove once shared labels are launched.
+       // TODO(crbug.com/1165780): Remove once shared labels are launched.
        features::kAutofillEnableSupportForParsingWithSharedLabels,
        // TODO(crbug.com/1277480): Remove once launched.
        features::kAutofillEnableNameSurenameParsing,
-       // TODO(crbug/1190334): Remove once launched.
-       features::kAutofillParseMerchantPromoCodeFields},
+       // TODO(crbug.com/1190334): Remove once launched.
+       features::kAutofillParseMerchantPromoCodeFields,
+       // TODO(crbug.com/1335549): Remove once launched.
+       features::kAutofillParseIbanFields},
       // Disabled
       {});
 }
diff --git a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc
index e2747f7..4a9c37b 100644
--- a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc
+++ b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc
@@ -56,10 +56,10 @@
 #include "chrome/browser/password_manager/password_store_factory.h"
 #include "chrome/browser/permissions/permission_actions_history_factory.h"
 #include "chrome/browser/permissions/permission_decision_auto_blocker_factory.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_origin_decider.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_service.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_service_factory.h"
 #include "chrome/browser/preloading/prefetch/no_state_prefetch/no_state_prefetch_manager_factory.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_origin_decider.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_service.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_service_factory.h"
 #include "chrome/browser/preloading/prefetch/search_prefetch/search_prefetch_service.h"
 #include "chrome/browser/preloading/prefetch/search_prefetch/search_prefetch_service_factory.h"
 #include "chrome/browser/privacy_sandbox/privacy_sandbox_settings_factory.h"
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
index f622e28..e020f4e6 100644
--- a/chrome/browser/chrome_content_browser_client.cc
+++ b/chrome/browser/chrome_content_browser_client.cc
@@ -87,16 +87,16 @@
 #include "chrome/browser/plugins/plugin_utils.h"
 #include "chrome/browser/policy/profile_policy_connector.h"
 #include "chrome/browser/prefetch/prefetch_prefs.h"
-#include "chrome/browser/prefetch/prefetch_proxy/chrome_prefetch_service_delegate.h"
-#include "chrome/browser/prefetch/prefetch_proxy/chrome_speculation_host_delegate.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_features.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_service.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_service_factory.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_url_loader_interceptor.h"
 #include "chrome/browser/preloading/navigation_ablation_throttle.h"
 #include "chrome/browser/preloading/prefetch/no_state_prefetch/chrome_no_state_prefetch_contents_delegate.h"
 #include "chrome/browser/preloading/prefetch/no_state_prefetch/no_state_prefetch_manager_factory.h"
 #include "chrome/browser/preloading/prefetch/no_state_prefetch/no_state_prefetch_navigation_throttle.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/chrome_prefetch_service_delegate.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/chrome_speculation_host_delegate.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_features.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_service.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_service_factory.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_url_loader_interceptor.h"
 #include "chrome/browser/preloading/prefetch/search_prefetch/field_trial_settings.h"
 #include "chrome/browser/preloading/prefetch/search_prefetch/search_prefetch_url_loader.h"
 #include "chrome/browser/preloading/prefetch/search_prefetch/search_prefetch_url_loader_interceptor.h"
diff --git a/chrome/browser/enterprise/browser_management/browser_management_service.cc b/chrome/browser/enterprise/browser_management/browser_management_service.cc
index 221ac26..9f36af5 100644
--- a/chrome/browser/enterprise/browser_management/browser_management_service.cc
+++ b/chrome/browser/enterprise/browser_management/browser_management_service.cc
@@ -8,12 +8,6 @@
 #include "chrome/browser/enterprise/browser_management/browser_management_status_provider.h"
 #include "chrome/browser/profiles/profile.h"
 
-#if BUILDFLAG(IS_CHROMEOS_ASH)
-#include "chrome/browser/ash/policy/core/browser_policy_connector_ash.h"
-#include "chrome/browser/browser_process.h"
-#include "chrome/browser/browser_process_platform_part.h"
-#endif
-
 namespace policy {
 
 namespace {
@@ -28,8 +22,7 @@
   providers.emplace_back(
       std::make_unique<ProfileCloudManagementStatusProvider>(profile));
 #if BUILDFLAG(IS_CHROMEOS_ASH)
-  providers.emplace_back(std::make_unique<DeviceManagementStatusProvider>(
-      g_browser_process->platform_part()->browser_policy_connector_ash()));
+  providers.emplace_back(std::make_unique<DeviceManagementStatusProvider>());
 #endif
   return providers;
 }
diff --git a/chrome/browser/enterprise/browser_management/browser_management_status_provider.cc b/chrome/browser/enterprise/browser_management/browser_management_status_provider.cc
index ea56304..5ecf5fcb 100644
--- a/chrome/browser/enterprise/browser_management/browser_management_status_provider.cc
+++ b/chrome/browser/enterprise/browser_management/browser_management_status_provider.cc
@@ -15,7 +15,10 @@
 #if BUILDFLAG(IS_WIN)
 #include "components/policy/core/common/management/platform_management_status_provider_win.h"
 #elif BUILDFLAG(IS_CHROMEOS_ASH)
+#include "chrome/browser/ash/policy/core/browser_policy_connector_ash.h"
 #include "chrome/browser/ash/profiles/profile_helper.h"
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/browser_process_platform_part.h"
 #include "components/user_manager/user_manager.h"
 #endif
 
@@ -100,15 +103,17 @@
 }
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
-DeviceManagementStatusProvider::DeviceManagementStatusProvider(
-    policy::BrowserPolicyConnectorAsh* browser_policy_connector)
-    : browser_policy_connector_(browser_policy_connector) {}
+DeviceManagementStatusProvider::DeviceManagementStatusProvider() = default;
 
 DeviceManagementStatusProvider::~DeviceManagementStatusProvider() = default;
 
 EnterpriseManagementAuthority DeviceManagementStatusProvider::FetchAuthority() {
-  return browser_policy_connector_ &&
-                 browser_policy_connector_->IsDeviceEnterpriseManaged()
+  return g_browser_process && g_browser_process->platform_part() &&
+                 g_browser_process->platform_part()
+                     ->browser_policy_connector_ash() &&
+                 g_browser_process->platform_part()
+                     ->browser_policy_connector_ash()
+                     ->IsDeviceEnterpriseManaged()
              ? EnterpriseManagementAuthority::CLOUD_DOMAIN
              : EnterpriseManagementAuthority::NONE;
 }
diff --git a/chrome/browser/enterprise/browser_management/browser_management_status_provider.h b/chrome/browser/enterprise/browser_management/browser_management_status_provider.h
index 6f842720..b6fad77 100644
--- a/chrome/browser/enterprise/browser_management/browser_management_status_provider.h
+++ b/chrome/browser/enterprise/browser_management/browser_management_status_provider.h
@@ -62,16 +62,12 @@
 class DeviceManagementStatusProvider final
     : public policy::ManagementStatusProvider {
  public:
-  explicit DeviceManagementStatusProvider(
-      policy::BrowserPolicyConnectorAsh* browser_policy_connector);
+  DeviceManagementStatusProvider();
   ~DeviceManagementStatusProvider() final;
 
  protected:
   // ManagementStatusProvider impl
   EnterpriseManagementAuthority FetchAuthority() final;
-
- private:
-  policy::BrowserPolicyConnectorAsh* browser_policy_connector_;
 };
 #endif
 
diff --git a/chrome/browser/enterprise/browser_management/management_service_factory.cc b/chrome/browser/enterprise/browser_management/management_service_factory.cc
index 175f2ba..2de228f 100644
--- a/chrome/browser/enterprise/browser_management/management_service_factory.cc
+++ b/chrome/browser/enterprise/browser_management/management_service_factory.cc
@@ -16,9 +16,6 @@
 #include "content/public/browser/browser_context.h"
 #include "extensions/buildflags/buildflags.h"
 #if BUILDFLAG(IS_CHROMEOS_ASH)
-#include "chrome/browser/ash/policy/core/browser_policy_connector_ash.h"
-#include "chrome/browser/browser_process.h"
-#include "chrome/browser/browser_process_platform_part.h"
 #include "chrome/browser/enterprise/browser_management/browser_management_status_provider.h"
 #endif
 
@@ -37,12 +34,9 @@
   // defined in `components/policy/`, also we need we need the
   // `g_browser_process->platform_part()`.
 #if BUILDFLAG(IS_CHROMEOS_ASH)
-  if (!instance->has_cros_status_provider() && g_browser_process &&
-      g_browser_process->platform_part()) {
+  if (!instance->has_cros_status_provider()) {
     instance->AddChromeOsStatusProvider(
-        std::make_unique<DeviceManagementStatusProvider>(
-            g_browser_process->platform_part()
-                ->browser_policy_connector_ash()));
+        std::make_unique<DeviceManagementStatusProvider>());
   }
 #endif
   return instance;
diff --git a/chrome/browser/extensions/api/system_private/system_private_api.cc b/chrome/browser/extensions/api/system_private/system_private_api.cc
index bd592cb5..7b12c52 100644
--- a/chrome/browser/extensions/api/system_private/system_private_api.cc
+++ b/chrome/browser/extensions/api/system_private/system_private_api.cc
@@ -108,6 +108,8 @@
     case update_engine::Operation::REPORTING_ERROR_EVENT:
     case update_engine::Operation::ATTEMPTING_ROLLBACK:
     case update_engine::Operation::NEED_PERMISSION_TO_UPDATE:
+    case update_engine::Operation::CLEANUP_PREVIOUS_UPDATE:
+    case update_engine::Operation::UPDATED_BUT_DEFERRED:
       state = kNotAvailableState;
       break;
     default:
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index c9828f3..2c604be 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -790,23 +790,23 @@
   },
   {
     "name": "cct-resizable-90-maximum-height",
-    "owners": ["ctzsm", "peconn"],
-    "expiry_milestone": 105
+    "owners": ["jinsukkim", "twellington"],
+    "expiry_milestone": 110
   },
   {
     "name": "cct-resizable-allow-resize-by-user-gesture",
-    "owners": ["ctzsm", "peconn"],
-    "expiry_milestone": 105
+    "owners": ["jinsukkim", "twellington"],
+    "expiry_milestone": 110
   },
   {
     "name": "cct-resizable-for-first-parties",
-    "owners": ["ctzsm", "peconn"],
-    "expiry_milestone": 105
+    "owners": ["jinsukkim", "twellington"],
+    "expiry_milestone": 110
   },
   {
     "name": "cct-resizable-for-third-parties",
-    "owners": ["ctzsm", "peconn"],
-    "expiry_milestone": 105
+    "owners": ["jinsukkim", "twellington"],
+    "expiry_milestone": 110
   },
   {
     "name": "cellular-bypass-esim-installation-connectivity-check",
@@ -1199,7 +1199,7 @@
   {
     "name": "default-link-capturing-in-browser",
     "owners": [ "tsergeant", "chromeos-apps-foundation-team@google.com"],
-    "expiry_milestone": 105
+    "expiry_milestone": 108
   },
   {
     "name": "default-mode-ua",
@@ -3013,7 +3013,7 @@
   {
     "name": "enable-unsafe-webgpu",
     "owners": [ "//third_party/blink/renderer/modules/webgpu/OWNERS" ],
-    "expiry_milestone": 105
+    "expiry_milestone": 109
   },
   {
     "name": "enable-user-cloud-signin-restriction-policy",
@@ -3770,6 +3770,11 @@
     "expiry_milestone": 110
   },
   {
+    "name": "hotspot",
+    "owners": [ "jiajunz@google.com", "cros-connectivity@google.com" ],
+    "expiry_milestone": 120
+  },
+  {
     "name": "http-cache-partitioning",
     "owners": [ "shivanisha" ],
     "expiry_milestone": 95
@@ -4263,8 +4268,8 @@
   },
   {
     "name": "messages-for-android-infrastructure",
-    "owners": [ "pavely", "lazzzis" ],
-    "expiry_milestone": 105
+    "owners": [ "lazzzis", "aishwaryarj" ],
+    "expiry_milestone": 112
   },
   {
     "name": "messages-for-android-instant-apps",
@@ -4303,8 +4308,8 @@
   },
   {
     "name": "messages-for-android-pwa-install",
-    "owners": [ "pavely", "lazzzis" ],
-    "expiry_milestone": 105
+    "owners": [ "lazzzis", "aishwaryarj" ],
+    "expiry_milestone": 112
   },
   {
     "name": "messages-for-android-reader-mode",
@@ -4318,8 +4323,8 @@
   },
   {
     "name": "messages-for-android-save-card",
-    "owners": [ "pavely", "lazzzis" ],
-    "expiry_milestone": 105
+    "owners": [ "lazzzis", "aishwaryarj" ],
+    "expiry_milestone": 112
   },
   {
     "name": "messages-for-android-stacking-animation",
@@ -5121,8 +5126,8 @@
   },
   {
     "name": "pdf-xfa-forms",
-    "owners": [ "carlosil", "tsepez" ],
-    "expiry_milestone": 105
+    "owners": [ "thestig", "//pdf/OWNERS" ],
+    "expiry_milestone": 115
   },
   {
     "name": "per-desk-wallpaper",
@@ -6123,11 +6128,6 @@
     "expiry_milestone": 85
   },
   {
-    "name": "toolbar-iph-android",
-    "owners": [ "skym", "wenyufu" ],
-    "expiry_milestone": 91
-  },
-  {
     "name": "top-chrome-touch-ui",
     "owners": [ "pbos", "chrome-desktop-ui-sea@google.com" ],
     // This flag is used to easily swap into touch-mode for UI development where
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index c91ddff..5fe394a 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -1587,6 +1587,11 @@
     "Hides home, back, and overview button from the shelf while the device is "
     "in tablet mode. Predicated on shelf-hotseat feature being enabled.";
 
+extern const char kHotspotName[] = "Hotspot";
+extern const char kHotspotDescription[] =
+    "Enables the Chromebook to share its cellular internet connection to other "
+    "devices through WiFi.";
+
 const char kTabAudioMutingName[] = "Tab audio muting UI control";
 const char kTabAudioMutingDescription[] =
     "When enabled, the audio indicators in the tab strip double as tab audio "
@@ -3840,11 +3845,6 @@
 const char kTabStripImprovementsAndroidDescription[] =
     "Enables scrollable tab strip with tab group indicators.";
 
-const char kToolbarIphAndroidName[] = "Enable Toolbar IPH on Android";
-const char kToolbarIphAndroidDescription[] =
-    "Enables in product help bubbles on the toolbar. In particular, the home "
-    "button and the tab switcher button.";
-
 const char kTouchDragAndContextMenuName[] =
     "Simultaneous touch drag and context menu";
 const char kTouchDragAndContextMenuDescription[] =
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index b1e9328d4..56f246d 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -2183,9 +2183,6 @@
 extern const char kTabGroupsForTabletsName[];
 extern const char kTabGroupsForTabletsDescription[];
 
-extern const char kToolbarIphAndroidName[];
-extern const char kToolbarIphAndroidDescription[];
-
 extern const char kTouchDragAndContextMenuName[];
 extern const char kTouchDragAndContextMenuDescription[];
 
@@ -3015,6 +3012,9 @@
 extern const char kHelpAppLauncherSearchName[];
 extern const char kHelpAppLauncherSearchDescription[];
 
+extern const char kHotspotName[];
+extern const char kHotspotDescription[];
+
 extern const char kDiacriticsOnPhysicalKeyboardLongpressName[];
 extern const char kDiacriticsOnPhysicalKeyboardLongpressDescription[];
 
diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc
index 37278ed1..287aa021 100644
--- a/chrome/browser/flags/android/chrome_feature_list.cc
+++ b/chrome/browser/flags/android/chrome_feature_list.cc
@@ -301,7 +301,6 @@
     &kTabToGTSAnimation,
     &kTestDefaultDisabled,
     &kTestDefaultEnabled,
-    &kToolbarIphAndroid,
     &kToolbarMicIphAndroid,
     &kToolbarPhoneOptimizations,
     &kToolbarScrollAblationAndroid,
@@ -858,9 +857,6 @@
 const base::Feature kTestDefaultEnabled{"TestDefaultEnabled",
                                         base::FEATURE_ENABLED_BY_DEFAULT};
 
-const base::Feature kToolbarIphAndroid{"ToolbarIphAndroid",
-                                       base::FEATURE_ENABLED_BY_DEFAULT};
-
 const base::Feature kToolbarMicIphAndroid{"ToolbarMicIphAndroid",
                                           base::FEATURE_DISABLED_BY_DEFAULT};
 
diff --git a/chrome/browser/flags/android/chrome_feature_list.h b/chrome/browser/flags/android/chrome_feature_list.h
index 34ecbd6..d253447 100644
--- a/chrome/browser/flags/android/chrome_feature_list.h
+++ b/chrome/browser/flags/android/chrome_feature_list.h
@@ -162,7 +162,6 @@
 extern const base::Feature kTabToGTSAnimation;
 extern const base::Feature kTestDefaultDisabled;
 extern const base::Feature kTestDefaultEnabled;
-extern const base::Feature kToolbarIphAndroid;
 extern const base::Feature kToolbarMicIphAndroid;
 extern const base::Feature kToolbarPhoneOptimizations;
 extern const base::Feature kToolbarScrollAblationAndroid;
diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
index df155c2..bcfdf26 100644
--- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
+++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
@@ -550,7 +550,6 @@
     public static final String TAB_STRIP_IMPROVEMENTS = "TabStripImprovements";
     public static final String TEST_DEFAULT_DISABLED = "TestDefaultDisabled";
     public static final String TEST_DEFAULT_ENABLED = "TestDefaultEnabled";
-    public static final String TOOLBAR_IPH_ANDROID = "ToolbarIphAndroid";
     public static final String TOOLBAR_MIC_IPH_ANDROID = "ToolbarMicIphAndroid";
     public static final String TOOLBAR_PHONE_OPTIMIZATIONS = "ToolbarPhoneOptimizations";
     public static final String TOOLBAR_SCROLL_ABLATION_ANDROID = "ToolbarScrollAblationAndroid";
diff --git a/chrome/browser/history_clusters/java/src/org/chromium/chrome/browser/history_clusters/HistoryClustersMediator.java b/chrome/browser/history_clusters/java/src/org/chromium/chrome/browser/history_clusters/HistoryClustersMediator.java
index e3a202f0..b14b830 100644
--- a/chrome/browser/history_clusters/java/src/org/chromium/chrome/browser/history_clusters/HistoryClustersMediator.java
+++ b/chrome/browser/history_clusters/java/src/org/chromium/chrome/browser/history_clusters/HistoryClustersMediator.java
@@ -47,10 +47,12 @@
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
 
 class HistoryClustersMediator extends RecyclerView.OnScrollListener implements SearchDelegate {
     @VisibleForTesting
@@ -62,6 +64,21 @@
         long currentTimeMillis();
     }
 
+    private static class VisitMetadata {
+        public final ListItem visitListItem;
+        public final ListItem clusterListItem;
+        public final ListItem relatedSearchesListItem;
+        public AtomicInteger visitCount;
+
+        private VisitMetadata(ListItem visitListItem, ListItem clusterListItem,
+                ListItem relatedSearchesListItem, AtomicInteger visitCount) {
+            this.visitListItem = visitListItem;
+            this.clusterListItem = clusterListItem;
+            this.relatedSearchesListItem = relatedSearchesListItem;
+            this.visitCount = visitCount;
+        }
+    }
+
     private final HistoryClustersBridge mHistoryClustersBridge;
     private final Context mContext;
     private final Resources mResources;
@@ -82,6 +99,7 @@
     private QueryState mQueryState = QueryState.forQueryless();
     private final HistoryClustersMetricsLogger mMetricsLogger;
     private Map<String, PropertyModel> mLabelToModelMap = new LinkedHashMap<>();
+    private Map<ClusterVisit, VisitMetadata> mVisitMetadataMap = new HashMap<>();
 
     /**
      * Create a new HistoryClustersMediator.
@@ -267,11 +285,22 @@
             mDelegate.markVisitForRemoval(visit);
             mMetricsLogger.recordVisitAction(
                     HistoryClustersMetricsLogger.VisitAction.DELETED, visit);
+            removeVisit(visit);
         }
-        mDelegate.removeMarkedItems();
 
-        resetModel();
-        startQuery(mQueryState.getQuery());
+        mDelegate.removeMarkedItems();
+    }
+
+    private void removeVisit(ClusterVisit visit) {
+        VisitMetadata visitMetadata = mVisitMetadataMap.get(visit);
+        if (visitMetadata == null) return;
+        mModelList.remove(visitMetadata.visitListItem);
+        if (visitMetadata.visitCount.decrementAndGet() == 0) {
+            mModelList.remove(visitMetadata.clusterListItem);
+            if (visitMetadata.relatedSearchesListItem != null) {
+                mModelList.remove(visitMetadata.relatedSearchesListItem);
+            }
+        }
     }
 
     private Tab createNewTab(GURL gurl, boolean incognito, Tab parentTab) {
@@ -333,7 +362,24 @@
 
             List<ListItem> visitsAndRelatedSearches =
                     new ArrayList<>(cluster.getVisits().size() + 1);
-            for (ClusterVisit visit : cluster.getVisits()) {
+            ListItem relatedSearchesItem = null;
+            List<String> relatedSearches = cluster.getRelatedSearches();
+            if (!relatedSearches.isEmpty()) {
+                PropertyModel relatedSearchesModel =
+                        new PropertyModel.Builder(HistoryClustersItemProperties.ALL_KEYS)
+                                .with(HistoryClustersItemProperties.RELATED_SEARCHES,
+                                        relatedSearches)
+                                .with(HistoryClustersItemProperties.CHIP_CLICK_HANDLER,
+                                        (query)
+                                                -> onRelatedSearchesChipClicked(
+                                                        query, relatedSearches.indexOf(query)))
+                                .build();
+                relatedSearchesItem = new ListItem(ItemType.RELATED_SEARCHES, relatedSearchesModel);
+            }
+
+            AtomicInteger visitCount = new AtomicInteger(cluster.getVisits().size());
+            for (int i = 0; i < visitCount.get(); i++) {
+                ClusterVisit visit = cluster.getVisits().get(i);
                 PropertyModel visitModel =
                         new PropertyModel.Builder(HistoryClustersItemProperties.ALL_KEYS)
                                 .with(HistoryClustersItemProperties.TITLE,
@@ -361,27 +407,17 @@
                             });
                 }
 
-                visitsAndRelatedSearches.add(new ListItem(ItemType.VISIT, visitModel));
+                ListItem listItem = new ListItem(ItemType.VISIT, visitModel);
+                mVisitMetadataMap.put(visit,
+                        new VisitMetadata(listItem, clusterItem, relatedSearchesItem, visitCount));
+                visitsAndRelatedSearches.add(listItem);
             }
 
-            List<String> relatedSearches = cluster.getRelatedSearches();
-            if (!relatedSearches.isEmpty()) {
-                PropertyModel relatedSearchesModel =
-                        new PropertyModel.Builder(HistoryClustersItemProperties.ALL_KEYS)
-                                .with(HistoryClustersItemProperties.RELATED_SEARCHES,
-                                        relatedSearches)
-                                .with(HistoryClustersItemProperties.CHIP_CLICK_HANDLER,
-                                        (query)
-                                                -> onRelatedSearchesChipClicked(
-                                                        query, relatedSearches.indexOf(query)))
-                                .build();
-                ListItem relatedSearchesItem =
-                        new ListItem(ItemType.RELATED_SEARCHES, relatedSearchesModel);
+            if (relatedSearchesItem != null) {
                 visitsAndRelatedSearches.add(relatedSearchesItem);
             }
 
             mModelList.addAll(visitsAndRelatedSearches);
-
             clusterModel.set(HistoryClustersItemProperties.CLICK_HANDLER,
                     v -> hideCluster(clusterModel, visitsAndRelatedSearches));
             Drawable chevron = UiUtils.getTintedDrawable(mContext,
@@ -395,6 +431,7 @@
     private void resetModel() {
         mModelList.clear();
         mLabelToModelMap.clear();
+        mVisitMetadataMap.clear();
     }
 
     private String getQuotedLabelFromRawLabel(String rawLabel, List<HistoryCluster> clusters) {
diff --git a/chrome/browser/lacros/snap_controller_lacros.cc b/chrome/browser/lacros/snap_controller_lacros.cc
index 7a33036..a688104 100644
--- a/chrome/browser/lacros/snap_controller_lacros.cc
+++ b/chrome/browser/lacros/snap_controller_lacros.cc
@@ -49,7 +49,9 @@
 }
 
 void SnapControllerLacros::CommitSnap(aura::Window* window,
-                                      chromeos::SnapDirection snap) {
+                                      chromeos::SnapDirection snap,
+                                      chromeos::SnapRatio snap_ratio) {
   auto* wayland_extension = WaylandExtensionForAuraWindow(window);
+  // TODO(crbug.com/1346780): Set `snap_ratio` for Lacros windows.
   wayland_extension->CommitSnap(ToWaylandWindowSnapDirection(snap));
 }
diff --git a/chrome/browser/lacros/snap_controller_lacros.h b/chrome/browser/lacros/snap_controller_lacros.h
index faa0807..e35a2972 100644
--- a/chrome/browser/lacros/snap_controller_lacros.h
+++ b/chrome/browser/lacros/snap_controller_lacros.h
@@ -20,7 +20,9 @@
   void ShowSnapPreview(aura::Window* window,
                        chromeos::SnapDirection snap,
                        bool allow_haptic_feedback) override;
-  void CommitSnap(aura::Window* window, chromeos::SnapDirection snap) override;
+  void CommitSnap(aura::Window* window,
+                  chromeos::SnapDirection snap,
+                  chromeos::SnapRatio snap_ratio) override;
 };
 
 #endif  // CHROME_BROWSER_LACROS_SNAP_CONTROLLER_LACROS_H_
diff --git a/chrome/browser/new_tab_page/promos/promo_service.cc b/chrome/browser/new_tab_page/promos/promo_service.cc
index 5791daa..bea65a3 100644
--- a/chrome/browser/new_tab_page/promos/promo_service.cc
+++ b/chrome/browser/new_tab_page/promos/promo_service.cc
@@ -43,7 +43,8 @@
 const char kXSSIResponsePreamble[] = ")]}'";
 
 bool CanBlockPromos() {
-  return base::FeatureList::IsEnabled(ntp_features::kDismissPromos);
+  return base::FeatureList::IsEnabled(
+      ntp_features::kNtpMiddleSlotPromoDismissal);
 }
 
 GURL GetGoogleBaseUrl() {
@@ -255,6 +256,7 @@
 
   DictionaryPrefUpdate update(profile_->GetPrefs(), prefs::kNtpPromoBlocklist);
   double now = base::Time::Now().ToDeltaSinceWindowsEpoch().InSecondsF();
+  // TODO(crbug.com/1003508): verify that promo_id belongs to valid promo.
   update->SetDoubleKey(promo_id, now);
 
   if (promo_data_ && promo_data_->promo_id == promo_id) {
diff --git a/chrome/browser/new_tab_page/promos/promo_service_unittest.cc b/chrome/browser/new_tab_page/promos/promo_service_unittest.cc
index ef3866e..c3ee6af 100644
--- a/chrome/browser/new_tab_page/promos/promo_service_unittest.cc
+++ b/chrome/browser/new_tab_page/promos/promo_service_unittest.cc
@@ -129,6 +129,7 @@
   PromoData promo;
   promo.promo_html = "<style></style><div><script></script></div>";
   promo.promo_log_url = GURL("https://www.google.com/log_url?id=42");
+  promo.promo_id = "42";
 
   EXPECT_EQ(service()->promo_data(), promo);
   EXPECT_EQ(service()->promo_status(), PromoService::Status::OK_WITH_PROMO);
@@ -136,7 +137,7 @@
 
 TEST_F(PromoServiceTest, GoodPromoResponseCanDismiss) {
   base::test::ScopedFeatureList feature_list;
-  feature_list.InitAndEnableFeature(ntp_features::kDismissPromos);
+  feature_list.InitAndEnableFeature(ntp_features::kNtpMiddleSlotPromoDismissal);
 
   std::string response_string =
       "{\"update\":{\"promos\":{\"middle\":\"<style></style><div><script></"
@@ -159,7 +160,7 @@
 
 TEST_F(PromoServiceTest, GoodPromoResponseNoIdField) {
   base::test::ScopedFeatureList feature_list;
-  feature_list.InitAndEnableFeature(ntp_features::kDismissPromos);
+  feature_list.InitAndEnableFeature(ntp_features::kNtpMiddleSlotPromoDismissal);
 
   std::string response_string =
       "{\"update\":{\"promos\":{\"middle\":\"<style></style><div><script></"
@@ -182,7 +183,7 @@
 
 TEST_F(PromoServiceTest, GoodPromoResponseNoIdFieldNorLogUrl) {
   base::test::ScopedFeatureList feature_list;
-  feature_list.InitAndEnableFeature(ntp_features::kDismissPromos);
+  feature_list.InitAndEnableFeature(ntp_features::kNtpMiddleSlotPromoDismissal);
 
   std::string response_string =
       "{\"update\":{\"promos\":{\"middle\":\"<style></style><div><script></"
@@ -203,7 +204,7 @@
 
 TEST_F(PromoServiceTest, GoodPromoWithBlockedID) {
   base::test::ScopedFeatureList feature_list;
-  feature_list.InitAndEnableFeature(ntp_features::kDismissPromos);
+  feature_list.InitAndEnableFeature(ntp_features::kNtpMiddleSlotPromoDismissal);
 
   {
     DictionaryPrefUpdate update(prefs(), prefs::kNtpPromoBlocklist);
@@ -227,7 +228,7 @@
 
 TEST_F(PromoServiceTest, BlocklistPromo) {
   base::test::ScopedFeatureList feature_list;
-  feature_list.InitAndEnableFeature(ntp_features::kDismissPromos);
+  feature_list.InitAndEnableFeature(ntp_features::kNtpMiddleSlotPromoDismissal);
 
   std::string response_string =
       "{\"update\":{\"promos\":{\"middle\":\"<style></style><div><script></"
@@ -261,7 +262,7 @@
 
 TEST_F(PromoServiceTest, BlocklistExpiration) {
   base::test::ScopedFeatureList feature_list;
-  feature_list.InitAndEnableFeature(ntp_features::kDismissPromos);
+  feature_list.InitAndEnableFeature(ntp_features::kNtpMiddleSlotPromoDismissal);
 
   {
     DictionaryPrefUpdate update(prefs(), prefs::kNtpPromoBlocklist);
@@ -295,7 +296,7 @@
 
 TEST_F(PromoServiceTest, BlocklistWrongExpiryType) {
   base::test::ScopedFeatureList feature_list;
-  feature_list.InitAndEnableFeature(ntp_features::kDismissPromos);
+  feature_list.InitAndEnableFeature(ntp_features::kNtpMiddleSlotPromoDismissal);
 
   {
     DictionaryPrefUpdate update(prefs(), prefs::kNtpPromoBlocklist);
diff --git a/chrome/browser/page_load_metrics/observers/prefetch_proxy_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/prefetch_proxy_page_load_metrics_observer.cc
index 368f2387a..599dc57 100644
--- a/chrome/browser/page_load_metrics/observers/prefetch_proxy_page_load_metrics_observer.cc
+++ b/chrome/browser/page_load_metrics/observers/prefetch_proxy_page_load_metrics_observer.cc
@@ -9,7 +9,7 @@
 #include "base/metrics/histogram_macros_local.h"
 #include "base/strings/string_util.h"
 #include "chrome/browser/history/history_service_factory.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_url_loader_interceptor.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_url_loader_interceptor.h"
 #include "chrome/browser/profiles/profile.h"
 #include "components/history/core/browser/history_service.h"
 #include "components/page_load_metrics/browser/page_load_tracker.h"
diff --git a/chrome/browser/page_load_metrics/observers/prefetch_proxy_page_load_metrics_observer.h b/chrome/browser/page_load_metrics/observers/prefetch_proxy_page_load_metrics_observer.h
index f9560a217..bdb5d03 100644
--- a/chrome/browser/page_load_metrics/observers/prefetch_proxy_page_load_metrics_observer.h
+++ b/chrome/browser/page_load_metrics/observers/prefetch_proxy_page_load_metrics_observer.h
@@ -13,7 +13,7 @@
 #include "base/sequence_checker.h"
 #include "base/task/cancelable_task_tracker.h"
 #include "base/time/time.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_tab_helper.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_tab_helper.h"
 #include "components/history/core/browser/history_types.h"
 #include "components/page_load_metrics/browser/page_load_metrics_observer.h"
 #include "net/cookies/canonical_cookie.h"
diff --git a/chrome/browser/prefetch/prefetch_proxy/chrome_speculation_host_delegate.cc b/chrome/browser/prefetch/prefetch_proxy/chrome_speculation_host_delegate.cc
deleted file mode 100644
index 0886c84..0000000
--- a/chrome/browser/prefetch/prefetch_proxy/chrome_speculation_host_delegate.cc
+++ /dev/null
@@ -1,158 +0,0 @@
-// Copyright 2021 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <algorithm>
-
-#include "chrome/browser/prefetch/prefetch_proxy/chrome_speculation_host_delegate.h"
-
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_container.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_params.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_tab_helper.h"
-#include "chrome/browser/preloading/prefetch/no_state_prefetch/no_state_prefetch_manager_factory.h"
-#include "components/no_state_prefetch/browser/no_state_prefetch_handle.h"
-#include "components/no_state_prefetch/browser/no_state_prefetch_manager.h"
-#include "content/public/browser/navigation_controller.h"
-#include "content/public/browser/render_frame_host.h"
-#include "content/public/browser/session_storage_namespace.h"
-#include "content/public/browser/web_contents.h"
-#include "ui/gfx/geometry/size.h"
-#include "url/gurl.h"
-#include "url/origin.h"
-
-ChromeSpeculationHostDelegate::ChromeSpeculationHostDelegate(
-    content::RenderFrameHost& render_frame_host)
-    : render_frame_host_(render_frame_host) {}
-
-ChromeSpeculationHostDelegate::~ChromeSpeculationHostDelegate() {
-  for (auto& prefetch : same_origin_no_state_prefetches_) {
-    prefetch->OnNavigateAway();
-  }
-}
-
-void ChromeSpeculationHostDelegate::ProcessCandidates(
-    std::vector<blink::mojom::SpeculationCandidatePtr>& candidates,
-    base::WeakPtr<content::SpeculationHostDevToolsObserver> devtools_observer) {
-  auto* web_contents =
-      content::WebContents::FromRenderFrameHost(&render_frame_host_);
-  auto* prefetch_proxy_tab_helper =
-      PrefetchProxyTabHelper::FromWebContents(web_contents);
-
-  if (!prefetch_proxy_tab_helper)
-    return;
-
-  // The set of prefetches to be handled by the PrefetchProxy code.
-  std::vector<std::pair<GURL, PrefetchType>> prefetches;
-
-  // Same origin prefetches with subresources are handled by NSP.
-  // TODO(crbug.com/1278102): Allow for the PrefetchProxy code to handle
-  // non-private prefetches with subresources.
-  std::vector<GURL> same_origin_prefetches_with_subresources;
-
-  const url::Origin& origin = render_frame_host_.GetLastCommittedOrigin();
-
-  // Returns true if the given entry is processed. Being processed means this
-  // delegate has a corresponding strategy to process the candidate, so it
-  // extracts the candidate's URL.
-  auto should_process_entry =
-      [&](const blink::mojom::SpeculationCandidatePtr& candidate) {
-        bool is_same_origin = origin.IsSameOriginWith(candidate->url);
-        bool private_prefetch =
-            candidate->requires_anonymous_client_ip_when_cross_origin &&
-            !is_same_origin;
-
-        if (is_same_origin) {
-          DCHECK(!private_prefetch);
-          if (candidate->action ==
-              blink::mojom::SpeculationAction::kPrefetchWithSubresources) {
-            same_origin_prefetches_with_subresources.push_back(candidate->url);
-            return true;
-          }
-          if (PrefetchProxySupportNonPrivatePrefetches() &&
-              candidate->action == blink::mojom::SpeculationAction::kPrefetch) {
-            prefetches.emplace_back(
-                candidate->url,
-                PrefetchType(/*use_isolated_network_context=*/false,
-                             /*use_prefetch_proxy=*/false,
-                             /*can_prefetch_subresources=*/false));
-            return true;
-          }
-          return false;
-        }
-
-        if (candidate->action ==
-            blink::mojom::SpeculationAction::kPrefetchWithSubresources) {
-          if (private_prefetch) {
-            prefetches.emplace_back(
-                candidate->url,
-                PrefetchType(/*use_isolated_network_context=*/true,
-                             /*use_prefetch_proxy=*/true,
-                             /*can_prefetch_subresources=*/true));
-            return true;
-          }
-          return false;
-        }
-        if (candidate->action == blink::mojom::SpeculationAction::kPrefetch) {
-          if (PrefetchProxySupportNonPrivatePrefetches() && !private_prefetch) {
-            prefetches.emplace_back(
-                candidate->url,
-                PrefetchType(/*use_isolated_network_context=*/true,
-                             /*use_prefetch_proxy=*/false,
-                             /*can_prefetch_subresources=*/false));
-            return true;
-          }
-          if (private_prefetch) {
-            prefetches.emplace_back(
-                candidate->url,
-                PrefetchType(/*use_isolated_network_context=*/true,
-                             /*use_prefetch_proxy=*/true,
-                             /*can_prefetch_subresources=*/false));
-            return true;
-          }
-        }
-        return false;
-      };
-
-  // Remove the entries that are to be processed by this delegate.
-  auto new_end = std::remove_if(candidates.begin(), candidates.end(),
-                                should_process_entry);
-  candidates.erase(new_end, candidates.end());
-
-  if (const auto& host_to_bypass = PrefetchProxyBypassProxyForHost()) {
-    for (auto& [prefetch_url, prefetch_type] : prefetches) {
-      if (prefetch_type.IsProxyRequired() &&
-          prefetch_url.host() == *host_to_bypass)
-        prefetch_type.SetProxyBypassedForTest();
-    }
-  }
-
-  // TODO(ryansturm): Handle CSP prefetch-src. https://crbug.com/1192857
-  if (prefetches.size()) {
-    prefetch_proxy_tab_helper->PrefetchSpeculationCandidates(
-        prefetches, render_frame_host_.GetLastCommittedURL(),
-        std::move(devtools_observer));
-  }
-
-  if (same_origin_prefetches_with_subresources.size() > 0) {
-    prerender::NoStatePrefetchManager* no_state_prefetch_manager =
-        prerender::NoStatePrefetchManagerFactory::GetForBrowserContext(
-            render_frame_host_.GetBrowserContext());
-    if (!no_state_prefetch_manager) {
-      return;
-    }
-    content::SessionStorageNamespace* session_storage_namespace =
-        web_contents->GetController().GetDefaultSessionStorageNamespace();
-    gfx::Size size = web_contents->GetContainerBounds().size();
-    // The chrome implementation almost certainly only allows one NSP to start
-    // (500 ms limit), but treat all requests of this class as handled by
-    // chrome.
-    for (const auto& url : same_origin_prefetches_with_subresources) {
-      std::unique_ptr<prerender::NoStatePrefetchHandle> handle =
-          no_state_prefetch_manager->AddSameOriginSpeculation(
-              url, session_storage_namespace, size, origin);
-      if (handle) {
-        same_origin_no_state_prefetches_.push_back(std::move(handle));
-      }
-    }
-  }
-}
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_features.h b/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_features.h
deleted file mode 100644
index b940e88..0000000
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_features.h
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright 2020 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_FEATURES_H_
-#define CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_FEATURES_H_
-
-#include "base/feature_list.h"
-
-namespace features {
-
-extern const base::Feature kIsolatePrerenders;
-extern const base::Feature kIsolatePrerendersMustProbeOrigin;
-
-}  // namespace features
-
-#endif  // CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_FEATURES_H_
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc
index eee41c7f..d904afd 100644
--- a/chrome/browser/prefs/browser_prefs.cc
+++ b/chrome/browser/prefs/browser_prefs.cc
@@ -48,10 +48,10 @@
 #include "chrome/browser/notifications/platform_notification_service_impl.h"
 #include "chrome/browser/permissions/quiet_notification_permission_ui_state.h"
 #include "chrome/browser/prefetch/prefetch_prefs.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_origin_decider.h"
 #include "chrome/browser/prefs/chrome_pref_service_factory.h"
 #include "chrome/browser/prefs/incognito_mode_prefs.h"
 #include "chrome/browser/prefs/session_startup_pref.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_origin_decider.h"
 #include "chrome/browser/preloading/prefetch/search_prefetch/search_prefetch_service.h"
 #include "chrome/browser/printing/print_preview_sticky_settings.h"
 #include "chrome/browser/profiles/chrome_version_service.h"
diff --git a/chrome/browser/prefetch/prefetch_proxy/DIR_METADATA b/chrome/browser/preloading/prefetch/prefetch_proxy/DIR_METADATA
similarity index 100%
rename from chrome/browser/prefetch/prefetch_proxy/DIR_METADATA
rename to chrome/browser/preloading/prefetch/prefetch_proxy/DIR_METADATA
diff --git a/chrome/browser/prefetch/prefetch_proxy/OWNERS b/chrome/browser/preloading/prefetch/prefetch_proxy/OWNERS
similarity index 100%
rename from chrome/browser/prefetch/prefetch_proxy/OWNERS
rename to chrome/browser/preloading/prefetch/prefetch_proxy/OWNERS
diff --git a/chrome/browser/prefetch/prefetch_proxy/chrome_prefetch_service_delegate.cc b/chrome/browser/preloading/prefetch/prefetch_proxy/chrome_prefetch_service_delegate.cc
similarity index 94%
rename from chrome/browser/prefetch/prefetch_proxy/chrome_prefetch_service_delegate.cc
rename to chrome/browser/preloading/prefetch/prefetch_proxy/chrome_prefetch_service_delegate.cc
index 4506441..59b394c7 100644
--- a/chrome/browser/prefetch/prefetch_proxy/chrome_prefetch_service_delegate.cc
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/chrome_prefetch_service_delegate.cc
@@ -2,10 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/prefetch/prefetch_proxy/chrome_prefetch_service_delegate.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/chrome_prefetch_service_delegate.h"
 
 #include "chrome/browser/prefetch/prefetch_prefs.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_origin_decider.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_origin_decider.h"
 #include "chrome/browser/profiles/profile.h"
 #include "components/google/core/common/google_util.h"
 #include "components/language/core/browser/pref_names.h"
diff --git a/chrome/browser/prefetch/prefetch_proxy/chrome_prefetch_service_delegate.h b/chrome/browser/preloading/prefetch/prefetch_proxy/chrome_prefetch_service_delegate.h
similarity index 85%
rename from chrome/browser/prefetch/prefetch_proxy/chrome_prefetch_service_delegate.h
rename to chrome/browser/preloading/prefetch/prefetch_proxy/chrome_prefetch_service_delegate.h
index e005ddf..ef4c349 100644
--- a/chrome/browser/prefetch/prefetch_proxy/chrome_prefetch_service_delegate.h
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/chrome_prefetch_service_delegate.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_CHROME_PREFETCH_SERVICE_DELEGATE_H_
-#define CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_CHROME_PREFETCH_SERVICE_DELEGATE_H_
+#ifndef CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_CHROME_PREFETCH_SERVICE_DELEGATE_H_
+#define CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_CHROME_PREFETCH_SERVICE_DELEGATE_H_
 
 #include <string>
 
@@ -51,4 +51,4 @@
   std::unique_ptr<PrefetchProxyOriginDecider> origin_decider_;
 };
 
-#endif  // CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_CHROME_PREFETCH_SERVICE_DELEGATE_H_
+#endif  // CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_CHROME_PREFETCH_SERVICE_DELEGATE_H_
diff --git a/chrome/browser/preloading/prefetch/prefetch_proxy/chrome_speculation_host_delegate.cc b/chrome/browser/preloading/prefetch/prefetch_proxy/chrome_speculation_host_delegate.cc
new file mode 100644
index 0000000..4e2f378
--- /dev/null
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/chrome_speculation_host_delegate.cc
@@ -0,0 +1,154 @@
+// 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 <algorithm>
+
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/chrome_speculation_host_delegate.h"
+
+#include "chrome/browser/preloading/prefetch/no_state_prefetch/no_state_prefetch_manager_factory.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_container.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_params.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_tab_helper.h"
+#include "components/no_state_prefetch/browser/no_state_prefetch_handle.h"
+#include "components/no_state_prefetch/browser/no_state_prefetch_manager.h"
+#include "content/public/browser/navigation_controller.h"
+#include "content/public/browser/render_frame_host.h"
+#include "content/public/browser/session_storage_namespace.h"
+#include "content/public/browser/web_contents.h"
+#include "ui/gfx/geometry/size.h"
+#include "url/gurl.h"
+#include "url/origin.h"
+
+ChromeSpeculationHostDelegate::ChromeSpeculationHostDelegate(
+    content::RenderFrameHost& render_frame_host)
+    : render_frame_host_(render_frame_host) {}
+
+ChromeSpeculationHostDelegate::~ChromeSpeculationHostDelegate() {
+  for (auto& prefetch : same_origin_no_state_prefetches_) {
+    prefetch->OnNavigateAway();
+  }
+}
+
+void ChromeSpeculationHostDelegate::ProcessCandidates(
+    std::vector<blink::mojom::SpeculationCandidatePtr>& candidates,
+    base::WeakPtr<content::SpeculationHostDevToolsObserver> devtools_observer) {
+  auto* web_contents =
+      content::WebContents::FromRenderFrameHost(&render_frame_host_);
+  auto* prefetch_proxy_tab_helper =
+      PrefetchProxyTabHelper::FromWebContents(web_contents);
+
+  if (!prefetch_proxy_tab_helper)
+    return;
+
+  // The set of prefetches to be handled by the PrefetchProxy code.
+  std::vector<std::pair<GURL, PrefetchType>> prefetches;
+
+  // Same origin prefetches with subresources are handled by NSP.
+  // TODO(crbug.com/1278102): Allow for the PrefetchProxy code to handle
+  // non-private prefetches with subresources.
+  std::vector<GURL> same_origin_prefetches_with_subresources;
+
+  const url::Origin& origin = render_frame_host_.GetLastCommittedOrigin();
+
+  // Returns true if the given entry is processed. Being processed means this
+  // delegate has a corresponding strategy to process the candidate, so it
+  // extracts the candidate's URL.
+  auto should_process_entry = [&](const blink::mojom::SpeculationCandidatePtr&
+                                      candidate) {
+    bool is_same_origin = origin.IsSameOriginWith(candidate->url);
+    bool private_prefetch =
+        candidate->requires_anonymous_client_ip_when_cross_origin &&
+        !is_same_origin;
+
+    if (is_same_origin) {
+      DCHECK(!private_prefetch);
+      if (candidate->action ==
+          blink::mojom::SpeculationAction::kPrefetchWithSubresources) {
+        same_origin_prefetches_with_subresources.push_back(candidate->url);
+        return true;
+      }
+      if (PrefetchProxySupportNonPrivatePrefetches() &&
+          candidate->action == blink::mojom::SpeculationAction::kPrefetch) {
+        prefetches.emplace_back(
+            candidate->url, PrefetchType(/*use_isolated_network_context=*/false,
+                                         /*use_prefetch_proxy=*/false,
+                                         /*can_prefetch_subresources=*/false));
+        return true;
+      }
+      return false;
+    }
+
+    if (candidate->action ==
+        blink::mojom::SpeculationAction::kPrefetchWithSubresources) {
+      if (private_prefetch) {
+        prefetches.emplace_back(
+            candidate->url, PrefetchType(/*use_isolated_network_context=*/true,
+                                         /*use_prefetch_proxy=*/true,
+                                         /*can_prefetch_subresources=*/true));
+        return true;
+      }
+      return false;
+    }
+    if (candidate->action == blink::mojom::SpeculationAction::kPrefetch) {
+      if (PrefetchProxySupportNonPrivatePrefetches() && !private_prefetch) {
+        prefetches.emplace_back(
+            candidate->url, PrefetchType(/*use_isolated_network_context=*/true,
+                                         /*use_prefetch_proxy=*/false,
+                                         /*can_prefetch_subresources=*/false));
+        return true;
+      }
+      if (private_prefetch) {
+        prefetches.emplace_back(
+            candidate->url, PrefetchType(/*use_isolated_network_context=*/true,
+                                         /*use_prefetch_proxy=*/true,
+                                         /*can_prefetch_subresources=*/false));
+        return true;
+      }
+    }
+    return false;
+  };
+
+  // Remove the entries that are to be processed by this delegate.
+  auto new_end = std::remove_if(candidates.begin(), candidates.end(),
+                                should_process_entry);
+  candidates.erase(new_end, candidates.end());
+
+  if (const auto& host_to_bypass = PrefetchProxyBypassProxyForHost()) {
+    for (auto& [prefetch_url, prefetch_type] : prefetches) {
+      if (prefetch_type.IsProxyRequired() &&
+          prefetch_url.host() == *host_to_bypass)
+        prefetch_type.SetProxyBypassedForTest();
+    }
+  }
+
+  // TODO(ryansturm): Handle CSP prefetch-src. https://crbug.com/1192857
+  if (prefetches.size()) {
+    prefetch_proxy_tab_helper->PrefetchSpeculationCandidates(
+        prefetches, render_frame_host_.GetLastCommittedURL(),
+        std::move(devtools_observer));
+  }
+
+  if (same_origin_prefetches_with_subresources.size() > 0) {
+    prerender::NoStatePrefetchManager* no_state_prefetch_manager =
+        prerender::NoStatePrefetchManagerFactory::GetForBrowserContext(
+            render_frame_host_.GetBrowserContext());
+    if (!no_state_prefetch_manager) {
+      return;
+    }
+    content::SessionStorageNamespace* session_storage_namespace =
+        web_contents->GetController().GetDefaultSessionStorageNamespace();
+    gfx::Size size = web_contents->GetContainerBounds().size();
+    // The chrome implementation almost certainly only allows one NSP to start
+    // (500 ms limit), but treat all requests of this class as handled by
+    // chrome.
+    for (const auto& url : same_origin_prefetches_with_subresources) {
+      std::unique_ptr<prerender::NoStatePrefetchHandle> handle =
+          no_state_prefetch_manager->AddSameOriginSpeculation(
+              url, session_storage_namespace, size, origin);
+      if (handle) {
+        same_origin_no_state_prefetches_.push_back(std::move(handle));
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/chrome/browser/prefetch/prefetch_proxy/chrome_speculation_host_delegate.h b/chrome/browser/preloading/prefetch/prefetch_proxy/chrome_speculation_host_delegate.h
similarity index 84%
rename from chrome/browser/prefetch/prefetch_proxy/chrome_speculation_host_delegate.h
rename to chrome/browser/preloading/prefetch/prefetch_proxy/chrome_speculation_host_delegate.h
index 3ffd7a7..a70fda6 100644
--- a/chrome/browser/prefetch/prefetch_proxy/chrome_speculation_host_delegate.h
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/chrome_speculation_host_delegate.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_CHROME_SPECULATION_HOST_DELEGATE_H_
-#define CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_CHROME_SPECULATION_HOST_DELEGATE_H_
+#ifndef CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_CHROME_SPECULATION_HOST_DELEGATE_H_
+#define CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_CHROME_SPECULATION_HOST_DELEGATE_H_
 
 #include <vector>
 
@@ -46,4 +46,4 @@
       same_origin_no_state_prefetches_;
 };
 
-#endif  // CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_CHROME_SPECULATION_HOST_DELEGATE_H_
+#endif  // CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_CHROME_SPECULATION_HOST_DELEGATE_H_
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_container.cc b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_container.cc
similarity index 89%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_container.cc
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_container.cc
index e7f27dd5..92f91a7f 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_container.cc
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_container.cc
@@ -2,15 +2,15 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_container.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_container.h"
 
 #include "base/metrics/histogram_functions.h"
 #include "base/time/time.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_cookie_listener.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_network_context.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_params.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_type.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetched_mainframe_response_container.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_cookie_listener.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_network_context.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_params.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_type.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetched_mainframe_response_container.h"
 #include "chrome/browser/profiles/profile.h"
 #include "url/gurl.h"
 
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_container.h b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_container.h
similarity index 89%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_container.h
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_container.h
index bf34a63..06369aa 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_container.h
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_container.h
@@ -2,18 +2,18 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_CONTAINER_H_
-#define CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_CONTAINER_H_
+#ifndef CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_CONTAINER_H_
+#define CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_CONTAINER_H_
 
 #include <memory>
 
 #include "base/time/time.h"
-#include "chrome/browser/prefetch/prefetch_proxy/chrome_speculation_host_delegate.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_cookie_listener.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_network_context.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_prefetch_status.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_type.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetched_mainframe_response_container.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/chrome_speculation_host_delegate.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_cookie_listener.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_network_context.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_prefetch_status.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_type.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetched_mainframe_response_container.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "url/gurl.h"
 
@@ -183,4 +183,4 @@
   base::WeakPtr<content::SpeculationHostDevToolsObserver> devtools_observer_;
 };
 
-#endif  // CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_CONTAINER_H_
+#endif  // CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_CONTAINER_H_
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_container_unittest.cc b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_container_unittest.cc
similarity index 97%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_container_unittest.cc
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_container_unittest.cc
index 4af94891..460abdd 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_container_unittest.cc
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_container_unittest.cc
@@ -2,12 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_container.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_container.h"
 
 #include "base/test/metrics/histogram_tester.h"
 #include "base/time/time.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_prefetch_status.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetched_mainframe_response_container.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_prefetch_status.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetched_mainframe_response_container.h"
 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
 #include "content/public/browser/storage_partition.h"
 #include "net/base/isolation_info.h"
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_browsertest.cc b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_browsertest.cc
similarity index 99%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_browsertest.cc
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_browsertest.cc
index 9492136..50bece8 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_browsertest.cc
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_browsertest.cc
@@ -32,19 +32,19 @@
 #include "chrome/browser/net/profile_network_context_service_factory.h"
 #include "chrome/browser/policy/policy_test_utils.h"
 #include "chrome/browser/prefetch/prefetch_prefs.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_canary_checker.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_features.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_origin_prober.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_params.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_prefetch_status.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_proxy_configurator.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_service.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_service_factory.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_subresource_manager.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_tab_helper.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_test_utils.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_url_loader_interceptor.h"
 #include "chrome/browser/preloading/prefetch/no_state_prefetch/no_state_prefetch_manager_factory.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_canary_checker.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_features.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_origin_prober.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_params.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_prefetch_status.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_proxy_configurator.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_service.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_service_factory.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_subresource_manager.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_tab_helper.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_test_utils.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_url_loader_interceptor.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ssl/certificate_reporting_test_utils.h"
 #include "chrome/browser/ssl/security_state_tab_helper.h"
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_canary_checker.cc b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_canary_checker.cc
similarity index 98%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_canary_checker.cc
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_canary_checker.cc
index e702044..1bf8225 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_canary_checker.cc
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_canary_checker.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_canary_checker.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_canary_checker.h"
 
 #include <math.h>
 
@@ -20,7 +20,7 @@
 #include "base/time/default_clock.h"
 #include "base/time/default_tick_clock.h"
 #include "build/build_config.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_dns_prober.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_dns_prober.h"
 #include "chrome/browser/profiles/profile.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_canary_checker.h b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_canary_checker.h
similarity index 95%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_canary_checker.h
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_canary_checker.h
index f1984dc..a0eceac 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_canary_checker.h
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_canary_checker.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_CANARY_CHECKER_H_
-#define CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_CANARY_CHECKER_H_
+#ifndef CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_CANARY_CHECKER_H_
+#define CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_CANARY_CHECKER_H_
 
 #include <stdint.h>
 
@@ -52,7 +52,7 @@
   //
   // Please add the header file of the client when new items are added.
   enum class CheckType {
-    // chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_origin_prober.h
+    // chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_origin_prober.h
     kDNS = 0,
     kTLS = 1,
     kMaxValue = kTLS,
@@ -231,4 +231,4 @@
   base::WeakPtrFactory<PrefetchProxyCanaryChecker> weak_factory_{this};
 };
 
-#endif  // CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_CANARY_CHECKER_H_
+#endif  // CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_CANARY_CHECKER_H_
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_canary_checker_unittest.cc b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_canary_checker_unittest.cc
similarity index 99%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_canary_checker_unittest.cc
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_canary_checker_unittest.cc
index cf0459f..148dbca1 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_canary_checker_unittest.cc
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_canary_checker_unittest.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_canary_checker.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_canary_checker.h"
 
 #include "base/memory/raw_ptr.h"
 #include "base/test/metrics/histogram_tester.h"
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_cookie_listener.cc b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_cookie_listener.cc
similarity index 94%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_cookie_listener.cc
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_cookie_listener.cc
index d7529bb0..2a7572f 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_cookie_listener.cc
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_cookie_listener.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_cookie_listener.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_cookie_listener.h"
 
 #include "base/callback.h"
 #include "base/check.h"
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_cookie_listener.h b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_cookie_listener.h
similarity index 87%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_cookie_listener.h
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_cookie_listener.h
index bd5f686..8eae1f0a 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_cookie_listener.h
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_cookie_listener.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_COOKIE_LISTENER_H_
-#define CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_COOKIE_LISTENER_H_
+#ifndef CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_COOKIE_LISTENER_H_
+#define CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_COOKIE_LISTENER_H_
 
 #include <memory>
 
@@ -56,4 +56,4 @@
       cookie_listener_receiver_{this};
 };
 
-#endif  // CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_COOKIE_LISTENER_H_
+#endif  // CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_COOKIE_LISTENER_H_
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_cookie_listener_unittest.cc b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_cookie_listener_unittest.cc
similarity index 98%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_cookie_listener_unittest.cc
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_cookie_listener_unittest.cc
index ae53efa5..1d310522 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_cookie_listener_unittest.cc
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_cookie_listener_unittest.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_cookie_listener.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_cookie_listener.h"
 
 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
 #include "content/public/browser/storage_partition.h"
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_dns_prober.cc b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_dns_prober.cc
similarity index 89%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_dns_prober.cc
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_dns_prober.cc
index 1f64149..1be4f63 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_dns_prober.cc
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_dns_prober.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_dns_prober.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_dns_prober.h"
 
 PrefetchProxyDNSProber::PrefetchProxyDNSProber(OnDNSResultsCallback callback)
     : callback_(std::move(callback)) {
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_dns_prober.h b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_dns_prober.h
similarity index 81%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_dns_prober.h
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_dns_prober.h
index 5c2cc2f..97b2661 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_dns_prober.h
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_dns_prober.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_DNS_PROBER_H_
-#define CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_DNS_PROBER_H_
+#ifndef CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_DNS_PROBER_H_
+#define CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_DNS_PROBER_H_
 
 #include "services/network/public/mojom/host_resolver.mojom.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
@@ -30,4 +30,4 @@
   OnDNSResultsCallback callback_;
 };
 
-#endif  // CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_DNS_PROBER_H_
+#endif  // CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_DNS_PROBER_H_
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_features.cc b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_features.cc
similarity index 90%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_features.cc
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_features.cc
index 303f72c95..adc4c92 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_features.cc
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_features.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_features.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_features.h"
 
 namespace features {
 
diff --git a/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_features.h b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_features.h
new file mode 100644
index 0000000..e8711f9
--- /dev/null
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_features.h
@@ -0,0 +1,17 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_FEATURES_H_
+#define CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_FEATURES_H_
+
+#include "base/feature_list.h"
+
+namespace features {
+
+extern const base::Feature kIsolatePrerenders;
+extern const base::Feature kIsolatePrerendersMustProbeOrigin;
+
+}  // namespace features
+
+#endif  // CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_FEATURES_H_
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_from_string_url_loader.cc b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_from_string_url_loader.cc
similarity index 97%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_from_string_url_loader.cc
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_from_string_url_loader.cc
index c247439..7165b76 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_from_string_url_loader.cc
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_from_string_url_loader.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_from_string_url_loader.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_from_string_url_loader.h"
 
 #include "base/bind.h"
 #include "base/check_op.h"
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_from_string_url_loader.h b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_from_string_url_loader.h
similarity index 90%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_from_string_url_loader.h
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_from_string_url_loader.h
index 48dfd398..e1a7a9e9 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_from_string_url_loader.h
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_from_string_url_loader.h
@@ -2,15 +2,15 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_FROM_STRING_URL_LOADER_H_
-#define CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_FROM_STRING_URL_LOADER_H_
+#ifndef CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_FROM_STRING_URL_LOADER_H_
+#define CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_FROM_STRING_URL_LOADER_H_
 
 #include <cstdint>
 #include <memory>
 #include <string>
 
 #include "base/memory/weak_ptr.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_tab_helper.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_tab_helper.h"
 #include "content/public/browser/url_loader_request_interceptor.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
@@ -104,4 +104,4 @@
       this};
 };
 
-#endif  // CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_FROM_STRING_URL_LOADER_H_
+#endif  // CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_FROM_STRING_URL_LOADER_H_
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_network_context.cc b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_network_context.cc
similarity index 93%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_network_context.cc
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_network_context.cc
index 097303ac..9f4f4fd 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_network_context.cc
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_network_context.cc
@@ -2,14 +2,14 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_network_context.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_network_context.h"
 
 #include "base/callback_helpers.h"
 #include "base/command_line.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_network_context_client.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_proxy_configurator.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_service.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_service_factory.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_network_context_client.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_proxy_configurator.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_service.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_service_factory.h"
 #include "chrome/browser/profiles/profile.h"
 #include "components/language/core/browser/pref_names.h"
 #include "components/prefs/pref_service.h"
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_network_context.h b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_network_context.h
similarity index 92%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_network_context.h
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_network_context.h
index cd224629f..c6e6824c 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_network_context.h
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_network_context.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_NETWORK_CONTEXT_H_
-#define CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_NETWORK_CONTEXT_H_
+#ifndef CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_NETWORK_CONTEXT_H_
+#define CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_NETWORK_CONTEXT_H_
 
 #include "base/memory/raw_ptr.h"
 #include "base/memory/scoped_refptr.h"
@@ -86,4 +86,4 @@
   base::WeakPtrFactory<PrefetchProxyNetworkContext> weak_factory_{this};
 };
 
-#endif  // CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_NETWORK_CONTEXT_H_
+#endif  // CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_NETWORK_CONTEXT_H_
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_network_context_client.cc b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_network_context_client.cc
similarity index 95%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_network_context_client.cc
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_network_context_client.cc
index 2441aafc..4497233 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_network_context_client.cc
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_network_context_client.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_network_context_client.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_network_context_client.h"
 
 #include <memory>
 
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_network_context_client.h b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_network_context_client.h
similarity index 87%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_network_context_client.h
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_network_context_client.h
index 0e8aa9e..a9582aa 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_network_context_client.h
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_network_context_client.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_NETWORK_CONTEXT_CLIENT_H_
-#define CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_NETWORK_CONTEXT_CLIENT_H_
+#ifndef CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_NETWORK_CONTEXT_CLIENT_H_
+#define CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_NETWORK_CONTEXT_CLIENT_H_
 
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
@@ -50,4 +50,4 @@
   void OnNewSCTAuditingReportSent() override;
 };
 
-#endif  // CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_NETWORK_CONTEXT_CLIENT_H_
+#endif  // CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_NETWORK_CONTEXT_CLIENT_H_
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_origin_decider.cc b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_origin_decider.cc
similarity index 95%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_origin_decider.cc
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_origin_decider.cc
index 23e11261..f61ddd4 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_origin_decider.cc
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_origin_decider.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_origin_decider.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_origin_decider.h"
 
 #include <memory>
 #include <vector>
@@ -10,7 +10,7 @@
 #include "base/json/values_util.h"
 #include "base/metrics/histogram_macros.h"
 #include "chrome/browser/prefetch/pref_names.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_params.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_params.h"
 #include "chrome/browser/profiles/profile.h"
 #include "components/prefs/pref_registry_simple.h"
 #include "components/prefs/pref_service.h"
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_origin_decider.h b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_origin_decider.h
similarity index 88%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_origin_decider.h
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_origin_decider.h
index c582e5f..61e979c 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_origin_decider.h
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_origin_decider.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_ORIGIN_DECIDER_H_
-#define CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_ORIGIN_DECIDER_H_
+#ifndef CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_ORIGIN_DECIDER_H_
+#define CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_ORIGIN_DECIDER_H_
 
 #include <map>
 
@@ -66,4 +66,4 @@
   std::map<url::Origin, base::Time> origin_retry_afters_;
 };
 
-#endif  // CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_ORIGIN_DECIDER_H_
+#endif  // CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_ORIGIN_DECIDER_H_
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_origin_decider_unittest.cc b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_origin_decider_unittest.cc
similarity index 96%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_origin_decider_unittest.cc
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_origin_decider_unittest.cc
index b9feeac..8e8b8b9 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_origin_decider_unittest.cc
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_origin_decider_unittest.cc
@@ -2,12 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_origin_decider.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_origin_decider.h"
 
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/simple_test_clock.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_features.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_features.h"
 #include "components/prefs/testing_pref_service.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_origin_prober.cc b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_origin_prober.cc
similarity index 96%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_origin_prober.cc
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_origin_prober.cc
index 714580f..426b786 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_origin_prober.cc
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_origin_prober.cc
@@ -2,14 +2,14 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_origin_prober.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_origin_prober.h"
 
 #include "base/bind.h"
 #include "base/feature_list.h"
 #include "base/strings/string_util.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_canary_checker.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_dns_prober.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_params.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_canary_checker.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_dns_prober.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_params.h"
 #include "chrome/browser/profiles/profile.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_origin_prober.h b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_origin_prober.h
similarity index 91%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_origin_prober.h
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_origin_prober.h
index 9633ded..b56c46d 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_origin_prober.h
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_origin_prober.h
@@ -2,13 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_ORIGIN_PROBER_H_
-#define CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_ORIGIN_PROBER_H_
+#ifndef CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_ORIGIN_PROBER_H_
+#define CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_ORIGIN_PROBER_H_
 
 #include "base/callback.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_probe_result.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_probe_result.h"
 #include "net/base/address_list.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "url/gurl.h"
@@ -106,4 +106,4 @@
   base::WeakPtrFactory<PrefetchProxyOriginProber> weak_factory_{this};
 };
 
-#endif  // CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_ORIGIN_PROBER_H_
+#endif  // CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_ORIGIN_PROBER_H_
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_params.cc b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_params.cc
similarity index 98%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_params.cc
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_params.cc
index d9e99871..116427b 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_params.cc
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_params.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_params.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_params.h"
 
 #include <string>
 #include <vector>
@@ -14,7 +14,7 @@
 #include "base/rand_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_split.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_features.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_features.h"
 #include "chrome/common/chrome_features.h"
 #include "components/prefs/pref_service.h"
 #include "components/unified_consent/url_keyed_data_collection_consent_helper.h"
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_params.h b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_params.h
similarity index 95%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_params.h
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_params.h
index f3bb775d..1f6a3c1d 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_params.h
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_params.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_PARAMS_H_
-#define CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_PARAMS_H_
+#ifndef CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_PARAMS_H_
+#define CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_PARAMS_H_
 
 #include <stdint.h>
 
@@ -146,4 +146,4 @@
 // If this is false, there is no MIME type restriction.
 bool PrefetchProxyHTMLOnly();
 
-#endif  // CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_PARAMS_H_
+#endif  // CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_PARAMS_H_
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_params_unittest.cc b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_params_unittest.cc
similarity index 96%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_params_unittest.cc
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_params_unittest.cc
index c0c6cb8c..da1e2a1 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_params_unittest.cc
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_params_unittest.cc
@@ -2,13 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_params.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_params.h"
 
 #include <vector>
 
 #include "base/command_line.h"
 #include "base/test/scoped_feature_list.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_features.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_features.h"
 #include "components/prefs/pref_registry_simple.h"
 #include "components/prefs/testing_pref_service.h"
 #include "components/unified_consent/pref_names.h"
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_prefetch_metrics_collector.cc b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_prefetch_metrics_collector.cc
similarity index 98%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_prefetch_metrics_collector.cc
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_prefetch_metrics_collector.cc
index 2a858050..6031c70 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_prefetch_metrics_collector.cc
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_prefetch_metrics_collector.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_prefetch_metrics_collector.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_prefetch_metrics_collector.h"
 
 #include "net/http/http_status_code.h"
 #include "services/metrics/public/cpp/metrics_utils.h"
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_prefetch_metrics_collector.h b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_prefetch_metrics_collector.h
similarity index 91%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_prefetch_metrics_collector.h
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_prefetch_metrics_collector.h
index e2ff2aa..1b713a3 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_prefetch_metrics_collector.h
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_prefetch_metrics_collector.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_PREFETCH_METRICS_COLLECTOR_H_
-#define CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_PREFETCH_METRICS_COLLECTOR_H_
+#ifndef CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_PREFETCH_METRICS_COLLECTOR_H_
+#define CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_PREFETCH_METRICS_COLLECTOR_H_
 
 #include <stdint.h>
 #include <map>
@@ -11,8 +11,8 @@
 
 #include "base/memory/scoped_refptr.h"
 #include "base/time/time.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_prefetch_status.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_probe_result.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_prefetch_status.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_probe_result.h"
 #include "services/metrics/public/cpp/ukm_source_id.h"
 #include "services/network/public/cpp/url_loader_completion_status.h"
 #include "services/network/public/mojom/url_response_head.mojom-forward.h"
@@ -141,4 +141,4 @@
   std::map<GURL, PrefetchMetric> resources_by_url_;
 };
 
-#endif  // CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_PREFETCH_METRICS_COLLECTOR_H_
+#endif  // CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_PREFETCH_METRICS_COLLECTOR_H_
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_prefetch_metrics_collector_unittest.cc b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_prefetch_metrics_collector_unittest.cc
similarity index 99%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_prefetch_metrics_collector_unittest.cc
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_prefetch_metrics_collector_unittest.cc
index e41b762..cf1be76 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_prefetch_metrics_collector_unittest.cc
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_prefetch_metrics_collector_unittest.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_prefetch_metrics_collector.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_prefetch_metrics_collector.h"
 
 #include <string>
 #include <vector>
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_prefetch_status.h b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_prefetch_status.h
similarity index 94%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_prefetch_status.h
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_prefetch_status.h
index 508f01c..bc52aa7 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_prefetch_status.h
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_prefetch_status.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_PREFETCH_STATUS_H_
-#define CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_PREFETCH_STATUS_H_
+#ifndef CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_PREFETCH_STATUS_H_
+#define CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_PREFETCH_STATUS_H_
 
 // The various states that a prefetch can go through or terminate with. Used in
 // UKM logging so don't remove or reorder values. Update
@@ -133,4 +133,4 @@
   kPrefetchNotEligibleDataSaverEnabled = 37,
 };
 
-#endif  // CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_PREFETCH_STATUS_H_
+#endif  // CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_PREFETCH_STATUS_H_
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_probe_result.cc b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_probe_result.cc
similarity index 87%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_probe_result.cc
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_probe_result.cc
index 2856043..220924ea 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_probe_result.cc
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_probe_result.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_probe_result.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_probe_result.h"
 
 #include "base/notreached.h"
 
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_probe_result.h b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_probe_result.h
similarity index 65%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_probe_result.h
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_probe_result.h
index 36185d2c..60e24f05 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_probe_result.h
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_probe_result.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_PROBE_RESULT_H_
-#define CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_PROBE_RESULT_H_
+#ifndef CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_PROBE_RESULT_H_
+#define CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_PROBE_RESULT_H_
 
 // The result of an origin probe. See PrefetchProxyOriginProber.
 enum class PrefetchProxyProbeResult {
@@ -17,4 +17,4 @@
 // Returns true if the probe result is not a failure.
 bool PrefetchProxyProbeResultIsSuccess(PrefetchProxyProbeResult result);
 
-#endif  // CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_PROBE_RESULT_H_
+#endif  // CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_PROBE_RESULT_H_
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_proxy_configurator.cc b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_proxy_configurator.cc
similarity index 96%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_proxy_configurator.cc
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_proxy_configurator.cc
index 9bf2907..1f48efb 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_proxy_configurator.cc
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_proxy_configurator.cc
@@ -2,13 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_proxy_configurator.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_proxy_configurator.h"
 
 #include "base/barrier_closure.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/rand_util.h"
 #include "base/time/default_clock.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_params.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_params.h"
 #include "google_apis/google_api_keys.h"
 #include "net/base/host_port_pair.h"
 #include "net/base/proxy_server.h"
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_proxy_configurator.h b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_proxy_configurator.h
similarity index 90%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_proxy_configurator.h
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_proxy_configurator.h
index a7fd42c..ae3f6aec 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_proxy_configurator.h
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_proxy_configurator.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_PROXY_CONFIGURATOR_H_
-#define CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_PROXY_CONFIGURATOR_H_
+#ifndef CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_PROXY_CONFIGURATOR_H_
+#define CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_PROXY_CONFIGURATOR_H_
 
 #include "base/memory/raw_ptr.h"
 #include "base/sequence_checker.h"
@@ -34,8 +34,7 @@
       base::OnceCallback<void()> callback);
 
   // Updates the custom proxy config to all clients.
-  void UpdateCustomProxyConfig(
-      base::OnceCallback<void()> callback);
+  void UpdateCustomProxyConfig(base::OnceCallback<void()> callback);
 
   // Creates a config that can be sent to the NetworkContext.
   network::mojom::CustomProxyConfigPtr CreateCustomProxyConfig() const;
@@ -91,4 +90,4 @@
       const PrefetchProxyProxyConfigurator&) = delete;
 };
 
-#endif  // CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_PROXY_CONFIGURATOR_H_
+#endif  // CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_PROXY_CONFIGURATOR_H_
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_proxy_configurator_unittest.cc b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_proxy_configurator_unittest.cc
similarity index 97%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_proxy_configurator_unittest.cc
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_proxy_configurator_unittest.cc
index 840bec7..c8f984c 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_proxy_configurator_unittest.cc
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_proxy_configurator_unittest.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_proxy_configurator.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_proxy_configurator.h"
 
 #include <memory>
 
@@ -10,8 +10,8 @@
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_features.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_params.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_features.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_params.h"
 #include "content/public/test/browser_task_environment.h"
 #include "google_apis/google_api_keys.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_proxying_url_loader_factory.cc b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_proxying_url_loader_factory.cc
similarity index 97%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_proxying_url_loader_factory.cc
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_proxying_url_loader_factory.cc
index 86a7c49..6e189b0 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_proxying_url_loader_factory.cc
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_proxying_url_loader_factory.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_proxying_url_loader_factory.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_proxying_url_loader_factory.h"
 
 #include "base/barrier_closure.h"
 #include "base/bind.h"
@@ -11,11 +11,11 @@
 #include "base/metrics/histogram.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/metrics/histogram_macros.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_params.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_proxy_configurator.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_service.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_service_factory.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_tab_helper.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_params.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_proxy_configurator.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_service.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_service_factory.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_tab_helper.h"
 #include "chrome/browser/profiles/profile.h"
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/browser_task_traits.h"
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_proxying_url_loader_factory.h b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_proxying_url_loader_factory.h
similarity index 96%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_proxying_url_loader_factory.h
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_proxying_url_loader_factory.h
index 3f92f2f..fcc5394 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_proxying_url_loader_factory.h
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_proxying_url_loader_factory.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_PROXYING_URL_LOADER_FACTORY_H_
-#define CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_PROXYING_URL_LOADER_FACTORY_H_
+#ifndef CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_PROXYING_URL_LOADER_FACTORY_H_
+#define CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_PROXYING_URL_LOADER_FACTORY_H_
 
 #include <memory>
 #include <set>
@@ -13,7 +13,7 @@
 #include "base/containers/unique_ptr_adapters.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_prefetch_status.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_prefetch_status.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/receiver_set.h"
@@ -303,4 +303,4 @@
       this};
 };
 
-#endif  // CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_PROXYING_URL_LOADER_FACTORY_H_
+#endif  // CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_PROXYING_URL_LOADER_FACTORY_H_
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_service.cc b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_service.cc
similarity index 80%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_service.cc
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_service.cc
index 1cbbec2..9bfe33980 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_service.cc
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_service.cc
@@ -2,15 +2,15 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_service.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_service.h"
 
 #include "base/bind.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_origin_decider.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_origin_prober.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_params.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_proxy_configurator.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_subresource_manager.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetched_mainframe_response_container.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_origin_decider.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_origin_prober.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_params.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_proxy_configurator.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_subresource_manager.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetched_mainframe_response_container.h"
 #include "chrome/browser/profiles/profile.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_service.h b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_service.h
similarity index 93%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_service.h
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_service.h
index 9e7a68cd..fa71ae5 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_service.h
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_service.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_SERVICE_H_
-#define CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_SERVICE_H_
+#ifndef CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_SERVICE_H_
+#define CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_SERVICE_H_
 
 #include <map>
 #include <memory>
@@ -96,4 +96,4 @@
   base::WeakPtrFactory<PrefetchProxyService> weak_factory_{this};
 };
 
-#endif  // CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_SERVICE_H_
+#endif  // CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_SERVICE_H_
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_service_factory.cc b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_service_factory.cc
similarity index 87%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_service_factory.cc
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_service_factory.cc
index 516bc8f3..505f4dd 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_service_factory.cc
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_service_factory.cc
@@ -2,9 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_service_factory.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_service_factory.h"
 
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_service.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_service.h"
 #include "chrome/browser/profiles/profile.h"
 #include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "content/public/browser/browser_context.h"
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_service_factory.h b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_service_factory.h
similarity index 79%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_service_factory.h
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_service_factory.h
index 7e9a4683..7b911762 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_service_factory.h
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_service_factory.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_SERVICE_FACTORY_H_
-#define CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_SERVICE_FACTORY_H_
+#ifndef CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_SERVICE_FACTORY_H_
+#define CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_SERVICE_FACTORY_H_
 
 #include "base/memory/singleton.h"
 #include "components/keyed_service/content/browser_context_keyed_service_factory.h"
@@ -33,4 +33,4 @@
       delete;
 };
 
-#endif  // CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_SERVICE_FACTORY_H_
+#endif  // CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_SERVICE_FACTORY_H_
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_subresource_manager.cc b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_subresource_manager.cc
similarity index 95%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_subresource_manager.cc
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_subresource_manager.cc
index 3272d2a..b24391d 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_subresource_manager.cc
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_subresource_manager.cc
@@ -2,11 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_subresource_manager.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_subresource_manager.h"
 
 #include "base/metrics/histogram_macros.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_prefetch_metrics_collector.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetched_mainframe_response_container.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_prefetch_metrics_collector.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetched_mainframe_response_container.h"
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/render_process_host.h"
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_subresource_manager.h b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_subresource_manager.h
similarity index 94%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_subresource_manager.h
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_subresource_manager.h
index d5d143b8..c76334f 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_subresource_manager.h
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_subresource_manager.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_SUBRESOURCE_MANAGER_H_
-#define CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_SUBRESOURCE_MANAGER_H_
+#ifndef CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_SUBRESOURCE_MANAGER_H_
+#define CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_SUBRESOURCE_MANAGER_H_
 
 #include <memory>
 #include <set>
@@ -12,7 +12,7 @@
 #include "base/containers/unique_ptr_adapters.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_proxying_url_loader_factory.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_proxying_url_loader_factory.h"
 #include "components/no_state_prefetch/browser/no_state_prefetch_handle.h"
 #include "content/public/browser/content_browser_client.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
@@ -176,4 +176,4 @@
   base::WeakPtrFactory<PrefetchProxySubresourceManager> weak_factory_{this};
 };
 
-#endif  // CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_SUBRESOURCE_MANAGER_H_
+#endif  // CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_SUBRESOURCE_MANAGER_H_
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_tab_helper.cc b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_tab_helper.cc
similarity index 98%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_tab_helper.cc
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_tab_helper.cc
index 57bedb60..7c76a45 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_tab_helper.cc
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_tab_helper.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_tab_helper.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_tab_helper.h"
 
 #include <string>
 
@@ -23,18 +23,18 @@
 #include "chrome/browser/navigation_predictor/navigation_predictor_keyed_service_factory.h"
 #include "chrome/browser/prefetch/prefetch_headers.h"
 #include "chrome/browser/prefetch/prefetch_prefs.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_features.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_network_context_client.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_origin_decider.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_origin_prober.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_params.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_prefetch_metrics_collector.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_proxy_configurator.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_service.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_service_factory.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_subresource_manager.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_type.h"
 #include "chrome/browser/preloading/prefetch/no_state_prefetch/no_state_prefetch_manager_factory.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_features.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_network_context_client.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_origin_decider.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_origin_prober.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_params.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_prefetch_metrics_collector.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_proxy_configurator.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_service.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_service_factory.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_subresource_manager.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_type.h"
 #include "chrome/browser/profiles/profile.h"
 #include "components/google/core/common/google_util.h"
 #include "components/language/core/browser/pref_names.h"
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_tab_helper.h b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_tab_helper.h
similarity index 95%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_tab_helper.h
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_tab_helper.h
index b14cbcdb..5678e10 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_tab_helper.h
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_tab_helper.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_TAB_HELPER_H_
-#define CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_TAB_HELPER_H_
+#ifndef CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_TAB_HELPER_H_
+#define CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_TAB_HELPER_H_
 
 #include <stdint.h>
 #include <map>
@@ -18,13 +18,13 @@
 #include "base/sequence_checker.h"
 #include "base/time/time.h"
 #include "chrome/browser/navigation_predictor/navigation_predictor_keyed_service.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_container.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_cookie_listener.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_network_context.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_prefetch_status.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_probe_result.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_type.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetched_mainframe_response_container.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_container.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_cookie_listener.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_network_context.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_prefetch_status.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_probe_result.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_type.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetched_mainframe_response_container.h"
 #include "content/public/browser/service_worker_context.h"
 #include "content/public/browser/speculation_host_delegate.h"
 #include "content/public/browser/web_contents_observer.h"
@@ -489,4 +489,4 @@
   PrefetchProxyTabHelper& operator=(const PrefetchProxyTabHelper&) = delete;
 };
 
-#endif  // CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_TAB_HELPER_H_
+#endif  // CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_TAB_HELPER_H_
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_tab_helper_unittest.cc b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_tab_helper_unittest.cc
similarity index 99%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_tab_helper_unittest.cc
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_tab_helper_unittest.cc
index ef1f1db..267057d9 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_tab_helper_unittest.cc
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_tab_helper_unittest.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_tab_helper.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_tab_helper.h"
 
 #include <memory>
 #include <string>
@@ -19,10 +19,10 @@
 #include "chrome/browser/navigation_predictor/navigation_predictor_keyed_service.h"
 #include "chrome/browser/navigation_predictor/navigation_predictor_keyed_service_factory.h"
 #include "chrome/browser/prefetch/prefetch_prefs.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_features.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_service.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_service_factory.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetched_mainframe_response_container.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_features.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_service.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_service_factory.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetched_mainframe_response_container.h"
 #include "chrome/common/pref_names.h"
 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
 #include "components/prefs/pref_service.h"
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_test_utils.cc b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_test_utils.cc
similarity index 98%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_test_utils.cc
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_test_utils.cc
index ad371c9..1222f32d 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_test_utils.cc
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_test_utils.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_test_utils.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_test_utils.h"
 
 #include "base/run_loop.h"
 #include "base/task/single_thread_task_executor.h"
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_test_utils.h b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_test_utils.h
similarity index 92%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_test_utils.h
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_test_utils.h
index 79f1455..89b6a9cd 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_test_utils.h
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_test_utils.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_TEST_UTILS_H_
-#define CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_TEST_UTILS_H_
+#ifndef CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_TEST_UTILS_H_
+#define CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_TEST_UTILS_H_
 
 #include <memory>
 
@@ -104,4 +104,4 @@
   base::WeakPtrFactory<TestProxyTunnelConnection> weak_factory_{this};
 };
 
-#endif  // CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_TEST_UTILS_H_
+#endif  // CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_TEST_UTILS_H_
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_url_loader_interceptor.cc b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_url_loader_interceptor.cc
similarity index 92%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_url_loader_interceptor.cc
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_url_loader_interceptor.cc
index 8691fd7a..845cca76 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_url_loader_interceptor.cc
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_url_loader_interceptor.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_url_loader_interceptor.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_url_loader_interceptor.h"
 
 #include <memory>
 
@@ -10,15 +10,15 @@
 #include "base/callback.h"
 #include "base/feature_list.h"
 #include "base/metrics/histogram_macros.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_features.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_from_string_url_loader.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_origin_prober.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_params.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_service.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_service_factory.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_subresource_manager.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetched_mainframe_response_container.h"
 #include "chrome/browser/preloading/prefetch/no_state_prefetch/no_state_prefetch_manager_factory.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_features.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_from_string_url_loader.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_origin_prober.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_params.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_service.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_service_factory.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_subresource_manager.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetched_mainframe_response_container.h"
 #include "chrome/browser/profiles/profile.h"
 #include "components/no_state_prefetch/browser/no_state_prefetch_manager.h"
 #include "content/public/browser/browser_context.h"
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_url_loader_interceptor.h b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_url_loader_interceptor.h
similarity index 87%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_url_loader_interceptor.h
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_url_loader_interceptor.h
index 5423bb7..19e4351 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_url_loader_interceptor.h
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_url_loader_interceptor.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_URL_LOADER_INTERCEPTOR_H_
-#define CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_URL_LOADER_INTERCEPTOR_H_
+#ifndef CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_URL_LOADER_INTERCEPTOR_H_
+#define CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_URL_LOADER_INTERCEPTOR_H_
 
 #include <memory>
 
@@ -11,8 +11,8 @@
 #include "base/memory/weak_ptr.h"
 #include "base/sequence_checker.h"
 #include "base/time/time.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_prefetch_status.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_probe_result.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_prefetch_status.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_probe_result.h"
 #include "content/public/browser/url_loader_request_interceptor.h"
 #include "services/network/public/cpp/resource_request.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
@@ -94,4 +94,4 @@
   base::WeakPtrFactory<PrefetchProxyURLLoaderInterceptor> weak_factory_{this};
 };
 
-#endif  // CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_URL_LOADER_INTERCEPTOR_H_
+#endif  // CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_PROXY_URL_LOADER_INTERCEPTOR_H_
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_url_loader_interceptor_unittest.cc b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_url_loader_interceptor_unittest.cc
similarity index 94%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_url_loader_interceptor_unittest.cc
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_url_loader_interceptor_unittest.cc
index 524bdbfa..7efe4b5 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_url_loader_interceptor_unittest.cc
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_url_loader_interceptor_unittest.cc
@@ -2,15 +2,15 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_url_loader_interceptor.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_url_loader_interceptor.h"
 
 #include <memory>
 
 #include "base/command_line.h"
 #include "base/test/metrics/histogram_tester.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_features.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetched_mainframe_response_container.h"
 #include "chrome/browser/preloading/prefetch/no_state_prefetch/no_state_prefetch_manager_factory.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_features.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetched_mainframe_response_container.h"
 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
 #include "components/no_state_prefetch/browser/no_state_prefetch_handle.h"
 #include "components/no_state_prefetch/browser/no_state_prefetch_manager.h"
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_type.cc b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_type.cc
similarity index 96%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_type.cc
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_type.cc
index 60a75926..9e63ff0c 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_type.cc
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_type.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_type.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_type.h"
 
 #include <tuple>
 
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_type.h b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_type.h
similarity index 88%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_type.h
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_type.h
index 27da3552..9af41c7 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_type.h
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_type.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_TYPE_H_
-#define CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_TYPE_H_
+#ifndef CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_TYPE_H_
+#define CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_TYPE_H_
 
 // The type of prefetch. This determines various details about how a prefetch is
 // handled.
@@ -52,4 +52,4 @@
 bool operator!=(const PrefetchType& prefetch_type_1,
                 const PrefetchType& prefetch_type_2);
 
-#endif  // CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCH_TYPE_H_
+#endif  // CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCH_TYPE_H_
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_type_unittest.cc b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_type_unittest.cc
similarity index 91%
rename from chrome/browser/prefetch/prefetch_proxy/prefetch_type_unittest.cc
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_type_unittest.cc
index 762c15a..ef0dbe3 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_type_unittest.cc
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_type_unittest.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_type.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_type.h"
 #include <array>
 #include <tuple>
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetched_mainframe_response_container.cc b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetched_mainframe_response_container.cc
similarity index 91%
rename from chrome/browser/prefetch/prefetch_proxy/prefetched_mainframe_response_container.cc
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetched_mainframe_response_container.cc
index 6d0f19a3..3211ce93 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetched_mainframe_response_container.cc
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetched_mainframe_response_container.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/prefetch/prefetch_proxy/prefetched_mainframe_response_container.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetched_mainframe_response_container.h"
 
 PrefetchedMainframeResponseContainer::PrefetchedMainframeResponseContainer(
     const net::IsolationInfo& isolation_info,
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetched_mainframe_response_container.h b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetched_mainframe_response_container.h
similarity index 82%
rename from chrome/browser/prefetch/prefetch_proxy/prefetched_mainframe_response_container.h
rename to chrome/browser/preloading/prefetch/prefetch_proxy/prefetched_mainframe_response_container.h
index 0662162f..5ba8d90c 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetched_mainframe_response_container.h
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetched_mainframe_response_container.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCHED_MAINFRAME_RESPONSE_CONTAINER_H_
-#define CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCHED_MAINFRAME_RESPONSE_CONTAINER_H_
+#ifndef CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCHED_MAINFRAME_RESPONSE_CONTAINER_H_
+#define CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCHED_MAINFRAME_RESPONSE_CONTAINER_H_
 
 #include <memory>
 #include <string>
@@ -42,4 +42,4 @@
       const PrefetchedMainframeResponseContainer&) = delete;
 };
 
-#endif  // CHROME_BROWSER_PREFETCH_PREFETCH_PROXY_PREFETCHED_MAINFRAME_RESPONSE_CONTAINER_H_
+#endif  // CHROME_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROXY_PREFETCHED_MAINFRAME_RESPONSE_CONTAINER_H_
diff --git a/chrome/browser/resources/chromeos/login/screens/common/BUILD.gn b/chrome/browser/resources/chromeos/login/screens/common/BUILD.gn
index b581bd82..e0cebfd7 100644
--- a/chrome/browser/resources/chromeos/login/screens/common/BUILD.gn
+++ b/chrome/browser/resources/chromeos/login/screens/common/BUILD.gn
@@ -627,6 +627,7 @@
     "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
     "//ui/webui/resources/cr_elements/cr_lottie:cr_lottie.m",
     "//ui/webui/resources/cr_elements/cr_toggle:cr_toggle.m",
+    "//ui/webui/resources/js:cr.m",
   ]
   extra_deps = [ ":user_creation_module" ]
 }
diff --git a/chrome/browser/resources/chromeos/login/screens/common/user_creation.html b/chrome/browser/resources/chromeos/login/screens/common/user_creation.html
index 18b9d30..f3662fd2 100644
--- a/chrome/browser/resources/chromeos/login/screens/common/user_creation.html
+++ b/chrome/browser/resources/chromeos/login/screens/common/user_creation.html
@@ -22,6 +22,7 @@
 <link rel="import" href="../../components/common_styles/oobe_dialog_host_styles.html">
 <link rel="import" href="../../components/dialogs/oobe_adaptive_dialog.html">
 <link rel="import" href="../../components/dialogs/oobe_modal_dialog.html">
+<link rel="import" href="../../cr_ui.html">
 
 
 <dom-module id="user-creation-element">
diff --git a/chrome/browser/resources/chromeos/login/screens/common/user_creation.js b/chrome/browser/resources/chromeos/login/screens/common/user_creation.js
index 65bf4fed..a5fc0a7 100644
--- a/chrome/browser/resources/chromeos/login/screens/common/user_creation.js
+++ b/chrome/browser/resources/chromeos/login/screens/common/user_creation.js
@@ -131,7 +131,7 @@
         'userCreationAddPersonSubtitle' :
         'userCreationSubtitle';
     if (this.uiStep === UserCreationUIState.CHILD) {
-      chrome.send('updateOobeUIState', [OOBE_UI_STATE.GAIA_SIGNIN]);
+      Oobe.getInstance().setOobeUIState(OOBE_UI_STATE.GAIA_SIGNIN);
     }
   }
 
@@ -157,7 +157,7 @@
 
   onBackClicked_() {
     if (this.uiStep === UserCreationUIState.CHILD) {
-      chrome.send('updateOobeUIState', [OOBE_UI_STATE.USER_CREATION]);
+      Oobe.getInstance().setOobeUIState(OOBE_UI_STATE.USER_CREATION);
       this.setUIStep(UserCreationUIState.CREATE);
     } else {
       this.userActed('cancel');
@@ -169,7 +169,7 @@
       if (this.selectedUserType === UserCreationUserType.SELF) {
         this.userActed('signin');
       } else if (this.selectedUserType === UserCreationUserType.CHILD) {
-        chrome.send('updateOobeUIState', [OOBE_UI_STATE.GAIA_SIGNIN]);
+        Oobe.getInstance().setOobeUIState(OOBE_UI_STATE.GAIA_SIGNIN);
         this.setUIStep(UserCreationUIState.CHILD);
       }
     } else if (this.uiStep === UserCreationUIState.CHILD) {
diff --git a/chrome/browser/resources/gaia_auth_host/authenticator.js b/chrome/browser/resources/gaia_auth_host/authenticator.js
index cf31d56..2068b34 100644
--- a/chrome/browser/resources/gaia_auth_host/authenticator.js
+++ b/chrome/browser/resources/gaia_auth_host/authenticator.js
@@ -127,9 +127,9 @@
   const GAIA_MESSAGE_SAML_CLOSE_VIEW = 'ChromeOS.Gaia.Message.Saml.CloseView';
   const GAIA_MESSAGE_GAIA_CLOSE_VIEW = 'ChromeOS.Gaia.Message.Gaia.CloseView';
 
-  // Regular expressions used to check for Azure AD-related hosts
+  // Regular expressions used to check for 3P IdP-related hosts
   const AZURE_AD_HOST = /login\.microsoftonline\.com$/;
-  const AZURE_AD_B2B_HOST = /b2clogin\.com$/;
+  const OKTA_HOST = /\.okta\.com$/;
 
   /**
    * The source URL parameter for the constrained signin flow.
@@ -891,21 +891,21 @@
     }
 
     /**
-     * Check url's host to determine if it comes from Azure AD
+     * Check url's host to determine if it comes from a know IdP
      * @param {URL?} url
      * @private
      */
-    isAzureAD_(url) {
+    isKnownIdP_(url) {
       return Boolean(
-          url.host.match(AZURE_AD_HOST) || url.host.match(AZURE_AD_B2B_HOST));
+          url.host.match(AZURE_AD_HOST) || url.host.match(OKTA_HOST));
     }
 
     /**
-     * Try to auto-fill email on sign-in page if IdP is Azure AD
+     * Try to auto-fill email on sign-in page for supported identity providers
      * @param {string} url url from location header
      * @private
      */
-    maybeAutofillUsernameIfAzureAD_(url) {
+    maybeAutofillUsernameIfKnownIdP_(url) {
       if (!this.urlParameterToAutofillSAMLUsername_ ||
           this.urlParameterToAutofillSAMLUsername_.length === 0) {
         return;
@@ -916,7 +916,7 @@
       if (!this.email_) {
         return;
       }
-      if (this.isAzureAD_(new URL(url))) {
+      if (this.isKnownIdP_(new URL(url))) {
         url = appendParam(
             url, this.urlParameterToAutofillSAMLUsername_, this.email_);
         this.webview_.src = url;
@@ -964,7 +964,7 @@
           assert(header.value !== undefined);
           const location = decodeURIComponent(header.value);
           this.chooseWhatToSync_ = !!location.match(/(\?|&)source=3($|&)/);
-          this.maybeAutofillUsernameIfAzureAD_(header.value);
+          this.maybeAutofillUsernameIfKnownIdP_(header.value);
         }
       }
     }
diff --git a/chrome/browser/resources/new_tab_page/BUILD.gn b/chrome/browser/resources/new_tab_page/BUILD.gn
index 06fe62b..2c55e5a 100644
--- a/chrome/browser/resources/new_tab_page/BUILD.gn
+++ b/chrome/browser/resources/new_tab_page/BUILD.gn
@@ -15,10 +15,6 @@
 
 assert(!is_android)
 
-html_to_wrapper("html_wrapper_files") {
-  in_files = html_files
-}
-
 grd_prefix = "new_tab_page"
 preprocess_folder = "preprocessed"
 
@@ -29,17 +25,16 @@
 preprocess_if_expr("preprocess") {
   defines = [ "is_official_build=$is_official_build" ]
   out_folder = "$target_gen_dir/$preprocess_folder"
-  in_files = ts_files
+  in_files = ts_files + html_files
   enable_removal_comments = enable_webui_inline_sourcemaps
 }
 
-preprocess_if_expr("preprocess_gen") {
-  deps = [ ":html_wrapper_files" ]
-  defines = [ "is_official_build=$is_official_build" ]
-  in_folder = target_gen_dir
+html_to_wrapper("html_wrapper_files") {
+  deps = [ ":preprocess" ]
+  in_folder = "$target_gen_dir/$preprocess_folder"
   out_folder = "$target_gen_dir/$preprocess_folder"
-  in_files = html_wrapper_files
-  enable_removal_comments = enable_webui_inline_sourcemaps
+  in_files = html_files
+  minify = optimize_webui
 }
 
 # Copy all Mojom generated JS files used by the NTP to a common location so that
@@ -171,8 +166,8 @@
 
   extra_deps = [
     ":copy_mojom",
+    ":html_wrapper_files",
     ":preprocess",
-    ":preprocess_gen",
   ]
 
   if (enable_webui_inline_sourcemaps) {
@@ -182,10 +177,7 @@
 
 if (enable_webui_inline_sourcemaps) {
   create_js_source_maps("sourcemaps") {
-    deps = [
-      ":preprocess",
-      ":preprocess_gen",
-    ]
+    deps = [ ":preprocess" ]
   }
 }
 
diff --git a/chrome/browser/resources/new_tab_page/middle_slot_promo.html b/chrome/browser/resources/new_tab_page/middle_slot_promo.html
index e0b9364..6a40f88 100644
--- a/chrome/browser/resources/new_tab_page/middle_slot_promo.html
+++ b/chrome/browser/resources/new_tab_page/middle_slot_promo.html
@@ -1,11 +1,11 @@
-<style>
+<style include="cr-hidden-style cr-icons">
   :host {
     font-size: 12px;
     max-width: 537px;
     white-space: pre;
   }
 
-  #container {
+  #promoAndDismissContainer {
     align-items: center;
     background-color: var(--ntp-background-override-color);
     border: solid var(--ntp-border-color) 1px;
@@ -20,6 +20,15 @@
     padding-inline-start: 8px;
   }
 
+  :host([middle-slot-promo-id_]) #promoAndDismissContainer {
+    padding-inline-end: 12px;
+  }
+
+  #promoContainer {
+    align-items: center;
+    display: flex;
+  }
+
   a {
     color: var(--cr-link-color);
     cursor: pointer;
@@ -53,9 +62,36 @@
     }
   }
 
-  #container > :last-child {
+  #dismissPromoButton {
+    --cr-icon-button-fill-color: transparent;
+    background: url(chrome://resources/images/icon_clear.svg)
+      no-repeat center center;
+    background-size: 10px;
+    height: 24px;
+    margin-inline-start: 4px;
+    width: 24px;
+  }
+
+  #dismissPromoButton:hover {
+    background-color: rgba(var(--google-grey-900-rgb), .1);
+    border-color: var(--ntp-background-override-color);
+    border-radius: 24px;
+    cursor: pointer;
+  }
+
+  #promoAndDismissContainer > :last-child {
     overflow: hidden;
     text-overflow: ellipsis;
   }
 </style>
-<!-- Promo parts are added by JS. -->
+<!-- Visibility is toggled in TS -->
+<div id="promoAndDismissContainer" hidden>
+  <!-- Promo parts are added by TS. -->
+  <template is="dom-if" if="[[middleSlotPromoId_]]">
+    <cr-icon-button id="dismissPromoButton"
+        class="icon-clear"
+        aria-label="$i18n{close}"
+        on-click="onDismissPromoButtonClick_">
+    </cr-icon-button>
+  </template>
+</div>
diff --git a/chrome/browser/resources/new_tab_page/middle_slot_promo.ts b/chrome/browser/resources/new_tab_page/middle_slot_promo.ts
index 9ee253a9..c1647bf 100644
--- a/chrome/browser/resources/new_tab_page/middle_slot_promo.ts
+++ b/chrome/browser/resources/new_tab_page/middle_slot_promo.ts
@@ -5,21 +5,24 @@
 import 'chrome://resources/cr_elements/shared_vars_css.m.js';
 
 import {CrAutoImgElement} from 'chrome://resources/cr_elements/cr_auto_img/cr_auto_img.js';
+import {assert} from 'chrome://resources/js/assert_ts.js';
 import {Command} from 'chrome://resources/js/browser_command/browser_command.mojom-webui.js';
 import {BrowserCommandProxy} from 'chrome://resources/js/browser_command/browser_command_proxy.js';
+import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
 import {Url} from 'chrome://resources/mojo/url/mojom/url.mojom-webui.js';
 import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
-import {getTemplate} from './middle_slot_promo.html.js';
 
+import {getTemplate} from './middle_slot_promo.html.js';
 import {NewTabPageProxy} from './new_tab_page_proxy.js';
 import {WindowProxy} from './window_proxy.js';
 
 /**
  * If a promo exists with content and can be shown, an element containing
- * the rendered promo is returned with an id #container. Otherwise, null is
+ * the rendered promo is returned with an id #promoContainer. Otherwise, null is
  * returned.
  */
-export async function renderPromo(): Promise<Element|null> {
+export async function renderPromo():
+    Promise<{container: Element, id: string | undefined}|null> {
   const browserHandler = NewTabPageProxy.getInstance().handler;
   const promoBrowserCommandHandler = BrowserCommandProxy.getInstance().handler;
   const {promo} = await browserHandler.getPromo();
@@ -68,8 +71,8 @@
   }
 
   let hasContent = false;
-  const container = document.createElement('div');
-  container.id = 'container';
+  const promoContainer = document.createElement('div');
+  promoContainer.id = 'promoContainer';
   promo.middleSlotParts.forEach(({image, link, text}) => {
     let el;
     if (image) {
@@ -97,7 +100,7 @@
     }
     if (el) {
       hasContent = true;
-      container.appendChild(el);
+      promoContainer.appendChild(el);
     }
   });
 
@@ -109,7 +112,7 @@
   if (hasContent && canShow) {
     browserHandler.onPromoRendered(
         WindowProxy.getInstance().now(), promo.logUrl || null);
-    return container;
+    return {container: promoContainer, id: promo.id};
   }
   return null;
 }
@@ -126,16 +129,50 @@
     return getTemplate();
   }
 
+  static get properties() {
+    return {
+      middleSlotPromoId_: {
+        type: String,
+        reflectToAttribute: true,
+      },
+    };
+  }
+
+  private middleSlotPromoId_: string;
+
   override ready() {
     super.ready();
-    renderPromo().then(container => {
-      if (container) {
-        this.shadowRoot!.appendChild(container);
+
+    renderPromo().then(promo => {
+      if (promo) {
+        const promoId = promo.id;
+        if (loadTimeData.getBoolean('middleSlotPromoDismissalEnabled') &&
+            promoId) {
+          this.middleSlotPromoId_ = promoId;
+        }
+
+        const promoAndDismissContainer =
+            this.shadowRoot!.getElementById('promoAndDismissContainer');
+        assert(promoAndDismissContainer);
+        const promoContainer = promo.container;
+        if (promoContainer) {
+          promoAndDismissContainer.prepend(promoContainer);
+          promoAndDismissContainer.hidden = false;
+        }
       }
       this.dispatchEvent(new Event(
           'ntp-middle-slot-promo-loaded', {bubbles: true, composed: true}));
     });
   }
+
+  private onDismissPromoButtonClick_() {
+    const promoAndDismissContainer =
+        this.shadowRoot!.getElementById('promoAndDismissContainer');
+    assert(promoAndDismissContainer);
+    promoAndDismissContainer.hidden = true;
+    NewTabPageProxy.getInstance().handler.blocklistPromo(
+        this.middleSlotPromoId_);
+  }
 }
 
 declare global {
diff --git a/chrome/browser/resources/new_tab_page/realbox/realbox_icon.html b/chrome/browser/resources/new_tab_page/realbox/realbox_icon.html
index 978c20c..ceb444f1 100644
--- a/chrome/browser/resources/new_tab_page/realbox/realbox_icon.html
+++ b/chrome/browser/resources/new_tab_page/realbox/realbox_icon.html
@@ -76,5 +76,7 @@
 <div id="container" style="--container-bg-color:
     [[containerBgColor_(imageSrc_, match.imageDominantColor)]];">
   <image id="image" src="[[imageSrc_]]"></image>
-  <div id="icon" style="[[iconStyle_]]"></div>
+  <!--Note: Do not remove the '$' in '$=' below, otherwise the 'style' attribute
+      is erroneously removed by the HTML minifier. -->
+  <div id="icon" style$="[[iconStyle_]]"></div>
 </div>
diff --git a/chrome/browser/resources/settings/chromeos/BUILD.gn b/chrome/browser/resources/settings/chromeos/BUILD.gn
index 6e2a706..8345f4a 100644
--- a/chrome/browser/resources/settings/chromeos/BUILD.gn
+++ b/chrome/browser/resources/settings/chromeos/BUILD.gn
@@ -21,7 +21,6 @@
 web_components_manifest = "web_components_manifest.json"
 non_web_component_files_manifest = "non_web_component_files_manifest.json"
 browser_settings_tsc_manifest = "browser_settings_tsc_manifest.json"
-mojo_manifest = "mojo_manifest.json"
 mojo_webui_manifest = "mojo_webui_manifest.json"
 external_mojo_manifest = "external_mojo_manifest.json"
 
@@ -44,7 +43,6 @@
 
     deps = [
       ":preprocess_browser_settings_tsc",
-      ":preprocess_mojo",
       ":preprocess_mojo_webui",
       ":preprocess_non_web_component_files",
       ":preprocess_web_components",
@@ -97,20 +95,6 @@
   }
 }
 
-# OS Settings specific mojo files, bundled in optimized builds.
-# TODO(crbug.com/1179821) remove this build rule once these lite bindings
-# have been converted to WebUI bindings
-preprocess_if_expr("preprocess_mojo") {
-  deps = [ "//chrome/browser/ui/webui/settings/chromeos/constants:mojom_js" ]
-  in_folder = get_path_info("../../../ui/webui/settings/chromeos/", "gen_dir")
-  out_folder = "$target_gen_dir/$preprocessed_folder"
-  out_manifest = "$target_gen_dir/$mojo_manifest"
-  in_files = [
-    "constants/routes.mojom-lite.js",
-    "constants/setting.mojom-lite.js",
-  ]
-}
-
 # Preprocess all WebUI mojom files, which are bundled in optimized builds.
 preprocess_if_expr("preprocess_mojo_webui") {
   deps = [
@@ -293,7 +277,6 @@
   } else {
     deps += [
       ":preprocess_browser_settings_tsc",
-      ":preprocess_mojo",
       ":preprocess_mojo_webui",
       ":preprocess_non_web_component_files",
       ":preprocess_web_components",
@@ -305,7 +288,6 @@
       "$target_gen_dir/$web_components_manifest",
       "$target_gen_dir/$non_web_component_files_manifest",
       "$target_gen_dir/$browser_settings_tsc_manifest",
-      "$target_gen_dir/$mojo_manifest",
       "$target_gen_dir/$mojo_webui_manifest",
     ]
     resource_path_rewrites += [ "chromeos/os_settings.html|os_settings.html" ]
diff --git a/chrome/browser/resources/settings/chromeos/os_about_page/BUILD.gn b/chrome/browser/resources/settings/chromeos/os_about_page/BUILD.gn
index 5b3be737..75d3647 100644
--- a/chrome/browser/resources/settings/chromeos/os_about_page/BUILD.gn
+++ b/chrome/browser/resources/settings/chromeos/os_about_page/BUILD.gn
@@ -97,10 +97,6 @@
     "..:route_observer_behavior",
     "../..:router",
     "../os_settings_page:main_page_behavior",
-
-    # TODO(crbug.com/1179821) Remove this dependency when os_about_page
-    # no longer uses the global namespace "chromeos.settings.mojom"
-    "//chrome/browser/ui/webui/settings/chromeos/constants:mojom_js_library_for_compile",
     "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
     "//ui/webui/resources/js:i18n_behavior.m",
     "//ui/webui/resources/js:load_time_data.m",
diff --git a/chrome/browser/resources/settings/chromeos/os_settings.js b/chrome/browser/resources/settings/chromeos/os_settings.js
index 974814b..28c000e 100644
--- a/chrome/browser/resources/settings/chromeos/os_settings.js
+++ b/chrome/browser/resources/settings/chromeos/os_settings.js
@@ -98,9 +98,11 @@
 import './settings_scheduler_slider/settings_scheduler_slider.js';
 
 import * as PersonalizationSearchMojom from '../mojom-webui/personalization/search.mojom-webui.js';
+import * as RoutesConstantsMojom from '../mojom-webui/routes.mojom-webui.js';
 import * as SearchMojom from '../mojom-webui/search/search.mojom-webui.js';
 import * as SearchResultIconMojom from '../mojom-webui/search/search_result_icon.mojom-webui.js';
 import * as UserActionRecorderMojom from '../mojom-webui/search/user_action_recorder.mojom-webui.js';
+import * as SettingConstantsMojom from '../mojom-webui/setting.mojom-webui.js';
 
 export {PermissionType, TriState} from 'chrome://resources/cr_components/app_management/app_management.mojom-webui.js';
 export {BrowserProxy as AppManagementComponentBrowserProxy} from 'chrome://resources/cr_components/app_management/browser_proxy.js';
@@ -169,7 +171,9 @@
 export {getSettingsSearchHandler, setSettingsSearchHandlerForTesting} from './settings_search_handler.js';
 export {
   PersonalizationSearchMojom,
+  RoutesConstantsMojom,
   SearchMojom,
   SearchResultIconMojom,
+  SettingConstantsMojom,
   UserActionRecorderMojom,
 };
diff --git a/chrome/browser/resources/settings/chromeos/settings_search_handler.js b/chrome/browser/resources/settings/chromeos/settings_search_handler.js
index 2949dd0..b9640a1 100644
--- a/chrome/browser/resources/settings/chromeos/settings_search_handler.js
+++ b/chrome/browser/resources/settings/chromeos/settings_search_handler.js
@@ -2,12 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import '../constants/routes.mojom-lite.js';
-import '../constants/setting.mojom-lite.js';
-
 import {SearchHandler, SearchHandlerInterface} from '../mojom-webui/search/search.mojom-webui.js';
 
-
 /**
  * @fileoverview
  * Provides functions used for OS settings search.
diff --git a/chrome/browser/resources/side_panel/customize_chrome/BUILD.gn b/chrome/browser/resources/side_panel/customize_chrome/BUILD.gn
index 6e86a83..1c26094 100644
--- a/chrome/browser/resources/side_panel/customize_chrome/BUILD.gn
+++ b/chrome/browser/resources/side_panel/customize_chrome/BUILD.gn
@@ -2,32 +2,14 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-import("//chrome/common/features.gni")
-import("//tools/grit/grit_rule.gni")
-import("//ui/webui/resources/tools/generate_grd.gni")
+import("//chrome/browser/resources/tools/build_webui.gni")
 
 assert(!is_android)
 
-grit("resources") {
-  defines = chrome_grit_defines
-
-  # These arguments are needed since the grd is generated at build time.
-  enable_input_discovery_for_gn_analyze = false
-  source = "$target_gen_dir/resources.grd"
-  deps = [ ":build_grd" ]
-
-  outputs = [
-    "grit/side_panel_customize_chrome_resources.h",
-    "grit/side_panel_customize_chrome_resources_map.cc",
-    "grit/side_panel_customize_chrome_resources_map.h",
-    "side_panel_customize_chrome_resources.pak",
-  ]
-  output_dir = "$root_gen_dir/chrome"
-}
-
-generate_grd("build_grd") {
+build_webui("build") {
   grd_prefix = "side_panel_customize_chrome"
-  out_grd = "$target_gen_dir/resources.grd"
-  input_files = [ "customize_chrome.html" ]
-  input_files_base_dir = rebase_path(".", "//")
+
+  static_files = [ "customize_chrome.html" ]
+
+  non_web_component_files = [ "dummy.ts" ]
 }
diff --git a/chrome/browser/resources/side_panel/customize_chrome/dummy.ts b/chrome/browser/resources/side_panel/customize_chrome/dummy.ts
new file mode 100644
index 0000000..d1a3e57
--- /dev/null
+++ b/chrome/browser/resources/side_panel/customize_chrome/dummy.ts
@@ -0,0 +1,5 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Dummy ts file to set up build_webui(). Replaced in follow up CL.
\ No newline at end of file
diff --git a/chrome/browser/resources/side_panel/customize_chrome/tsconfig_base.json b/chrome/browser/resources/side_panel/customize_chrome/tsconfig_base.json
new file mode 100644
index 0000000..a963130c
--- /dev/null
+++ b/chrome/browser/resources/side_panel/customize_chrome/tsconfig_base.json
@@ -0,0 +1,6 @@
+{
+ "extends": "../../../../../tools/typescript/tsconfig_base.json",
+ "compilerOptions": {
+    "allowJs": true
+ }
+}
diff --git a/chrome/browser/resources/side_panel/reading_list/app.html b/chrome/browser/resources/side_panel/reading_list/app.html
index 9d0deef..92aaa3d 100644
--- a/chrome/browser/resources/side_panel/reading_list/app.html
+++ b/chrome/browser/resources/side_panel/reading_list/app.html
@@ -33,7 +33,7 @@
             var(--cr-hover-background-color));
     --hover-border-color: var(--border-color);
     border-radius: 4px;
-    margin: 8px 16px 0 16px;
+    margin: 16px 16px 0 16px;
     padding: 8px;
     transition: background-color 300ms cubic-bezier(0.4, 0, 0.2, 1);
   }
diff --git a/chrome/browser/resources/signin/sync_confirmation/sync_confirmation_app.html b/chrome/browser/resources/signin/sync_confirmation/sync_confirmation_app.html
index 299151965..fa945d7 100644
--- a/chrome/browser/resources/signin/sync_confirmation/sync_confirmation_app.html
+++ b/chrome/browser/resources/signin/sync_confirmation/sync_confirmation_app.html
@@ -64,6 +64,11 @@
     text-align: center;
   }
 
+  .signin-intercept-design .heading {
+    line-height: 24px;
+    margin-bottom: 24px;
+  }
+
   #content-container {
     /* Saves space for button row. */
     padding-bottom: 96px;
@@ -77,6 +82,19 @@
     padding: 0 24px;
   }
 
+  .signin-intercept-design .message-container {
+    font-size: 15px;
+    font-style: normal;
+    font-weight: 400;
+    line-height: 24px;
+    padding: 0 57px;
+    text-align: center;
+  }
+
+  .signin-intercept-design .secondary {
+    color: var(--cr-primary-text-color);
+  }
+
   @media (prefers-color-scheme: light) {
     #grey-banner {
       background: var(--paper-grey-50);
@@ -227,7 +245,8 @@
     <div id="illustration"></div>
     <img src="[[accountImageSrc_]]">
   </div>
-  <div id="content-container">
+  <div id="content-container"
+      class$="[[getSigninInterceptDesignClass_(isSigninInterceptFre_)]]">
     <h1 id="syncConfirmationHeading" class="heading" consent-description>
       $i18n{syncConfirmationTitle}
     </h1>
@@ -237,9 +256,11 @@
         $i18n{syncConfirmationSyncInfoDesc}
       </div>
     </div>
-    <div id="modal-footer" class="message-container secondary">
-      $i18n{syncConfirmationSettingsInfo}
-    </div>
+    <template is="dom-if" if="[[!isSigninInterceptFre_]]">
+      <div id="modal-footer" class="message-container secondary">
+        $i18n{syncConfirmationSettingsInfo}
+      </div>
+    </template>
     <div class="action-row">
       <paper-spinner-lite active="[[anyButtonClicked_]]"></paper-spinner-lite>
       <div class="action-container">
diff --git a/chrome/browser/resources/signin/sync_confirmation/sync_confirmation_app.ts b/chrome/browser/resources/signin/sync_confirmation/sync_confirmation_app.ts
index 5470788..970abd7 100644
--- a/chrome/browser/resources/signin/sync_confirmation/sync_confirmation_app.ts
+++ b/chrome/browser/resources/signin/sync_confirmation/sync_confirmation_app.ts
@@ -57,6 +57,22 @@
         },
       },
 
+      isSigninInterceptFre_: {
+        type: Boolean,
+        value() {
+          return loadTimeData.getBoolean('isSigninInterceptFre');
+        },
+      },
+
+      syncConfirmationWelcomeTitle_: {
+        type: String,
+        value() {
+          return loadTimeData.valueExists('syncConfirmationWelcomeTitle') ?
+              loadTimeData.getString('syncConfirmationWelcomeTitle') :
+              '';
+        },
+      },
+
       showEnterpriseBadge_: {
         type: Boolean,
         value: false,
@@ -67,6 +83,8 @@
   private accountImageSrc_: string;
   private anyButtonClicked_: boolean;
   private isModalDialog_: boolean;
+  private isSigninInterceptFre_: boolean;
+  private syncConfirmationWelcomeTitle_: string;
   private showEnterpriseBadge_: boolean;
   private syncConfirmationBrowserProxy_: SyncConfirmationBrowserProxy =
       SyncConfirmationBrowserProxyImpl.getInstance();
@@ -132,6 +150,11 @@
     this.accountImageSrc_ = accountInfo.src;
     this.showEnterpriseBadge_ = accountInfo.showEnterpriseBadge;
   }
+
+  private getSigninInterceptDesignClass_(isSigninInterceptFre: boolean):
+      string {
+    return isSigninInterceptFre ? 'signin-intercept-design' : '';
+  }
 }
 
 declare global {
diff --git a/chrome/browser/resources/tab_search/app.html b/chrome/browser/resources/tab_search/app.html
index f2a0a9ef..56b5fca7 100644
--- a/chrome/browser/resources/tab_search/app.html
+++ b/chrome/browser/resources/tab_search/app.html
@@ -78,6 +78,8 @@
           <cr-expand-button aria-label="$i18n{recentlyClosedExpandA11yLabel}"
               expand-icon="cr:arrow-drop-down" collapse-icon="cr:arrow-drop-up"
               expanded="[[item.expanded]]"
+              expand-title="$i18n{expandRecentlyClosed}"
+              collapse-title="$i18n{collapseRecentlyClosed}"
               on-expanded-changed="onTitleExpandChanged_" no-hover>
           </cr-expand-button>
         </template>
diff --git a/chrome/browser/search_resumption/java/res/layout/search_resumption_module_layout.xml b/chrome/browser/search_resumption/java/res/layout/search_resumption_module_layout.xml
index 8402ce2..8093a57b 100644
--- a/chrome/browser/search_resumption/java/res/layout/search_resumption_module_layout.xml
+++ b/chrome/browser/search_resumption/java/res/layout/search_resumption_module_layout.xml
@@ -23,16 +23,32 @@
         android:paddingEnd="@dimen/search_resumption_module_header_padding_start"
         android:contentDescription="@string/search_resumption_module_title">
 
-        <TextView
+        <LinearLayout
             android:id="@+id/header_text"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:singleLine="true"
-            android:text="@string/search_resumption_module_title"
-            android:textAlignment="viewStart"
-            android:layout_toStartOf="@+id/header_option"
+            android:orientation="vertical"
             android:layout_alignParentStart="true"
-            android:textAppearance="@style/TextAppearance.TextMediumThick.Secondary"/>
+            android:layout_toStartOf="@+id/header_option">
+
+            <TextView
+                android:id="@+id/header_title_text"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:singleLine="true"
+                android:text="@string/search_resumption_module_title_short"
+                android:textAlignment="viewStart"
+                android:textAppearance="@style/TextAppearance.TextAccentMediumThick.Secondary"/>
+
+            <TextView
+                android:id="@+id/header_sub_title_text"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:singleLine="true"
+                android:text="@string/search_resumption_module_subtitle"
+                android:textAlignment="viewStart"
+                android:textAppearance="@style/TextAppearance.TextSmall.Secondary"/>
+        </LinearLayout>
 
         <ImageView
             android:id="@+id/header_option"
diff --git a/chrome/browser/speech/tts_client_lacros.cc b/chrome/browser/speech/tts_client_lacros.cc
index 4babbc0..e287804 100644
--- a/chrome/browser/speech/tts_client_lacros.cc
+++ b/chrome/browser/speech/tts_client_lacros.cc
@@ -31,7 +31,9 @@
 
   // TODO(crbug.com/1251979): Support secondary profiles when it becomes
   // available for Lacros.
-  DCHECK(is_primary_profile);
+  if (!is_primary_profile)
+    return;
+
   service->GetRemote<crosapi::mojom::Tts>()->RegisterTtsClient(
       receiver_.BindNewPipeAndPassRemoteWithVersion(), browser_context_id_,
       /*is_primary_profile=*/is_primary_profile);
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index a664bb6..3062f034 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -1329,8 +1329,6 @@
       "tabs/pinned_tab_service.h",
       "tabs/pinned_tab_service_factory.cc",
       "tabs/pinned_tab_service_factory.h",
-      "tabs/saved_tab_groups/saved_tab_group.cc",
-      "tabs/saved_tab_groups/saved_tab_group.h",
       "tabs/saved_tab_groups/saved_tab_group_keyed_service.cc",
       "tabs/saved_tab_groups/saved_tab_group_keyed_service.h",
       "tabs/saved_tab_groups/saved_tab_group_model.cc",
@@ -1798,6 +1796,7 @@
       "//components/reading_list/features:flags",
       "//components/safe_browsing/core/common:safe_browsing_policy_handler",
       "//components/safety_check",
+      "//components/saved_tab_groups:core",
       "//components/search_provider_logos",
       "//components/services/app_service/public/cpp:app_types",
       "//components/services/app_service/public/cpp:app_update",
@@ -3398,6 +3397,8 @@
       "views/privacy_sandbox/privacy_sandbox_notice_bubble.h",
       "views/profiles/incognito_menu_view.cc",
       "views/profiles/incognito_menu_view.h",
+      "views/profiles/profile_menu_coordinator.cc",
+      "views/profiles/profile_menu_coordinator.h",
       "views/profiles/profile_menu_view_base.cc",
       "views/profiles/profile_menu_view_base.h",
       "views/profiles/signin_view_controller_delegate_views.cc",
diff --git a/chrome/browser/ui/DEPS b/chrome/browser/ui/DEPS
index 2f95b19a..6a1fa12 100644
--- a/chrome/browser/ui/DEPS
+++ b/chrome/browser/ui/DEPS
@@ -13,6 +13,7 @@
   "+components/page_load_metrics/browser",
   "+components/qr_code_generator",
   "+components/safety_check",
+  "+components/saved_tab_groups",
   "+components/segmentation_platform/content",
   "+components/soda",
   "+components/translate/content/android",
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd
index e4e5416..49a0ac1 100644
--- a/chrome/browser/ui/android/strings/android_chrome_strings.grd
+++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd
@@ -1091,8 +1091,8 @@
       <message name="IDS_PRIVACY_SANDBOX_NOTICE_SHEET_TITLE" desc="CONTEXT: there are updates to the Chrome browser each month. Just after the user accepts the latest update, this message will appear. The title of the page. * “Help us” is intended to convey a sense of collaboration. Privacy Sandbox is an ongoing multi-year effort. There are sites participating to help us and we also need users to agree to these trials so that we can measure the effectiveness of the features we're building. * “build” is intended to convey that this is a process. The user is agreeing to an effort rather than a stable set of features. Something like “make” doesn't have the same nuance. * See www.privacysandbox.com for more context.">
         Help us build a better web
       </message>
-      <message name="IDS_PRIVACY_SANDBOX_NOTICE_SHEET_DESCRIPTION" desc="* “During the trials”: The trials happen in addition to today’s current system (which is based on third-party cookies). In other words, even by agreeing to or remaining in a trial, the user’s core experience doesn’t change much. This is an experiment, and we need the user to understand as much. * “estimate your interests”: Topics of interest include things like “Live comedy” and “Rock music”. Chrome estimates these interests based on the sites users visit. It’s an “estimation”, and we don’t want to suggest that we know with certainty the user’s interests. Avoid words like “guess”, “establish”, “define”, etc. (in place of “estimate”).">
-        During trials, Chrome is exploring ways to limit spam, fraud, and sharing between sites. Chrome also <ph name="BEGIN_LINK">&lt;link&gt;</ph>estimates your interests<ph name="END_LINK">&lt;/link&gt;</ph> that sites can use to show you ads. You can manage your interests in settings.
+      <message name="IDS_PRIVACY_SANDBOX_NOTICE_SHEET_DESCRIPTION" desc="* “ad spam”: Spam related to web advertising. * “estimate your interests”: Topics of interest include things like “Live comedy” and “Rock music”. Chrome estimates these interests based on the sites users visit. It’s an “estimation”, and we don’t want to suggest that we know with certainty the user’s interests. Avoid words like “guess”, “establish”, “define”, etc. (in place of “estimate”).">
+        Chrome is exploring ways to limit ad spam, fraud, and sharing between sites. Chrome also <ph name="BEGIN_LINK">&lt;link&gt;</ph>estimates your interests<ph name="END_LINK">&lt;/link&gt;</ph> that sites can use to show you ads. You can manage your interests in settings.
       </message>
 
       <!-- Secure DNS Settings.  Used by //chrome/browser/privacy. -->
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_PRIVACY_SANDBOX_NOTICE_SHEET_DESCRIPTION.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_PRIVACY_SANDBOX_NOTICE_SHEET_DESCRIPTION.png.sha1
index 50dbffa..96f5b2cf 100644
--- a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_PRIVACY_SANDBOX_NOTICE_SHEET_DESCRIPTION.png.sha1
+++ b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_PRIVACY_SANDBOX_NOTICE_SHEET_DESCRIPTION.png.sha1
@@ -1 +1 @@
-9f27660570f53ee8dc580168160c1d2dbb8126b1
\ No newline at end of file
+bf9747db03de532e7297d606b1c7637ab8515bc0
\ No newline at end of file
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_af.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_af.xtb
index 8d925906..ff7b0e7 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_af.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_af.xtb
@@ -975,6 +975,7 @@
 <translation id="6394791151443660613">Soek vir: <ph name="SEARCH_QUERY" /></translation>
 <translation id="6395288395575013217">SKAKEL</translation>
 <translation id="6397616442223433927">Weer aanlyn</translation>
+<translation id="6401458660421980302">Om hierdie oortjie na ’n ander toestel toe te stuur, moet jy daar by Chrome aanmeld</translation>
 <translation id="6402652558933147609"><ph name="ERROR_CODE" /> op <ph name="VIOLATED_URL" /></translation>
 <translation id="6404511346730675251">Wysig boekmerk</translation>
 <translation id="6406506848690869874">Sinkronisering</translation>
@@ -1026,6 +1027,7 @@
 <translation id="6600954340915313787">Na Chrome gekopieer</translation>
 <translation id="661266467055912436">Verbeter sekuriteit vir jou en almal op die web.</translation>
 <translation id="6618554661997243500">Tik op die Tuisknoppie om topwerwe en -berigte te sien</translation>
+<translation id="6621391692573306628">Om hierdie oortjie na ’n ander toestel toe te stuur, moet jy op albei toestelle by Chrome aanmeld</translation>
 <translation id="6627583120233659107">Wysig vouer</translation>
 <translation id="6633067410344541938">Ontsluit Incognito</translation>
 <translation id="6636623428211296678">Verken meer instellings hieronder of maak nou klaar</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb
index 7ff0a02..1ea1a43 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb
@@ -975,6 +975,7 @@
 <translation id="6394791151443660613">جستجو: <ph name="SEARCH_QUERY" /></translation>
 <translation id="6395288395575013217">پیوند</translation>
 <translation id="6397616442223433927">دوباره آنلاین شدید</translation>
+<translation id="6401458660421980302">‏برای ارسال این برگه به دستگاهی دیگر، در آنجا به سیستم Chrome وارد شوید</translation>
 <translation id="6402652558933147609"><ph name="ERROR_CODE" /> در <ph name="VIOLATED_URL" /></translation>
 <translation id="6404511346730675251">ویرایش نشانک</translation>
 <translation id="6406506848690869874">همگام‌سازی</translation>
@@ -1026,6 +1027,7 @@
 <translation id="6600954340915313787">‏کپی در Chrome</translation>
 <translation id="661266467055912436">امنیت را برای شما و همه کاربران دیگر وب بهبود می‌بخشد.</translation>
 <translation id="6618554661997243500">برای دیدن سایت‌ها و داستان‌های برتر ویژه شما، روی دکمه «صفحه اصلی» ضربه بزنید</translation>
+<translation id="6621391692573306628">‏برای ارسال این برگه به دستگاهی دیگر، در هردو دستگاه به سیستم Chrome وارد شوید</translation>
 <translation id="6627583120233659107">ویرایش پوشه</translation>
 <translation id="6633067410344541938">باز کردن قفل «حالت ناشناس»</translation>
 <translation id="6636623428211296678">در بخش زیر تنظیمات بیشتری را کاوش کنید یا همین‌حالا کارتان را به‌پایان برسانید</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb
index 2e405437..1884a67 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb
@@ -78,6 +78,7 @@
 <translation id="1344653310988386453">Includi link al testo evidenziato</translation>
 <translation id="1347468774581902829">Gestisci attività</translation>
 <translation id="1360432990279830238">Uscire e disattivare la sincronizzazione?</translation>
+<translation id="1366525380420346469">Quando la funzionalità è attiva</translation>
 <translation id="1373696734384179344">Memoria non sufficiente per scaricare i contenuti selezionati.</translation>
 <translation id="1376578503827013741">Elaborazione...</translation>
 <translation id="1382912999714108023">Non visualizzi le informazioni correnti? Contatta la tua banca per aggiornarle.</translation>
@@ -513,6 +514,7 @@
 <translation id="3810973564298564668">Gestisci</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> download eliminati</translation>
 <translation id="3819183753496523827">Sei offline. Controlla la connessione a Internet e riprova.</translation>
+<translation id="3830886834687455630">Aggiorna Google Play Services per controllare le tue password</translation>
 <translation id="3845098929839618392">Apri in scheda incognito</translation>
 <translation id="3856096718352044181">Verifica che questo fornitore sia valido e riprova più tardi</translation>
 <translation id="3858860766373142691">Nome</translation>
@@ -733,6 +735,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">Impossibile creare codice QR</translation>
 <translation id="5039804452771397117">Consenti</translation>
+<translation id="504456571576643789">Aspetti da considerare</translation>
 <translation id="5054455334322721892"><ph name="BEGIN_LINK1" />Altri tipi di attività<ph name="END_LINK1" /> potrebbero essere salvati nel tuo Account Google se hai eseguito l'accesso. Puoi eliminarli in qualsiasi momento.</translation>
 <translation id="5061533557687621530">Per controllare le condizioni meteo, tocca il microfono e di' "Che tempo fa oggi?"</translation>
 <translation id="506254248375231072">Nessuna scheda</translation>
@@ -975,6 +978,7 @@
 <translation id="6394791151443660613">Cerca: <ph name="SEARCH_QUERY" /></translation>
 <translation id="6395288395575013217">LINK</translation>
 <translation id="6397616442223433927">Di nuovo online</translation>
+<translation id="6401458660421980302">Per inviare questa scheda a un altro dispositivo, accedi a Chrome su quel dispositivo</translation>
 <translation id="6402652558933147609"><ph name="ERROR_CODE" /> su <ph name="VIOLATED_URL" /></translation>
 <translation id="6404511346730675251">Modifica preferito</translation>
 <translation id="6406506848690869874">Sincronizzazione</translation>
@@ -1026,6 +1030,7 @@
 <translation id="6600954340915313787">Copiata in Chrome</translation>
 <translation id="661266467055912436">Migliora il livello di sicurezza per te e per chiunque sul Web.</translation>
 <translation id="6618554661997243500">Per vedere notizie e siti principali personalizzati, tocca il pulsante Home</translation>
+<translation id="6621391692573306628">Per inviare questa scheda a un altro dispositivo, accedi a Chrome su entrambi i dispositivi</translation>
 <translation id="6627583120233659107">Modifica cartella</translation>
 <translation id="6633067410344541938">Sblocca la modalità in incognito</translation>
 <translation id="6636623428211296678">Esamina altre impostazioni qui sotto oppure termina ora</translation>
@@ -1214,6 +1219,7 @@
 <translation id="7641339528570811325">Cancella dati di navigazione…</translation>
 <translation id="7646772052135772216">La sincronizzazione delle password non funziona</translation>
 <translation id="7655900163790317559">Attivazione del Bluetooth in corso…</translation>
+<translation id="7656862631699126784">Attiva il blocco delle schede di navigazione in incognito</translation>
 <translation id="7658239707568436148">Annulla</translation>
 <translation id="7663313374500954251">Questo browser è gestito da <ph name="PARENT_NAME" />.</translation>
 <translation id="7665369617277396874">Aggiungi account</translation>
@@ -1516,6 +1522,7 @@
 <translation id="9159716826369098114">Ripristina il gruppo di <ph name="TAB_COUNT" /> schede come nuovo gruppo di schede in background.</translation>
 <translation id="9169507124922466868">La cronologia di navigazione è aperta fino a metà</translation>
 <translation id="9187955620966010988">Reazione modificata</translation>
+<translation id="9190276265094487094">La tua cronologia sarà disponibile su tutti i dispositivi sincronizzati per poter continuare ciò che stavi facendo</translation>
 <translation id="9199368092038462496">{NUM_MINS,plural, =1{Eseguito 1 minuto fa}other{Eseguito # minuti fa}}</translation>
 <translation id="9204836675896933765">1 file rimanente</translation>
 <translation id="9205933215779845960">Impossibile trovare la pagina. Controlla l'ortografia o prova a effettuare una ricerca su <ph name="SEARCH_ENGINE" />.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb
index 1e3f66c..8b86fb6 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb
@@ -78,6 +78,7 @@
 <translation id="1344653310988386453">မြင်သာအောင်လုပ်ထားသော စာသားသို့ လင့်ခ်ကို ထည့်သွင်းပါ</translation>
 <translation id="1347468774581902829">လုပ်ဆောင်ချက်ကို စီမံခန့်ခွဲရန်</translation>
 <translation id="1360432990279830238">ထွက်ပြီး စင့်ခ်လုပ်ခြင်းကို ပိတ်လိုသလား။</translation>
+<translation id="1366525380420346469">ဖွင့်ထားပါက</translation>
 <translation id="1373696734384179344">ရွေးချယ်ထားသည့် အကြောင်းအရာအား ဒေါင်းလုပ်လုပ်ရန် မှတ်ဉာဏ် မလုံလောက်ပါ။</translation>
 <translation id="1376578503827013741">တွက်ချက်နေသည်…</translation>
 <translation id="1382912999714108023">လက်ရှိအချက်အလက်ကို မတွေ့ပါက အချက်အလက်သစ်ထည့်ရန် သင့်ဘဏ်ကိုဆက်သွယ်ပါ။</translation>
@@ -513,6 +514,7 @@
 <translation id="3810973564298564668">စီမံရန်</translation>
 <translation id="3819178904835489326">ဒေါင်းလုဒ် <ph name="NUMBER_OF_DOWNLOADS" /> ခုကို ဖျက်လိုက်သည်</translation>
 <translation id="3819183753496523827">သင် အော့ဖ်လိုင်းဖြစ်နေသည်။ အင်တာနက်ချိတ်ဆက်မှုကို စစ်ဆေးပြီး ထပ်စမ်းကြည့်ပါ။</translation>
+<translation id="3830886834687455630">စကားဝှက်များစစ်ရန် Google Play ဝန်ဆောင်မှုများကို အပ်ဒိတ်လုပ်ပါ</translation>
 <translation id="3845098929839618392">ရုပ်ဖျက်တဘ်တွင် ဖွင့်ရန်</translation>
 <translation id="3856096718352044181">မှန်ကန်သည့် ဝန်ဆောင်မှုပေးသူ ဟုတ်မဟုတ် အတည်ပြုပါ သို့မဟုတ် နောက်မှ ထပ်စမ်းကြည့်ပါ</translation>
 <translation id="3858860766373142691">အမည်</translation>
@@ -733,6 +735,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">QR ကုဒ် ပြုလုပ်၍မရပါ</translation>
 <translation id="5039804452771397117">ခွင့်ပြုရန်</translation>
+<translation id="504456571576643789">စဉ်းစားရန် အချက်များ</translation>
 <translation id="5054455334322721892">သင်လက်မှတ်ထိုးဝင်သောအခါ <ph name="BEGIN_LINK1" />အခြားသော လုပ်ဆောင်ချက်များ<ph name="END_LINK1" /> ကို သင်၏ Google Account တွင် သိမ်းထားနိုင်သည်။ ၎င်းတို့ကို အချိန်မရွေး ဖျက်နိုင်သည်။</translation>
 <translation id="5061533557687621530">မိုးလေဝသအခြေအနေ သိရှိရန် မိုက်ကိုတို့ပြီး “What’s the weather today?” ဟု မေးကြည့်ပါ</translation>
 <translation id="506254248375231072">တဘ် မရှိပါ</translation>
@@ -1215,6 +1218,7 @@
 <translation id="7641339528570811325">ဖွင့်ကြည့်ထားသည့် မှတ်တမ်းဒေတာများကို ရှင်းလင်းရန်…</translation>
 <translation id="7646772052135772216">စကားဝှက်စင့်ခ်လုပ်ခြင်းကို အသုံးပြု၍မရပါ</translation>
 <translation id="7655900163790317559">ဘလူးတုသ် ဖွင့်နေသည်…</translation>
+<translation id="7656862631699126784">‘ရုပ်ဖျက်လော့ခ်’ ဖွင့်ရန်</translation>
 <translation id="7658239707568436148">မလုပ်တော့</translation>
 <translation id="7663313374500954251">ဤဘရောင်ဇာကို <ph name="PARENT_NAME" /> ကစီမံသည်။</translation>
 <translation id="7665369617277396874">အကောင့် ထည့်ရန်</translation>
@@ -1517,6 +1521,7 @@
 <translation id="9159716826369098114">နောက်ခံတဘ်အုပ်စုအသစ်အဖြစ် တဘ် <ph name="TAB_COUNT" /> ခု ပါသည့် တဘ်အုပ်စုကို ပြန်ယူနိုင်ပါသည်။</translation>
 <translation id="9169507124922466868">လမ်းညွှန်မှု မှတ်တမ်း တစ်ဝက်ဖွင့်ထားသည်</translation>
 <translation id="9187955620966010988">တုံ့ပြန်မှု ပြင်ဆင်လိုက်သည်</translation>
+<translation id="9190276265094487094">စင့်ခ်လုပ်ထားသော စက်အားလုံးတွင် သင်၏မှတ်တမ်း ရရှိမည်ဖြစ်သဖြင့် သင်လုပ်ဆောင်နေသည်များကို ရှေ့ဆက်နိုင်သည်</translation>
 <translation id="9199368092038462496">{NUM_MINS,plural, =1{လွန်ခဲ့သော ၁ မိနစ်က စစ်ဆေးခဲ့သည်}other{လွန်ခဲ့သော # မိနစ်က စစ်ဆေးခဲ့သည်}}</translation>
 <translation id="9204836675896933765">ဖိုင် ၁ ဖိုင် ကျန်ပါသည်</translation>
 <translation id="9205933215779845960">၎င်းစာမျက်နှာ ရှာမတွေ့ပါ။ စာလုံးပေါင်းစစ်ဆေးပါ (သို့) <ph name="SEARCH_ENGINE" /> တွင် ရှာကြည့်ပါ။</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb
index 3af1ea9..aeab269 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb
@@ -978,6 +978,7 @@
 <translation id="6394791151443660613">Søk: <ph name="SEARCH_QUERY" /></translation>
 <translation id="6395288395575013217">LINK</translation>
 <translation id="6397616442223433927">På nettet igjen</translation>
+<translation id="6401458660421980302">For å sende denne fanen til en annen enhet, logg på Chrome der</translation>
 <translation id="6402652558933147609"><ph name="ERROR_CODE" /> på <ph name="VIOLATED_URL" /></translation>
 <translation id="6404511346730675251">Rediger bokmerket</translation>
 <translation id="6406506848690869874">Synkroniser</translation>
@@ -1029,6 +1030,7 @@
 <translation id="6600954340915313787">Kopiert til Chrome</translation>
 <translation id="661266467055912436">Øker sikkerheten for deg og alle andre på nettet.</translation>
 <translation id="6618554661997243500">For å se anbefalte nettsteder og nyhetssaker for deg, trykk på knappen Gå til startsiden</translation>
+<translation id="6621391692573306628">For å sende denne fanen til en annen enhet, logg på Chrome på begge enhetene</translation>
 <translation id="6627583120233659107">Rediger mappen</translation>
 <translation id="6633067410344541938">Lås opp inkognitomodus</translation>
 <translation id="6636623428211296678">Utforsk flere innstillinger nedenfor, eller fullfør nå</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb
index 5f52eef..ac7adb82 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb
@@ -78,6 +78,7 @@
 <translation id="1344653310988386453">Dołącz link do podświetlenia</translation>
 <translation id="1347468774581902829">Zarządzaj aktywnością</translation>
 <translation id="1360432990279830238">Wylogować i wyłączyć synchronizację?</translation>
+<translation id="1366525380420346469">Kiedy funkcja jest włączona</translation>
 <translation id="1373696734384179344">Za mało pamięci, by pobrać te treści.</translation>
 <translation id="1376578503827013741">Obliczam…</translation>
 <translation id="1382912999714108023">Nie widzisz aktualnych informacji? Skontaktuj się z bankiem, aby je zaktualizować.</translation>
@@ -513,6 +514,7 @@
 <translation id="3810973564298564668">Zarządzaj</translation>
 <translation id="3819178904835489326">Usunięte pobrane pliki: <ph name="NUMBER_OF_DOWNLOADS" /></translation>
 <translation id="3819183753496523827">Jesteś offline. Sprawdź połączenie z internetem i spróbuj ponownie.</translation>
+<translation id="3830886834687455630">Aby sprawdzić swoje hasła, zaktualizuj Usługi Google Play</translation>
 <translation id="3845098929839618392">Otwórz w karcie incognito</translation>
 <translation id="3856096718352044181">Sprawdź, czy jest to prawidłowy dostawca, lub spróbuj ponownie później</translation>
 <translation id="3858860766373142691">Nazwa</translation>
@@ -733,6 +735,7 @@
 <translation id="5016205925109358554">Szeryfowa</translation>
 <translation id="5032430150487044192">Nie udało się utworzyć kodu QR</translation>
 <translation id="5039804452771397117">Zezwalaj</translation>
+<translation id="504456571576643789">Istotne kwestie</translation>
 <translation id="5054455334322721892"><ph name="BEGIN_LINK1" />Inne formy aktywności<ph name="END_LINK1" /> mogą być zapisywane na Twoim koncie Google, gdy się zalogujesz. W każdej chwili możesz je usunąć.</translation>
 <translation id="5061533557687621530">Aby sprawdzić prognozę pogody, kliknij mikrofon i powiedz „Jaka jest prognoza na dzisiaj?”</translation>
 <translation id="506254248375231072">Brak kart</translation>
@@ -1216,6 +1219,7 @@
 <translation id="7641339528570811325">Wyczyść dane przeglądania…</translation>
 <translation id="7646772052135772216">Synchronizacja haseł nie działa</translation>
 <translation id="7655900163790317559">Włączam Bluetooth…</translation>
+<translation id="7656862631699126784">Włącz blokadę incognito</translation>
 <translation id="7658239707568436148">Anuluj</translation>
 <translation id="7663313374500954251">Tą przeglądarką zarządza <ph name="PARENT_NAME" />.</translation>
 <translation id="7665369617277396874">Dodaj konto</translation>
@@ -1518,6 +1522,7 @@
 <translation id="9159716826369098114">Przywróć grupę <ph name="TAB_COUNT" /> kart jako nową grupę kart w tle.</translation>
 <translation id="9169507124922466868">Historia nawigacji jest otwarta w połowie</translation>
 <translation id="9187955620966010988">Reakcja została dostosowana</translation>
+<translation id="9190276265094487094">Będziesz mieć dostęp do swojej historii na wszystkich zsynchronizowanych urządzeniach, aby możliwe było kontynuowanie przerwanych działań</translation>
 <translation id="9199368092038462496">{NUM_MINS,plural, =1{Sprawdzano minutę temu}few{Sprawdzano # minuty temu}many{Sprawdzano # minut temu}other{Sprawdzano # minuty temu}}</translation>
 <translation id="9204836675896933765">Pozostał jeden plik</translation>
 <translation id="9205933215779845960">Nie można znaleźć tej strony. Sprawdź pisownię lub spróbuj wyszukać w <ph name="SEARCH_ENGINE" />.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb
index 421a57af..069d41e 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb
@@ -78,6 +78,7 @@
 <translation id="1344653310988386453">Incluir link para o conteúdo destacado</translation>
 <translation id="1347468774581902829">Gerenciar atividade</translation>
 <translation id="1360432990279830238">Sair e desativar a sincronização?</translation>
+<translation id="1366525380420346469">Quando ativado</translation>
 <translation id="1373696734384179344">Memória insuficiente para fazer o download do conteúdo selecionado.</translation>
 <translation id="1376578503827013741">Calculando…</translation>
 <translation id="1382912999714108023">Suas informações estão desatualizadas? Entre em contato com seu banco para atualizá-las.</translation>
@@ -513,6 +514,7 @@
 <translation id="3810973564298564668">Gerenciar</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> downloads excluídos</translation>
 <translation id="3819183753496523827">Você está off-line. Verifique sua conexão de Internet e tente novamente.</translation>
+<translation id="3830886834687455630">Atualize o Google Play Services para verificar suas senhas</translation>
 <translation id="3845098929839618392">Abrir em guia anônima</translation>
 <translation id="3856096718352044181">Verifique se o provedor é válido ou tente novamente mais tarde</translation>
 <translation id="3858860766373142691">Nome</translation>
@@ -734,6 +736,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">Não é possível criar o código QR</translation>
 <translation id="5039804452771397117">Permitir</translation>
+<translation id="504456571576643789">Considerações</translation>
 <translation id="5054455334322721892"><ph name="BEGIN_LINK1" />Outras formas de atividade<ph name="END_LINK1" /> podem ser salvas na sua conta quando ela está conectada. É possível excluí-las a qualquer momento.</translation>
 <translation id="5061533557687621530">Para consultar a previsão do tempo, toque no microfone e diga "Qual é a previsão do tempo para hoje?"</translation>
 <translation id="506254248375231072">Nenhuma guia</translation>
@@ -1217,6 +1220,7 @@
 <translation id="7641339528570811325">Remover dados de navegação…</translation>
 <translation id="7646772052135772216">A sincronização de senha não está funcionando</translation>
 <translation id="7655900163790317559">Ativando o Bluetooth…</translation>
+<translation id="7656862631699126784">Ativar o bloqueio de guias anônimas</translation>
 <translation id="7658239707568436148">Cancelar</translation>
 <translation id="7663313374500954251">Este navegador é gerenciado por <ph name="PARENT_NAME" />.</translation>
 <translation id="7665369617277396874">Adicionar conta</translation>
@@ -1519,6 +1523,7 @@
 <translation id="9159716826369098114">Restaurar grupo de <ph name="TAB_COUNT" /> guias como um novo grupo de guias em segundo plano.</translation>
 <translation id="9169507124922466868">Histórico de navegação parcialmente aberto</translation>
 <translation id="9187955620966010988">Reação ajustada</translation>
+<translation id="9190276265094487094">Seu histórico vai ser mostrado em todos os dispositivos sincronizados para que você possa continuar o que estava fazendo</translation>
 <translation id="9199368092038462496">{NUM_MINS,plural, =1{Verificado 1 minuto atrás}one{Verificado # minuto atrás}other{Verificado # minutos atrás}}</translation>
 <translation id="9204836675896933765">1 arquivo restante</translation>
 <translation id="9205933215779845960">Não foi possível encontrar a página. Verifique se há erros de ortografia ou faça uma pesquisa no <ph name="SEARCH_ENGINE" />.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb
index f88f3a5..79d76ac7 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb
@@ -975,6 +975,7 @@
 <translation id="6394791151443660613">సెర్చ్ చేయండి: <ph name="SEARCH_QUERY" /></translation>
 <translation id="6395288395575013217">లింక్</translation>
 <translation id="6397616442223433927">తిరిగి ఆన్‌లైన్‌లోకి వచ్చింది</translation>
+<translation id="6401458660421980302">ఈ ట్యాబ్‌ను మరొక పరికరానికి పంపడానికి, అక్కడ Chromeకు సైన్ ఇన్ చేయండి</translation>
 <translation id="6402652558933147609"><ph name="VIOLATED_URL" />లో <ph name="ERROR_CODE" /></translation>
 <translation id="6404511346730675251">బుక్‌మార్క్‌ను ఎడిట్ చేయండి</translation>
 <translation id="6406506848690869874">Sync</translation>
@@ -1026,6 +1027,7 @@
 <translation id="6600954340915313787">Chromeకి కాపీ చేయబడింది</translation>
 <translation id="661266467055912436">మీకు, వెబ్‌లోని ప్రతి ఒక్కరికీ సెక్యూరిటీని మెరుగుపరుస్తుంది.</translation>
 <translation id="6618554661997243500">మీ కోసం టాప్ సైట్‌లు, అలాగే కథనాలను చూడటానికి హోమ్ బటన్‌ను ట్యాప్ చేయండి</translation>
+<translation id="6621391692573306628">ఈ ట్యాబ్‌ను మరొక పరికరానికి పంపడానికి, రెండు పరికరాల్లోనూ Chromeకు సైన్ ఇన్ చేయండి</translation>
 <translation id="6627583120233659107">ఫోల్డర్‌ను ఎడిట్ చేయండి</translation>
 <translation id="6633067410344541938">అజ్ఞాత ట్యాబ్‌ను అన్‌లాక్ చేయండి</translation>
 <translation id="6636623428211296678">కింద మరిన్ని సెట్టింగ్‌లను అన్వేషించండి లేదా ఇప్పుడే పూర్తి చేయండి</translation>
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/ToolbarTabControllerImpl.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/ToolbarTabControllerImpl.java
index 8509664..80b6e463 100644
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/ToolbarTabControllerImpl.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/ToolbarTabControllerImpl.java
@@ -13,7 +13,6 @@
 import org.chromium.base.supplier.ObservableSupplierImpl;
 import org.chromium.base.supplier.Supplier;
 import org.chromium.chrome.browser.back_press.BackPressManager;
-import org.chromium.chrome.browser.flags.ChromeFeatureList;
 import org.chromium.chrome.browser.profiles.Profile;
 import org.chromium.chrome.browser.tab.EmptyTabObserver;
 import org.chromium.chrome.browser.tab.Tab;
@@ -134,13 +133,11 @@
         RecordUserAction.record("Home");
         recordHomeButtonUserPerProfileType();
         if (mOverrideHomePageSupplier.get()) {
-            if (ChromeFeatureList.isEnabled(ChromeFeatureList.TOOLBAR_IPH_ANDROID)) {
-                // While some other element is handling the routing of this click event, something
-                // still needs to notify the event. This approach allows consolidation of events for
-                // the home button.
-                Tracker tracker = mTrackerSupplier.get();
-                if (tracker != null) tracker.notifyEvent(EventConstants.HOMEPAGE_BUTTON_CLICKED);
-            }
+            // While some other element is handling the routing of this click event, something
+            // still needs to notify the event. This approach allows consolidation of events for
+            // the home button.
+            Tracker tracker = mTrackerSupplier.get();
+            if (tracker != null) tracker.notifyEvent(EventConstants.HOMEPAGE_BUTTON_CLICKED);
             return;
         }
         Tab currentTab = mTabSupplier.get();
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/optional_button/OptionalButtonView.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/optional_button/OptionalButtonView.java
index 8dba4b9d..f3cc0d52f 100644
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/optional_button/OptionalButtonView.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/optional_button/OptionalButtonView.java
@@ -52,8 +52,6 @@
 class OptionalButtonView extends FrameLayout implements TransitionListener {
     private static final int SWAP_TRANSITION_DURATION_MS = 300;
     private static final int HIDE_TRANSITION_DURATION_MS = 225;
-    /** Delay between action chip expansion end and collapse start. */
-    private static final int ACTION_CHIP_COLLAPSE_DELAY_MS = 3000;
 
     private final int mCollapsedStateWidthPx;
     private final int mExpandedStatePaddingPx;
@@ -351,7 +349,8 @@
 
         // When finished expanding the action chip schedule the collapse transition in 3 seconds.
         if (mState == State.SHOWING_ACTION_CHIP) {
-            getHandler().postDelayed(mCollapseActionChipRunnable, ACTION_CHIP_COLLAPSE_DELAY_MS);
+            getHandler().postDelayed(mCollapseActionChipRunnable,
+                    AdaptiveToolbarFeatures.getContextualPageActionDelayMs());
         }
     }
 
diff --git a/chrome/browser/ui/ash/clipboard_history_interactive_uitest.cc b/chrome/browser/ui/ash/clipboard_history_interactive_uitest.cc
index 475fb22e..bd7f4e6 100644
--- a/chrome/browser/ui/ash/clipboard_history_interactive_uitest.cc
+++ b/chrome/browser/ui/ash/clipboard_history_interactive_uitest.cc
@@ -34,6 +34,9 @@
 
 }  // namespace
 
+// Use the interactive ui test rather than the browser test. Otherwise, the
+// clipboard history menu could be closed unexpectedly due to the window capture
+// change when multiple browser tests run in parallel.
 // TODO(crbug.com/1304484): Make this class inherit from
 // `ClipboardHistoryBrowserTest` instead if possible.
 class ClipboardHistoryWebContentsInteractiveTest : public InProcessBrowserTest {
@@ -56,7 +59,6 @@
 // Verifies that the images rendered from the copied web contents should
 // show in the clipboard history menu. Switching the auto resize mode is covered
 // in this test case.
-// Flaky: crbug/1224777
 IN_PROC_BROWSER_TEST_F(ClipboardHistoryWebContentsInteractiveTest,
                        VerifyHTMLRendering) {
   // Load the web page which contains images and text.
diff --git a/chrome/browser/ui/bookmarks/bookmark_utils_desktop.cc b/chrome/browser/ui/bookmarks/bookmark_utils_desktop.cc
index a3b55f1a..115afca 100644
--- a/chrome/browser/ui/bookmarks/bookmark_utils_desktop.cc
+++ b/chrome/browser/ui/bookmarks/bookmark_utils_desktop.cc
@@ -22,7 +22,6 @@
 #include "chrome/browser/ui/browser_navigator.h"
 #include "chrome/browser/ui/browser_window.h"
 #include "chrome/browser/ui/simple_message_box.h"
-#include "chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group.h"
 #include "chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_keyed_service.h"
 #include "chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_service_factory.h"
 #include "chrome/browser/ui/tabs/tab_group.h"
@@ -32,6 +31,7 @@
 #include "components/bookmarks/browser/bookmark_model.h"
 #include "components/bookmarks/browser/bookmark_node.h"
 #include "components/bookmarks/browser/bookmark_utils.h"
+#include "components/saved_tab_groups/saved_tab_group.h"
 #include "components/tab_groups/tab_group_id.h"
 #include "content/public/browser/page_navigator.h"
 #include "content/public/browser/web_contents.h"
@@ -304,7 +304,7 @@
   TabStripModel* model_for_creation = browser->tab_strip_model();
 
   std::vector<GURL> urls;
-  auto get_urls = [&](SavedTabGroupTab saved_tab) { return saved_tab.url; };
+  auto get_urls = [&](SavedTabGroupTab saved_tab) { return saved_tab.url(); };
   base::ranges::transform(saved_group->saved_tabs(), std::back_inserter(urls),
                           get_urls);
   if (urls.empty())
diff --git a/chrome/browser/ui/bookmarks/bookmark_utils_desktop.h b/chrome/browser/ui/bookmarks/bookmark_utils_desktop.h
index c3db3ae..479d493 100644
--- a/chrome/browser/ui/bookmarks/bookmark_utils_desktop.h
+++ b/chrome/browser/ui/bookmarks/bookmark_utils_desktop.h
@@ -10,8 +10,8 @@
 #include "base/callback_forward.h"
 #include "chrome/browser/ui/bookmarks/bookmark_editor.h"
 #include "chrome/browser/ui/simple_message_box.h"
-#include "chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group.h"
 #include "chrome/browser/ui/tabs/tab_group.h"
+#include "components/saved_tab_groups/saved_tab_group.h"
 #include "ui/base/window_open_disposition.h"
 #include "ui/gfx/native_widget_types.h"
 
diff --git a/chrome/browser/ui/signin_intercept_first_run_experience_dialog.cc b/chrome/browser/ui/signin_intercept_first_run_experience_dialog.cc
index d59a15de..15463f18 100644
--- a/chrome/browser/ui/signin_intercept_first_run_experience_dialog.cc
+++ b/chrome/browser/ui/signin_intercept_first_run_experience_dialog.cc
@@ -302,7 +302,8 @@
 void SigninInterceptFirstRunExperienceDialog::DoSyncConfirmation() {
   RecordDialogEvent(DialogEvent::kShowSyncConfirmation);
   SetDialogDelegate(
-      SigninViewControllerDelegate::CreateSyncConfirmationDelegate(browser_));
+      SigninViewControllerDelegate::CreateSyncConfirmationDelegate(
+          browser_, /*is_signin_intercept=*/true));
   PreloadProfileCustomizationUI();
 }
 
diff --git a/chrome/browser/ui/signin_intercept_first_run_experience_dialog_browsertest.cc b/chrome/browser/ui/signin_intercept_first_run_experience_dialog_browsertest.cc
index 403f6291..bd3cb8ea4 100644
--- a/chrome/browser/ui/signin_intercept_first_run_experience_dialog_browsertest.cc
+++ b/chrome/browser/ui/signin_intercept_first_run_experience_dialog_browsertest.cc
@@ -14,6 +14,7 @@
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/signin/identity_manager_factory.h"
 #include "chrome/browser/signin/identity_test_environment_profile_adaptor.h"
+#include "chrome/browser/signin/signin_features.h"
 #include "chrome/browser/sync/sync_service_factory.h"
 #include "chrome/browser/themes/theme_service.h"
 #include "chrome/browser/themes/theme_service_factory.h"
@@ -25,6 +26,7 @@
 #include "chrome/browser/ui/webui/signin/login_ui_service.h"
 #include "chrome/browser/ui/webui/signin/login_ui_service_factory.h"
 #include "chrome/browser/ui/webui/signin/profile_customization_handler.h"
+#include "chrome/browser/ui/webui/signin/signin_url_utils.h"
 #include "chrome/browser/ui/webui/signin/turn_sync_on_helper.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "components/feature_engagement/public/feature_constants.h"
@@ -112,8 +114,13 @@
   using DialogEventSet =
       base::EnumSet<DialogEvent, DialogEvent::kStart, DialogEvent::kMaxValue>;
 
-  SigninInterceptFirstRunExperienceDialogBrowserTest()
-      : feature_list_(feature_engagement::kIPHProfileSwitchFeature) {}
+  SigninInterceptFirstRunExperienceDialogBrowserTest() {
+    feature_list_.InitWithFeatures(
+        {feature_engagement::kIPHProfileSwitchFeature,
+         kSyncPromoAfterSigninIntercept},
+        {});
+  }
+
   ~SigninInterceptFirstRunExperienceDialogBrowserTest() override = default;
 
   void SetUpInProcessBrowserTestFixture() override {
@@ -267,7 +274,9 @@
   CoreAccountId account_id() { return account_id_; }
 
  protected:
-  const GURL kSyncConfirmationUrl = GURL("chrome://sync-confirmation");
+  const GURL kSyncConfirmationUrl = AppendSyncConfirmationQueryParams(
+      GURL("chrome://sync-confirmation"),
+      SyncConfirmationStyle::kSigninInterceptModal);
   const GURL kProfileCustomizationUrl = GURL("chrome://profile-customization");
   const GURL kSyncSettingsUrl = GURL("chrome://settings/syncSetup");
 
diff --git a/chrome/browser/ui/signin_view_controller_delegate.h b/chrome/browser/ui/signin_view_controller_delegate.h
index e4607ef..20810d86f 100644
--- a/chrome/browser/ui/signin_view_controller_delegate.h
+++ b/chrome/browser/ui/signin_view_controller_delegate.h
@@ -50,7 +50,8 @@
   // displays the sync confirmation dialog. The returned object should delete
   // itself when the window it's managing is closed.
   static SigninViewControllerDelegate* CreateSyncConfirmationDelegate(
-      Browser* browser);
+      Browser* browser,
+      bool is_signin_intercept = false);
 
   // Returns a platform-specific SigninViewControllerDelegate instance that
   // displays the modal sign in error dialog. The returned object should delete
diff --git a/chrome/browser/ui/tab_helpers.cc b/chrome/browser/ui/tab_helpers.cc
index c03d79f..d0c8ae6 100644
--- a/chrome/browser/ui/tab_helpers.cc
+++ b/chrome/browser/ui/tab_helpers.cc
@@ -58,9 +58,9 @@
 #include "chrome/browser/permissions/last_tab_standing_tracker_tab_helper.h"
 #include "chrome/browser/predictors/loading_predictor_factory.h"
 #include "chrome/browser/predictors/loading_predictor_tab_helper.h"
-#include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_tab_helper.h"
 #include "chrome/browser/preloading/prefetch/no_state_prefetch/no_state_prefetch_manager_factory.h"
 #include "chrome/browser/preloading/prefetch/no_state_prefetch/no_state_prefetch_tab_helper.h"
+#include "chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_tab_helper.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_key.h"
 #include "chrome/browser/reputation/reputation_web_contents_observer.h"
diff --git a/chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_model.cc b/chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_model.cc
index 90556ff..f0ed7aa9 100644
--- a/chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_model.cc
+++ b/chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_model.cc
@@ -10,6 +10,7 @@
 #include "base/observer_list.h"
 #include "chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_model_observer.h"
 #include "chrome/browser/ui/tabs/tab_group.h"
+#include "components/saved_tab_groups/saved_tab_group.h"
 #include "components/tab_groups/tab_group_color.h"
 #include "components/tab_groups/tab_group_id.h"
 #include "components/tab_groups/tab_group_visual_data.h"
diff --git a/chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_model.h b/chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_model.h
index 13d9168..798fd7a 100644
--- a/chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_model.h
+++ b/chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_model.h
@@ -8,9 +8,9 @@
 #include <vector>
 
 #include "base/memory/raw_ptr.h"
-#include "chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group.h"
 
 #include "base/observer_list.h"
+#include "components/saved_tab_groups/saved_tab_group.h"
 #include "components/tab_groups/tab_group_color.h"
 #include "components/tab_groups/tab_group_id.h"
 #include "components/tab_groups/tab_group_visual_data.h"
diff --git a/chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_model_unittest.cc b/chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_model_unittest.cc
index 71e58745..ec062a3 100644
--- a/chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_model_unittest.cc
+++ b/chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_model_unittest.cc
@@ -10,8 +10,8 @@
 #include <vector>
 
 #include "chrome/browser/favicon/favicon_utils.h"
-#include "chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group.h"
 #include "chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_model_observer.h"
+#include "components/saved_tab_groups/saved_tab_group.h"
 #include "components/tab_groups/tab_group_color.h"
 #include "components/tab_groups/tab_group_id.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -79,7 +79,8 @@
   SavedTabGroupTab CreateSavedTabGroupTab(const std::string& url,
                                           const std::u16string& title) {
     return SavedTabGroupTab(GURL(base_path_ + url), title,
-                            favicon::GetDefaultFavicon());
+                            favicon::GetDefaultFavicon(),
+                            base::GUID::GenerateRandomV4());
   }
 
   SavedTabGroup CreateTestSavedTabGroup() {
@@ -102,9 +103,9 @@
     for (size_t i = 0; i < v1.size(); i++) {
       SavedTabGroupTab tab1 = v1[i];
       SavedTabGroupTab tab2 = v2[i];
-      EXPECT_EQ(tab1.url, tab2.url);
-      EXPECT_EQ(tab1.tab_title, tab2.tab_title);
-      EXPECT_EQ(tab1.favicon, tab2.favicon);
+      EXPECT_EQ(tab1.url(), tab2.url());
+      EXPECT_EQ(tab1.title(), tab2.title());
+      EXPECT_EQ(tab1.favicon(), tab2.favicon());
     }
   }
 
@@ -184,7 +185,8 @@
   SavedTabGroupTab CreateSavedTabGroupTab(const std::string& url,
                                           const std::u16string& title) {
     return SavedTabGroupTab(GURL(base_path_ + url), title,
-                            favicon::GetDefaultFavicon());
+                            favicon::GetDefaultFavicon(),
+                            base::GUID::GenerateRandomV4());
   }
 
   SavedTabGroup CreateSavedTabGroup(
@@ -201,9 +203,9 @@
     for (size_t i = 0; i < v1.size(); i++) {
       const SavedTabGroupTab& tab1 = v1[i];
       const SavedTabGroupTab& tab2 = v2[i];
-      EXPECT_EQ(tab1.url, tab2.url);
-      EXPECT_EQ(tab1.tab_title, tab2.tab_title);
-      EXPECT_EQ(tab1.favicon, tab2.favicon);
+      EXPECT_EQ(tab1.url(), tab2.url());
+      EXPECT_EQ(tab1.title(), tab2.title());
+      EXPECT_EQ(tab1.favicon(), tab2.favicon());
     }
   }
 
diff --git a/chrome/browser/ui/tabs/tab_group.cc b/chrome/browser/ui/tabs/tab_group.cc
index 0e80da7..c68bf7a 100644
--- a/chrome/browser/ui/tabs/tab_group.cc
+++ b/chrome/browser/ui/tabs/tab_group.cc
@@ -18,6 +18,7 @@
 #include "chrome/browser/ui/tabs/tab_group_controller.h"
 #include "chrome/browser/ui/tabs/tab_strip_model_observer.h"
 #include "chrome/grit/generated_resources.h"
+#include "components/saved_tab_groups/saved_tab_group_tab.h"
 #include "components/tab_groups/tab_group_id.h"
 #include "components/tab_groups/tab_group_visual_data.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
@@ -134,8 +135,6 @@
 }
 
 void TabGroup::SaveGroup() {
-  is_saved_ = true;
-
   std::vector<SavedTabGroupTab> urls;
   const gfx::Range tab_range = ListTabs();
   for (auto i = tab_range.start(); i < tab_range.end(); ++i) {
@@ -144,7 +143,8 @@
     const std::u16string& tab_title = web_contents->GetTitle();
     const gfx::Image& favicon =
         favicon::TabFaviconFromWebContents(web_contents);
-    urls.emplace_back(SavedTabGroupTab(url, tab_title, favicon));
+    urls.emplace_back(SavedTabGroupTab(url, tab_title, favicon,
+                                       base::GUID::GenerateRandomV4()));
   }
 
   SavedTabGroupKeyedService* backend =
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc b/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc
index 48cc930..20d6f2f8 100644
--- a/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc
+++ b/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc
@@ -2063,8 +2063,8 @@
   DCHECK_EQ(*i++, overflow_button_);
   DCHECK_EQ(*i++, other_bookmarks_button_);
 #endif
-  AddChildViewAt(std::move(bookmark_button), GetIndexOf(saved_tab_group_bar_) +
-                                                 1 + static_cast<int>(index));
+  AddChildViewAt(std::move(bookmark_button),
+                 GetIndexOf(saved_tab_group_bar_).value() + 1 + index);
 }
 
 size_t BookmarkBarView::GetIndexForButton(views::View* button) {
diff --git a/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_bar_browsertest.cc b/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_bar_browsertest.cc
index 344c3b7..034f107 100644
--- a/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_bar_browsertest.cc
+++ b/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_bar_browsertest.cc
@@ -4,17 +4,19 @@
 
 #include <algorithm>
 #include <memory>
+
 #include "base/test/bind.h"
 #include "chrome/browser/favicon/favicon_utils.h"
 #include "chrome/browser/ui/bookmarks/bookmark_utils_desktop.h"
 #include "chrome/browser/ui/browser.h"
-#include "chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group.h"
 #include "chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_keyed_service.h"
 #include "chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_model.h"
 #include "chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_service_factory.h"
 #include "chrome/browser/ui/tabs/tab_group_model.h"
 #include "chrome/browser/ui/views/frame/browser_view.h"
 #include "chrome/test/base/in_process_browser_test.h"
+#include "components/saved_tab_groups/saved_tab_group.h"
+#include "components/saved_tab_groups/saved_tab_group_tab.h"
 #include "content/public/test/browser_test.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -36,7 +38,7 @@
     stg_model->Add(SavedTabGroup(
         std::u16string(u"test_title_1"), tab_groups::TabGroupColorId::kGrey,
         {SavedTabGroupTab(GURL("chrome://newtab"), u"Title",
-                          favicon::GetDefaultFavicon())},
+                          favicon::GetDefaultFavicon(), guid)},
         guid));
     chrome::OpenSavedTabGroup(
         browser(), base::BindLambdaForTesting([=]() {
@@ -82,7 +84,7 @@
     stg_model->Add(SavedTabGroup(
         std::u16string(u"test_title_1"), tab_groups::TabGroupColorId::kGrey,
         {SavedTabGroupTab(GURL("chrome://newtab"), u"Title",
-                          favicon::GetDefaultFavicon())},
+                          favicon::GetDefaultFavicon(), guid)},
         guid));
     chrome::OpenSavedTabGroup(
         browser(), base::BindLambdaForTesting([=]() {
diff --git a/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_button.cc b/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_button.cc
index 148442f..1f6d8ed 100644
--- a/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_button.cc
+++ b/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_button.cc
@@ -10,13 +10,13 @@
 
 #include "base/bind.h"
 #include "chrome/browser/ui/layout_constants.h"
-#include "chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group.h"
 #include "chrome/browser/ui/tabs/tab_group_theme.h"
 #include "chrome/browser/ui/view_ids.h"
 #include "chrome/browser/ui/views/bookmarks/bookmark_button_util.h"
 #include "chrome/browser/ui/views/chrome_layout_provider.h"
 #include "chrome/browser/ui/views/toolbar/toolbar_ink_drop_util.h"
 #include "chrome/grit/generated_resources.h"
+#include "components/saved_tab_groups/saved_tab_group.h"
 #include "content/public/browser/page_navigator.h"
 #include "ui/accessibility/ax_enums.mojom.h"
 #include "ui/accessibility/ax_node_data.h"
@@ -192,7 +192,7 @@
 
   for (const SavedTabGroupTab& tab : tabs_) {
     dialog_model.AddMenuItem(
-        ui::ImageModel::FromImage(tab.favicon), tab.tab_title,
+        ui::ImageModel::FromImage(tab.favicon()), tab.title(),
         base::BindRepeating(
             [](GURL url,
                base::RepeatingCallback<content::PageNavigator*()>
@@ -206,7 +206,7 @@
                   /*started_from_context_menu=*/true);
               page_navigator_callback.Run()->OpenURL(params);
             },
-            tab.url, page_navigator_callback_));
+            tab.url(), page_navigator_callback_));
   }
 
   return dialog_model.Build();
diff --git a/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_button.h b/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_button.h
index f34b810..d309ca8 100644
--- a/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_button.h
+++ b/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_button.h
@@ -9,7 +9,7 @@
 #include <string>
 #include <vector>
 
-#include "chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group.h"
+#include "components/saved_tab_groups/saved_tab_group.h"
 #include "components/tab_groups/tab_group_color.h"
 #include "content/public/browser/page.h"
 #include "content/public/browser/page_navigator.h"
diff --git a/chrome/browser/ui/views/desktop_capture/desktop_media_list_view.cc b/chrome/browser/ui/views/desktop_capture/desktop_media_list_view.cc
index f394348..32f055e 100644
--- a/chrome/browser/ui/views/desktop_capture/desktop_media_list_view.cc
+++ b/chrome/browser/ui/views/desktop_capture/desktop_media_list_view.cc
@@ -131,11 +131,17 @@
   views::View* new_selected = nullptr;
 
   if (selected) {
-    int index = GetIndexOf(selected);
-    int new_index = base::clamp(index + position_increment, 0,
-                                static_cast<int>(children().size()) - 1);
+    size_t index = GetIndexOf(selected).value();
+    size_t new_index = index + static_cast<size_t>(position_increment);
+    if (position_increment < 0 &&
+        index < static_cast<size_t>(-position_increment)) {
+      new_index = 0;
+    } else if (position_increment > 0 &&
+               (index + position_increment) > (children().size() - 1)) {
+      new_index = children().size() - 1;
+    }
     if (index != new_index)
-      new_selected = children()[static_cast<size_t>(new_index)];
+      new_selected = children()[new_index];
   } else if (!children().empty()) {
     new_selected = children().front();
   }
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view_chromeos.cc b/chrome/browser/ui/views/frame/browser_non_client_frame_view_chromeos.cc
index cc30c89..8ca1445 100644
--- a/chrome/browser/ui/views/frame/browser_non_client_frame_view_chromeos.cc
+++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view_chromeos.cc
@@ -750,8 +750,11 @@
 
     // Add the web app frame toolbar at the end, but before the client view if
     // it exists.
-    if (client_view && GetIndexOf(client_view) >= 0)
-      AddChildViewAt(web_app_frame_toolbar(), GetIndexOf(client_view));
+    absl::optional<size_t> index;
+    if (client_view)
+      index = GetIndexOf(client_view);
+    if (index.has_value())
+      AddChildViewAt(web_app_frame_toolbar(), index.value());
     else
       AddChildView(web_app_frame_toolbar());
   }
diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc
index ab0dbbd177..709ff8c 100644
--- a/chrome/browser/ui/views/frame/browser_view.cc
+++ b/chrome/browser/ui/views/frame/browser_view.cc
@@ -130,7 +130,7 @@
 #include "chrome/browser/ui/views/permissions/permission_chip.h"
 #include "chrome/browser/ui/views/profiles/avatar_toolbar_button.h"
 #include "chrome/browser/ui/views/profiles/profile_indicator_icon.h"
-#include "chrome/browser/ui/views/profiles/profile_menu_view_base.h"
+#include "chrome/browser/ui/views/profiles/profile_menu_coordinator.h"
 #include "chrome/browser/ui/views/qrcode_generator/qrcode_generator_bubble.h"
 #include "chrome/browser/ui/views/send_tab_to_self/send_tab_to_self_device_picker_bubble_view.h"
 #include "chrome/browser/ui/views/send_tab_to_self/send_tab_to_self_icon_view.h"
@@ -3974,8 +3974,10 @@
     // When strategy.hide_inspected_contents() returns true, we are hiding
     // contents_web_view_ behind the devtools_web_view_. Otherwise,
     // contents_web_view_ should be right above the devtools_web_view_.
-    int devtools_index = contents_container_->GetIndexOf(devtools_web_view_);
-    int contents_index = contents_container_->GetIndexOf(contents_web_view_);
+    size_t devtools_index =
+        contents_container_->GetIndexOf(devtools_web_view_).value();
+    size_t contents_index =
+        contents_container_->GetIndexOf(contents_web_view_).value();
     bool devtools_is_on_top = devtools_index > contents_index;
     if (strategy.hide_inspected_contents() != devtools_is_on_top)
       contents_container_->ReorderChildView(contents_web_view_, devtools_index);
@@ -4283,14 +4285,8 @@
 }
 
 void BrowserView::ShowAvatarBubbleFromAvatarButton(bool is_source_accelerator) {
-  // Do not show avatar bubble if there is no avatar menu button.
-  views::Button* avatar_button =
-      toolbar_button_provider_->GetAvatarToolbarButton();
-  if (!avatar_button)
-    return;
-
-  ProfileMenuViewBase::ShowBubble(avatar_button, browser(),
-                                  is_source_accelerator);
+  ProfileMenuCoordinator::GetOrCreateForBrowser(browser())->Show(
+      is_source_accelerator);
 }
 
 void BrowserView::MaybeShowProfileSwitchIPH() {
diff --git a/chrome/browser/ui/views/profiles/profile_bubble_interactive_uitest.cc b/chrome/browser/ui/views/profiles/profile_bubble_interactive_uitest.cc
index ca1efba..880581e0 100644
--- a/chrome/browser/ui/views/profiles/profile_bubble_interactive_uitest.cc
+++ b/chrome/browser/ui/views/profiles/profile_bubble_interactive_uitest.cc
@@ -21,6 +21,7 @@
 #include "chrome/browser/ui/views/profiles/avatar_toolbar_button.h"
 #include "chrome/browser/ui/views/profiles/dice_web_signin_interception_bubble_view.h"
 #include "chrome/browser/ui/views/profiles/profile_customization_bubble_view.h"
+#include "chrome/browser/ui/views/profiles/profile_menu_coordinator.h"
 #include "chrome/browser/ui/views/profiles/profile_menu_view.h"
 #include "chrome/browser/ui/views/profiles/profile_menu_view_base.h"
 #include "chrome/test/base/in_process_browser_test.h"
@@ -146,8 +147,9 @@
   }
 
   ProfileMenuViewBase* profile_menu_view() {
-    return static_cast<ProfileMenuViewBase*>(
-        ProfileMenuViewBase::GetBubbleForTesting());
+    auto* coordinator = ProfileMenuCoordinator::FromBrowser(browser());
+    return coordinator ? coordinator->GetProfileMenuViewBaseForTesting()
+                       : nullptr;
   }
 };
 
diff --git a/chrome/browser/ui/views/profiles/profile_menu_coordinator.cc b/chrome/browser/ui/views/profiles/profile_menu_coordinator.cc
new file mode 100644
index 0000000..78c840b6
--- /dev/null
+++ b/chrome/browser/ui/views/profiles/profile_menu_coordinator.cc
@@ -0,0 +1,86 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ui/views/profiles/profile_menu_coordinator.h"
+
+#include "chrome/browser/signin/signin_ui_util.h"
+#include "chrome/browser/ui/views/frame/browser_view.h"
+#include "chrome/browser/ui/views/frame/toolbar_button_provider.h"
+#include "chrome/browser/ui/views/profiles/avatar_toolbar_button.h"
+#include "chrome/browser/ui/views/profiles/incognito_menu_view.h"
+#include "chrome/browser/ui/views/profiles/profile_menu_view_base.h"
+#include "components/feature_engagement/public/feature_constants.h"
+#include "components/user_education/common/feature_promo_controller.h"
+#include "ui/views/bubble/bubble_dialog_delegate_view.h"
+#include "ui/views/view_utils.h"
+
+#if !BUILDFLAG(IS_CHROMEOS_ASH)
+#include "chrome/browser/ui/views/profiles/profile_menu_view.h"
+#endif  // !BUILDFLAG(IS_CHROMEOS_ASH)
+
+ProfileMenuCoordinator::~ProfileMenuCoordinator() {
+  // Forcefully close the Widget if it hasn't been closed by the time the
+  // browser is torn down to avoid dangling references.
+  if (IsShowing())
+    bubble_tracker_.view()->GetWidget()->CloseNow();
+}
+
+void ProfileMenuCoordinator::Show(bool is_source_accelerator) {
+  auto* avatar_toolbar_button =
+      BrowserView::GetBrowserViewForBrowser(&GetBrowser())
+          ->toolbar_button_provider()
+          ->GetAvatarToolbarButton();
+
+  // Do not show avatar bubble if there is no avatar menu button or the bubble
+  // is already showing.
+  if (!avatar_toolbar_button || IsShowing())
+    return;
+
+  auto& browser = GetBrowser();
+  signin_ui_util::RecordProfileMenuViewShown(browser.profile());
+  // Close any existing IPH bubble for the profile menu.
+  browser.window()->CloseFeaturePromo(
+      feature_engagement::kIPHProfileSwitchFeature);
+
+  std::unique_ptr<ProfileMenuViewBase> bubble;
+  if (browser.profile()->IsIncognitoProfile()) {
+    bubble =
+        std::make_unique<IncognitoMenuView>(avatar_toolbar_button, &browser);
+  } else {
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+    // Note: on Ash, Guest Sessions have incognito profiles, and use
+    // BUBBLE_VIEW_MODE_INCOGNITO.
+    NOTREACHED() << "The profile menu is not implemented on Ash.";
+#else
+    bubble = std::make_unique<ProfileMenuView>(avatar_toolbar_button, &browser);
+#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
+  }
+
+  auto* bubble_ptr = bubble.get();
+  DCHECK_EQ(nullptr, bubble_tracker_.view());
+  bubble_tracker_.SetView(bubble_ptr);
+
+  views::Widget* widget =
+      views::BubbleDialogDelegateView::CreateBubble(std::move(bubble));
+  bubble_ptr->CreateAXWidgetObserver(widget);
+  widget->Show();
+  if (is_source_accelerator)
+    bubble_ptr->FocusFirstProfileButton();
+}
+
+bool ProfileMenuCoordinator::IsShowing() const {
+  return bubble_tracker_.view() != nullptr;
+}
+
+ProfileMenuViewBase*
+ProfileMenuCoordinator::GetProfileMenuViewBaseForTesting() {
+  return IsShowing()
+             ? views::AsViewClass<ProfileMenuViewBase>(bubble_tracker_.view())
+             : nullptr;
+}
+
+ProfileMenuCoordinator::ProfileMenuCoordinator(Browser* browser)
+    : BrowserUserData<ProfileMenuCoordinator>(*browser) {}
+
+BROWSER_USER_DATA_KEY_IMPL(ProfileMenuCoordinator);
diff --git a/chrome/browser/ui/views/profiles/profile_menu_coordinator.h b/chrome/browser/ui/views/profiles/profile_menu_coordinator.h
new file mode 100644
index 0000000..fe05fca
--- /dev/null
+++ b/chrome/browser/ui/views/profiles/profile_menu_coordinator.h
@@ -0,0 +1,37 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_UI_VIEWS_PROFILES_PROFILE_MENU_COORDINATOR_H_
+#define CHROME_BROWSER_UI_VIEWS_PROFILES_PROFILE_MENU_COORDINATOR_H_
+
+#include "chrome/browser/ui/browser_user_data.h"
+#include "ui/views/view_tracker.h"
+
+class ProfileMenuViewBase;
+
+// Handles the lifetime and showing/hidden state of the profile menu bubble.
+// Owned by the associated browser.
+class ProfileMenuCoordinator : public BrowserUserData<ProfileMenuCoordinator> {
+ public:
+  ~ProfileMenuCoordinator() override;
+
+  // Shows the the profile bubble for this browser.
+  void Show(bool is_source_accelerator);
+
+  // Returns true if the bubble is currently showing for the owning browser.
+  bool IsShowing() const;
+
+  ProfileMenuViewBase* GetProfileMenuViewBaseForTesting();
+
+ private:
+  friend class BrowserUserData<ProfileMenuCoordinator>;
+
+  explicit ProfileMenuCoordinator(Browser* browser);
+
+  views::ViewTracker bubble_tracker_;
+
+  BROWSER_USER_DATA_KEY_DECL();
+};
+
+#endif  // CHROME_BROWSER_UI_VIEWS_PROFILES_PROFILE_MENU_COORDINATOR_H_
diff --git a/chrome/browser/ui/views/profiles/profile_menu_view.cc b/chrome/browser/ui/views/profiles/profile_menu_view.cc
index 0fde7a7..07c3f827 100644
--- a/chrome/browser/ui/views/profiles/profile_menu_view.cc
+++ b/chrome/browser/ui/views/profiles/profile_menu_view.cc
@@ -296,7 +296,7 @@
       identity_manager->GetPrimaryAccountMutator()->RevokeSyncConsent(
           signin_metrics::USER_CLICKED_SIGNOUT_SETTINGS,
           signin_metrics::SignoutDelete::kIgnoreMetric);
-      Hide();
+      GetWidget()->CloseWithReason(views::Widget::ClosedReason::kUnspecified);
       // Re-enable sync with the same primary account.
       signin_ui_util::EnableSyncFromSingleAccountPromo(
           profile,
@@ -306,7 +306,7 @@
       break;
     }
     case AvatarSyncErrorType::kAuthError:
-      Hide();
+      GetWidget()->CloseWithReason(views::Widget::ClosedReason::kUnspecified);
       signin_ui_util::ShowReauthForPrimaryAccountWithAuthError(
           browser()->profile(),
           signin_metrics::AccessPoint::ACCESS_POINT_AVATAR_BUBBLE_SIGN_IN);
@@ -338,7 +338,7 @@
   RecordClick(ActionableItem::kSigninAccountButton);
   if (!perform_menu_actions())
     return;
-  Hide();
+  GetWidget()->CloseWithReason(views::Widget::ClosedReason::kUnspecified);
   signin_ui_util::EnableSyncFromSingleAccountPromo(
       browser()->profile(), account,
       signin_metrics::AccessPoint::ACCESS_POINT_AVATAR_BUBBLE_SIGN_IN);
@@ -349,7 +349,7 @@
   RecordClick(ActionableItem::kSignoutButton);
   if (!perform_menu_actions())
     return;
-  Hide();
+  GetWidget()->CloseWithReason(views::Widget::ClosedReason::kUnspecified);
 #if BUILDFLAG(ENABLE_DICE_SUPPORT)
   // Sign out from all accounts.
   browser()->signin_view_controller()->ShowGaiaLogoutTab(
@@ -370,7 +370,7 @@
   RecordClick(ActionableItem::kSigninButton);
   if (!perform_menu_actions())
     return;
-  Hide();
+  GetWidget()->CloseWithReason(views::Widget::ClosedReason::kUnspecified);
 
   signin_ui_util::EnableSyncFromSingleAccountPromo(
       browser()->profile(), AccountInfo(),
@@ -382,7 +382,7 @@
   RecordClick(ActionableItem::kOtherProfileButton);
   if (!perform_menu_actions())
     return;
-  Hide();
+  GetWidget()->CloseWithReason(views::Widget::ClosedReason::kUnspecified);
   profiles::SwitchToProfile(profile_path, /*always_create=*/false);
 }
 
diff --git a/chrome/browser/ui/views/profiles/profile_menu_view_base.cc b/chrome/browser/ui/views/profiles/profile_menu_view_base.cc
index 1d4ea09..516df0b 100644
--- a/chrome/browser/ui/views/profiles/profile_menu_view_base.cc
+++ b/chrome/browser/ui/views/profiles/profile_menu_view_base.cc
@@ -27,10 +27,7 @@
 #include "chrome/browser/ui/views/chrome_layout_provider.h"
 #include "chrome/browser/ui/views/chrome_typography.h"
 #include "chrome/browser/ui/views/hover_button.h"
-#include "chrome/browser/ui/views/profiles/incognito_menu_view.h"
 #include "chrome/grit/generated_resources.h"
-#include "components/feature_engagement/public/feature_constants.h"
-#include "components/user_education/common/feature_promo_controller.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/metadata/metadata_header_macros.h"
 #include "ui/base/metadata/metadata_impl_macros.h"
@@ -60,14 +57,8 @@
 #include "ui/views/layout/table_layout.h"
 #include "ui/views/view_class_properties.h"
 
-#if !BUILDFLAG(IS_CHROMEOS_ASH)
-#include "chrome/browser/ui/views/profiles/profile_menu_view.h"
-#endif
-
 namespace {
 
-ProfileMenuViewBase* g_profile_bubble_ = nullptr;
-
 // Helpers --------------------------------------------------------------------
 
 constexpr int kMenuWidth = 288;
@@ -495,63 +486,12 @@
 ProfileMenuViewBase::EditButtonParams::EditButtonParams(
     const EditButtonParams&) = default;
 
-// static
-void ProfileMenuViewBase::ShowBubble(views::Button* anchor_button,
-                                     Browser* browser,
-                                     bool is_source_accelerator) {
-  if (IsShowing())
-    return;
-
-  signin_ui_util::RecordProfileMenuViewShown(browser->profile());
-  // Close any existing IPH bubble for the profile menu.
-  browser->window()->CloseFeaturePromo(
-      feature_engagement::kIPHProfileSwitchFeature);
-
-  ProfileMenuViewBase* bubble = nullptr;
-  if (browser->profile()->IsIncognitoProfile()) {
-    bubble = new IncognitoMenuView(anchor_button, browser);
-  } else {
-#if BUILDFLAG(IS_CHROMEOS_ASH)
-    // Note: on Ash, Guest Sessions have incognito profiles, and use
-    // BUBBLE_VIEW_MODE_INCOGNITO.
-    NOTREACHED() << "The profile menu is not implemented on Ash.";
-#else
-    bubble = new ProfileMenuView(anchor_button, browser);
-#endif
-  }
-
-  views::Widget* widget = views::BubbleDialogDelegateView::CreateBubble(bubble);
-  bubble->ax_widget_observer_ =
-      std::make_unique<AXMenuWidgetObserver>(bubble, widget);
-  widget->Show();
-  if (is_source_accelerator)
-    bubble->FocusFirstProfileButton();
-}
-
-// static
-bool ProfileMenuViewBase::IsShowing() {
-  return g_profile_bubble_ != nullptr;
-}
-
-// static
-void ProfileMenuViewBase::Hide() {
-  if (g_profile_bubble_)
-    g_profile_bubble_->GetWidget()->Close();
-}
-
-// static
-ProfileMenuViewBase* ProfileMenuViewBase::GetBubbleForTesting() {
-  return g_profile_bubble_;
-}
-
 ProfileMenuViewBase::ProfileMenuViewBase(views::Button* anchor_button,
                                          Browser* browser)
     : BubbleDialogDelegateView(anchor_button, views::BubbleBorder::TOP_RIGHT),
       browser_(browser),
       anchor_button_(anchor_button),
       close_bubble_helper_(this, browser) {
-  DCHECK(!g_profile_bubble_);
-  g_profile_bubble_ = this;
   SetButtons(ui::DIALOG_BUTTON_NONE);
   // TODO(tluk): Remove when fixing https://crbug.com/822075
   // The sign in webview will be clipped on the bottom corners without these
@@ -575,11 +515,7 @@
       &ProfileMenuViewBase::OnWindowClosing, base::Unretained(this)));
 }
 
-ProfileMenuViewBase::~ProfileMenuViewBase() {
-  // Items stored for menu generation are removed after menu is finalized, hence
-  // it's not expected to have while destroying the object.
-  DCHECK(g_profile_bubble_ != this);
-}
+ProfileMenuViewBase::~ProfileMenuViewBase() = default;
 
 gfx::ImageSkia ProfileMenuViewBase::GetSyncIcon() const {
   return gfx::ImageSkia();
@@ -1018,12 +954,11 @@
 }
 
 void ProfileMenuViewBase::OnWindowClosing() {
-  DCHECK_EQ(g_profile_bubble_, this);
-  if (anchor_button()) {
-    views::InkDrop::Get(anchor_button())
-        ->AnimateToState(views::InkDropState::DEACTIVATED, nullptr);
-  }
-  g_profile_bubble_ = nullptr;
+  if (!anchor_button())
+    return;
+
+  views::InkDrop::Get(anchor_button())
+      ->AnimateToState(views::InkDropState::DEACTIVATED, nullptr);
 }
 
 bool ProfileMenuViewBase::HandleContextMenu(
@@ -1040,6 +975,10 @@
   action.Run();
 }
 
+void ProfileMenuViewBase::CreateAXWidgetObserver(views::Widget* widget) {
+  ax_widget_observer_ = std::make_unique<AXMenuWidgetObserver>(this, widget);
+}
+
 // Despite ProfileMenuViewBase being a dialog, we are enforcing it to behave
 // like a menu from the accessibility POV because it fits better with a menu UX.
 // The dialog exposes the kMenuBar role, and the top-level container is kMenu.
diff --git a/chrome/browser/ui/views/profiles/profile_menu_view_base.h b/chrome/browser/ui/views/profiles/profile_menu_view_base.h
index d97e506..01278fc6 100644
--- a/chrome/browser/ui/views/profiles/profile_menu_view_base.h
+++ b/chrome/browser/ui/views/profiles/profile_menu_view_base.h
@@ -84,20 +84,6 @@
   // Size of the large identity image in the menu.
   static constexpr int kIdentityImageSize = 64;
 
-  // Shows the bubble if one is not already showing.  This allows us to easily
-  // make a button toggle the bubble on and off when clicked: we unconditionally
-  // call this function when the button is clicked and if the bubble isn't
-  // showing it will appear while if it is showing, nothing will happen here and
-  // the existing bubble will auto-close due to focus loss.
-  static void ShowBubble(views::Button* anchor_button,
-                         Browser* browser,
-                         bool is_source_accelerator);
-
-  static bool IsShowing();
-  static void Hide();
-
-  static ProfileMenuViewBase* GetBubbleForTesting();
-
   ProfileMenuViewBase(views::Button* anchor_button,
                       Browser* browser);
   ~ProfileMenuViewBase() override;
@@ -171,6 +157,7 @@
  private:
   class AXMenuWidgetObserver;
 
+  friend class ProfileMenuCoordinator;
   friend class ProfileMenuViewExtensionsTest;
 
   void Reset();
@@ -194,6 +181,8 @@
 
   void ButtonPressed(base::RepeatingClosure action);
 
+  void CreateAXWidgetObserver(views::Widget* widget);
+
   const raw_ptr<Browser> browser_;
 
   const raw_ptr<views::Button> anchor_button_;
diff --git a/chrome/browser/ui/views/profiles/profile_menu_view_browsertest.cc b/chrome/browser/ui/views/profiles/profile_menu_view_browsertest.cc
index fd24b25..5970ec5 100644
--- a/chrome/browser/ui/views/profiles/profile_menu_view_browsertest.cc
+++ b/chrome/browser/ui/views/profiles/profile_menu_view_browsertest.cc
@@ -44,6 +44,7 @@
 #include "chrome/browser/ui/browser_list.h"
 #include "chrome/browser/ui/test/test_browser_dialog.h"
 #include "chrome/browser/ui/views/frame/browser_view.h"
+#include "chrome/browser/ui/views/profiles/profile_menu_coordinator.h"
 #include "chrome/browser/ui/views/profiles/profile_menu_view.h"
 #include "chrome/browser/ui/views/toolbar/toolbar_view.h"
 #include "chrome/browser/ui/views/user_education/browser_feature_promo_controller.h"
@@ -165,9 +166,9 @@
 class ProfileMenuViewTestBase {
  public:
  protected:
-  void OpenProfileMenu(Browser* browser) {
-    BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(
-        target_browser_ ? target_browser_ : browser);
+  void OpenProfileMenu() {
+    BrowserView* browser_view =
+        BrowserView::GetBrowserViewForBrowser(target_browser_);
 
     // Click the avatar button to open the menu.
     views::View* avatar_button =
@@ -195,10 +196,10 @@
   }
 
   ProfileMenuViewBase* profile_menu_view() {
-    return static_cast<ProfileMenuViewBase*>(
-        ProfileMenuViewBase::GetBubbleForTesting());
+    auto* coordinator = ProfileMenuCoordinator::FromBrowser(target_browser_);
+    return coordinator ? coordinator->GetProfileMenuViewBaseForTesting()
+                       : nullptr;
   }
-
   void SetTargetBrowser(Browser* browser) { target_browser_ = browser; }
 
   void Click(views::View* clickable_view) {
@@ -228,6 +229,12 @@
                 &ProfileMenuViewExtensionsTest::RegisterTestTracker));
   }
 
+  // extensions::ExtensionBrowserTest:
+  void SetUpOnMainThread() override {
+    ExtensionBrowserTest::SetUpOnMainThread();
+    SetTargetBrowser(browser());
+  }
+
  private:
   static void RegisterTestTracker(content::BrowserContext* context) {
     feature_engagement::TrackerFactory::GetInstance()->SetTestingFactory(
@@ -240,7 +247,7 @@
 // Make sure nothing bad happens when the browser theme changes while the
 // ProfileMenuView is visible. Regression test for crbug.com/737470
 IN_PROC_BROWSER_TEST_F(ProfileMenuViewExtensionsTest, ThemeChanged) {
-  ASSERT_NO_FATAL_FAILURE(OpenProfileMenu(browser()));
+  ASSERT_NO_FATAL_FAILURE(OpenProfileMenu());
 
   // The theme change destroys the avatar button. Make sure the profile chooser
   // widget doesn't try to reference a stale observer during its shutdown.
@@ -249,10 +256,11 @@
   InstallExtension(test_data_dir_.AppendASCII("theme"), 1);
   waiter.WaitForThemeChanged();
 
-  EXPECT_TRUE(ProfileMenuView::IsShowing());
+  auto* coordinator = ProfileMenuCoordinator::FromBrowser(browser());
+  EXPECT_TRUE(coordinator->IsShowing());
   profile_menu_view()->GetWidget()->Close();
   base::RunLoop().RunUntilIdle();
-  EXPECT_FALSE(ProfileMenuView::IsShowing());
+  EXPECT_FALSE(coordinator->IsShowing());
 }
 
 // Profile chooser view should close when a tab is added.
@@ -262,12 +270,12 @@
   ASSERT_EQ(1, tab_strip->count());
   ASSERT_EQ(0, tab_strip->active_index());
 
-  ASSERT_NO_FATAL_FAILURE(OpenProfileMenu(browser()));
+  ASSERT_NO_FATAL_FAILURE(OpenProfileMenu());
   ASSERT_FALSE(AddTabAtIndex(1, GURL("https://test_url.com"),
                              ui::PageTransition::PAGE_TRANSITION_LINK));
   EXPECT_EQ(1, tab_strip->active_index());
   base::RunLoop().RunUntilIdle();
-  EXPECT_FALSE(ProfileMenuView::IsShowing());
+  EXPECT_FALSE(ProfileMenuCoordinator::FromBrowser(browser())->IsShowing());
 }
 
 // Profile chooser view should close when active tab is changed.
@@ -280,10 +288,10 @@
   ASSERT_EQ(2, tab_strip->count());
   ASSERT_EQ(1, tab_strip->active_index());
 
-  ASSERT_NO_FATAL_FAILURE(OpenProfileMenu(browser()));
+  ASSERT_NO_FATAL_FAILURE(OpenProfileMenu());
   tab_strip->ActivateTabAt(0);
   base::RunLoop().RunUntilIdle();
-  EXPECT_FALSE(ProfileMenuView::IsShowing());
+  EXPECT_FALSE(ProfileMenuCoordinator::FromBrowser(browser())->IsShowing());
 }
 
 // Profile chooser view should close when active tab is closed.
@@ -296,12 +304,25 @@
   ASSERT_EQ(2, tab_strip->count());
   ASSERT_EQ(1, tab_strip->active_index());
 
-  ASSERT_NO_FATAL_FAILURE(OpenProfileMenu(browser()));
+  ASSERT_NO_FATAL_FAILURE(OpenProfileMenu());
   tab_strip->CloseWebContentsAt(1, TabStripModel::CLOSE_NONE);
   base::RunLoop().RunUntilIdle();
-  EXPECT_FALSE(ProfileMenuView::IsShowing());
+  EXPECT_FALSE(ProfileMenuCoordinator::FromBrowser(browser())->IsShowing());
 }
 
+// Used to test that the bubble widget is destroyed before the browser.
+class BubbleWidgetDestroyedObserver : public views::WidgetObserver {
+ public:
+  explicit BubbleWidgetDestroyedObserver(views::Widget* bubble_widget) {
+    bubble_widget->AddObserver(this);
+  }
+
+  // views::WidgetObserver:
+  void OnWidgetDestroying(views::Widget* widget) override {
+    ASSERT_EQ(BrowserList::GetInstance()->size(), 1UL);
+  }
+};
+
 // Profile chooser view should close when the last tab is closed.
 // Regression test for http://crbug.com/792845
 IN_PROC_BROWSER_TEST_F(ProfileMenuViewExtensionsTest,
@@ -310,10 +331,11 @@
   ASSERT_EQ(1, tab_strip->count());
   ASSERT_EQ(0, tab_strip->active_index());
 
-  ASSERT_NO_FATAL_FAILURE(OpenProfileMenu(browser()));
+  ASSERT_NO_FATAL_FAILURE(OpenProfileMenu());
+  auto widget_destroyed_observer =
+      BubbleWidgetDestroyedObserver(profile_menu_view()->GetWidget());
   tab_strip->CloseWebContentsAt(0, TabStripModel::CLOSE_NONE);
   base::RunLoop().RunUntilIdle();
-  EXPECT_FALSE(ProfileMenuView::IsShowing());
 }
 
 // Opening the profile menu dismisses any existing IPH.
@@ -340,7 +362,7 @@
       feature_engagement::kIPHProfileSwitchFeature));
 
   // Open the menu.
-  ASSERT_NO_FATAL_FAILURE(OpenProfileMenu(browser()));
+  ASSERT_NO_FATAL_FAILURE(OpenProfileMenu());
 
   // Check the IPH is no longer showing.
   EXPECT_FALSE(promo_controller->IsPromoActive(
@@ -357,7 +379,7 @@
   CoreAccountId account_id() const { return account_id_; }
 
   bool Signout() {
-    OpenProfileMenu(browser());
+    OpenProfileMenu();
     if (HasFatalFailure())
       return false;
     static_cast<ProfileMenuView*>(profile_menu_view())
@@ -381,7 +403,11 @@
   }
 #endif
 
+  // InProcessBrowserTest:
   void SetUpOnMainThread() override {
+    InProcessBrowserTest::SetUpOnMainThread();
+    SetTargetBrowser(browser());
+
 #if BUILDFLAG(IS_CHROMEOS_LACROS)
     // Signout is not allowed on the main profile.
     UseSecondaryProfile();
@@ -559,7 +585,7 @@
   CoreAccountInfo account_info() const { return account_info_; }
 
   bool Reauth() {
-    OpenProfileMenu(browser());
+    OpenProfileMenu();
     if (HasFatalFailure())
       return false;
     // This test does not check that the reauth button is displayed in the menu,
@@ -574,7 +600,11 @@
     return true;
   }
 
+  // InProcessBrowserTest:
   void SetUpOnMainThread() override {
+    InProcessBrowserTest::SetUpOnMainThread();
+    SetTargetBrowser(browser());
+
     // Add an account.
     signin::IdentityManager* identity_manager =
         IdentityManagerFactory::GetForProfile(browser()->profile());
@@ -655,7 +685,11 @@
 
   CoreAccountInfo account_info() const { return account_info_; }
 
+  // InProcessBrowserTest:
   void SetUpOnMainThread() override {
+    InProcessBrowserTest::SetUpOnMainThread();
+    SetTargetBrowser(browser());
+
     // Add an account, non-syncing and in authentication error.
     signin::IdentityManager* identity_manager =
         IdentityManagerFactory::GetForProfile(browser()->profile());
@@ -672,7 +706,7 @@
   }
 
   void ClickTurnOnSync() {
-    OpenProfileMenu(browser());
+    OpenProfileMenu();
     // This test does not check that the sync button is displayed in the menu,
     // but this is tested in ProfileMenuClickTest.
     base::HistogramTester histogram_tester;
@@ -769,6 +803,12 @@
         secondary_account_helper::SetUpSigninClient(&test_url_loader_factory_);
   }
 
+  // SyncTest:
+  void SetUpOnMainThread() override {
+    SyncTest::SetUpOnMainThread();
+    SetTargetBrowser(browser());
+  }
+
 #if BUILDFLAG(IS_CHROMEOS_LACROS)
   void UseSecondaryProfile() {
     profile_ = CreateAdditionalProfile();
@@ -813,7 +853,8 @@
 
   void AdvanceFocus(int count) {
     for (int i = 0; i < count; i++)
-      profile_menu_view()->GetFocusManager()->AdvanceFocus(/*reverse=*/false);
+      profile_menu_view()->GetFocusManager()->AdvanceFocus(
+          /*reverse=*/false);
   }
 
   views::View* GetFocusedItem() {
@@ -822,7 +863,7 @@
 
   // This should be called in the test body.
   void RunTest() {
-    ASSERT_NO_FATAL_FAILURE(OpenProfileMenu(browser()));
+    ASSERT_NO_FATAL_FAILURE(OpenProfileMenu());
     // These tests don't care about performing the actual menu actions, only
     // about the histogram recorded.
     ASSERT_TRUE(profile_menu_view());
diff --git a/chrome/browser/ui/views/profiles/profile_picker_signed_in_flow_controller.cc b/chrome/browser/ui/views/profiles/profile_picker_signed_in_flow_controller.cc
index 2df7560..7f3fa85 100644
--- a/chrome/browser/ui/views/profiles/profile_picker_signed_in_flow_controller.cc
+++ b/chrome/browser/ui/views/profiles/profile_picker_signed_in_flow_controller.cc
@@ -118,7 +118,7 @@
   GURL url = GURL(chrome::kChromeUISyncConfirmationURL);
   return AppendSyncConfirmationQueryParams(
       loading ? url.Resolve(chrome::kChromeUISyncConfirmationLoadingPath) : url,
-      /*is_modal=*/false);
+      SyncConfirmationStyle::kWindow);
 }
 
 std::unique_ptr<content::WebContents>
diff --git a/chrome/browser/ui/views/profiles/profile_picker_view_browsertest.cc b/chrome/browser/ui/views/profiles/profile_picker_view_browsertest.cc
index d253053..6bc7ad5 100644
--- a/chrome/browser/ui/views/profiles/profile_picker_view_browsertest.cc
+++ b/chrome/browser/ui/views/profiles/profile_picker_view_browsertest.cc
@@ -142,7 +142,7 @@
 
 GURL GetSyncConfirmationURL() {
   return AppendSyncConfirmationQueryParams(GURL("chrome://sync-confirmation/"),
-                                           /*is_modal=*/false);
+                                           SyncConfirmationStyle::kWindow);
 }
 
 #if BUILDFLAG(IS_CHROMEOS_LACROS)
diff --git a/chrome/browser/ui/views/profiles/profile_picker_view_test_utils.cc b/chrome/browser/ui/views/profiles/profile_picker_view_test_utils.cc
index c4a1058..f20407a 100644
--- a/chrome/browser/ui/views/profiles/profile_picker_view_test_utils.cc
+++ b/chrome/browser/ui/views/profiles/profile_picker_view_test_utils.cc
@@ -160,9 +160,8 @@
   EnterpriseProfileWelcomeHandler* handler = ExpectPickerWelcomeScreenType(
       EnterpriseProfileWelcomeUI::ScreenType::kLacrosConsumerWelcome);
   handler->HandleProceedForTesting(/*should_link_data=*/false);
-  WaitForPickerLoadStop(
-      AppendSyncConfirmationQueryParams(GURL("chrome://sync-confirmation/"),
-                                        /*is_modal=*/false));
+  WaitForPickerLoadStop(AppendSyncConfirmationQueryParams(
+      GURL("chrome://sync-confirmation/"), SyncConfirmationStyle::kWindow));
 
   if (result == LoginUIService::UI_CLOSED) {
     // `UI_CLOSED` is not provided via webui handlers. Instead, it gets sent
diff --git a/chrome/browser/ui/views/profiles/signin_view_controller_delegate_views.cc b/chrome/browser/ui/views/profiles/signin_view_controller_delegate_views.cc
index e1028dd..7b7beff5 100644
--- a/chrome/browser/ui/views/profiles/signin_view_controller_delegate_views.cc
+++ b/chrome/browser/ui/views/profiles/signin_view_controller_delegate_views.cc
@@ -102,9 +102,15 @@
 // static
 std::unique_ptr<views::WebView>
 SigninViewControllerDelegateViews::CreateSyncConfirmationWebView(
-    Browser* browser) {
+    Browser* browser,
+    bool is_signin_intercept) {
+  GURL url = GURL(chrome::kChromeUISyncConfirmationURL);
+  if (is_signin_intercept) {
+    url = AppendSyncConfirmationQueryParams(
+        url, SyncConfirmationStyle::kSigninInterceptModal);
+  }
   return CreateDialogWebView(
-      browser, GURL(chrome::kChromeUISyncConfirmationURL),
+      browser, url,
       GetSyncConfirmationDialogPreferredHeight(browser->profile()),
       kSyncConfirmationDialogWidth, InitializeSigninWebDialogUI(true));
 }
@@ -394,9 +400,12 @@
 
 // static
 SigninViewControllerDelegate*
-SigninViewControllerDelegate::CreateSyncConfirmationDelegate(Browser* browser) {
+SigninViewControllerDelegate::CreateSyncConfirmationDelegate(
+    Browser* browser,
+    bool is_signin_intercept) {
   return new SigninViewControllerDelegateViews(
-      SigninViewControllerDelegateViews::CreateSyncConfirmationWebView(browser),
+      SigninViewControllerDelegateViews::CreateSyncConfirmationWebView(
+          browser, is_signin_intercept),
       browser, ui::MODAL_TYPE_WINDOW, true, false);
 }
 
diff --git a/chrome/browser/ui/views/profiles/signin_view_controller_delegate_views.h b/chrome/browser/ui/views/profiles/signin_view_controller_delegate_views.h
index f5adfc0..85134681 100644
--- a/chrome/browser/ui/views/profiles/signin_view_controller_delegate_views.h
+++ b/chrome/browser/ui/views/profiles/signin_view_controller_delegate_views.h
@@ -57,7 +57,8 @@
       const SigninViewControllerDelegateViews&) = delete;
 
   static std::unique_ptr<views::WebView> CreateSyncConfirmationWebView(
-      Browser* browser);
+      Browser* browser,
+      bool is_signin_intercept = false);
 
   static std::unique_ptr<views::WebView> CreateSigninErrorWebView(
       Browser* browser);
diff --git a/chrome/browser/ui/views/side_search/side_search_browser_controller.cc b/chrome/browser/ui/views/side_search/side_search_browser_controller.cc
index bdf7e0c4..3973ea3 100644
--- a/chrome/browser/ui/views/side_search/side_search_browser_controller.cc
+++ b/chrome/browser/ui/views/side_search/side_search_browser_controller.cc
@@ -480,7 +480,7 @@
   UpdateSidePanel();
 
   // After showing the side panel if the web_view_ is visible request focus.
-  if (web_view_->GetVisible())
+  if (web_view_->GetVisible() && web_view_->web_contents())
     web_view_->web_contents()->Focus();
 }
 
@@ -657,7 +657,7 @@
   // layout and we should not do this until the web_view_ is visible. Layout is
   // invalidated when we call UpdateSidePanel() but is scheduled asynchronously
   // by the hosting Widget.
-  if (web_view_->GetVisible())
+  if (web_view_->GetVisible() && web_view_->web_contents())
     web_view_->web_contents()->Focus();
 }
 
diff --git a/chrome/browser/ui/views/toolbar/toolbar_account_icon_container_view.cc b/chrome/browser/ui/views/toolbar/toolbar_account_icon_container_view.cc
index abdaf761..0ee9e11 100644
--- a/chrome/browser/ui/views/toolbar/toolbar_account_icon_container_view.cc
+++ b/chrome/browser/ui/views/toolbar/toolbar_account_icon_container_view.cc
@@ -120,7 +120,7 @@
     std::unique_ptr<views::View> icon) {
   // Add the page action icons to the end of the container, just before the
   // avatar icon.
-  AddChildViewAt(std::move(icon), GetIndexOf(avatar_));
+  AddChildViewAt(std::move(icon), GetIndexOf(avatar_).value());
 }
 
 BEGIN_METADATA(ToolbarAccountIconContainerView, ToolbarIconContainerView)
diff --git a/chrome/browser/ui/views/toolbar/toolbar_view.cc b/chrome/browser/ui/views/toolbar/toolbar_view.cc
index ef34f04..cd5df58 100644
--- a/chrome/browser/ui/views/toolbar/toolbar_view.cc
+++ b/chrome/browser/ui/views/toolbar/toolbar_view.cc
@@ -465,7 +465,7 @@
 void ToolbarView::UpdateForWebUITabStrip() {
 #if BUILDFLAG(ENABLE_WEBUI_TAB_STRIP)
   if (browser_view_->webui_tab_strip() && app_menu_button_) {
-    const int insertion_index = GetIndexOf(app_menu_button_);
+    const size_t insertion_index = GetIndexOf(app_menu_button_).value();
     AddChildViewAt(browser_view_->webui_tab_strip()->CreateNewTabButton(),
                    insertion_index);
     AddChildViewAt(browser_view_->webui_tab_strip()->CreateTabCounter(),
diff --git a/chrome/browser/ui/webui/chromeos/login/user_creation_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/user_creation_screen_handler.cc
index 9afb14ac..97db350 100644
--- a/chrome/browser/ui/webui/chromeos/login/user_creation_screen_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/login/user_creation_screen_handler.cc
@@ -6,7 +6,6 @@
 
 #include "base/values.h"
 #include "chrome/browser/ash/login/oobe_screen.h"
-#include "chrome/browser/ash/login/screens/user_creation_screen.h"
 #include "chrome/browser/ash/login/startup_utils.h"
 #include "chrome/grit/chromium_strings.h"
 #include "chrome/grit/generated_resources.h"
@@ -15,17 +14,10 @@
 
 namespace chromeos {
 
-constexpr StaticOobeScreenId UserCreationView::kScreenId;
-
 UserCreationScreenHandler::UserCreationScreenHandler()
-    : BaseScreenHandler(kScreenId) {
-  set_user_acted_method_path_deprecated("login.UserCreationScreen.userActed");
-}
+    : BaseScreenHandler(kScreenId) {}
 
-UserCreationScreenHandler::~UserCreationScreenHandler() {
-  if (screen_)
-    screen_->OnViewDestroyed(this);
-}
+UserCreationScreenHandler::~UserCreationScreenHandler() = default;
 
 void UserCreationScreenHandler::DeclareLocalizedValues(
     ::login::LocalizedValuesBuilder* builder) {
@@ -63,24 +55,12 @@
                IDS_OOBE_USER_CREATION_CHILD_SIGN_IN_LEARN_MORE_DIALOG_TEXT);
 }
 
-void UserCreationScreenHandler::InitializeDeprecated() {}
-
 void UserCreationScreenHandler::Show() {
   ShowInWebUI();
 }
 
-void UserCreationScreenHandler::Bind(UserCreationScreen* screen) {
-  screen_ = screen;
-  BaseScreenHandler::SetBaseScreenDeprecated(screen_);
-}
-
-void UserCreationScreenHandler::Unbind() {
-  screen_ = nullptr;
-  BaseScreenHandler::SetBaseScreenDeprecated(nullptr);
-}
-
 void UserCreationScreenHandler::SetIsBackButtonVisible(bool value) {
-  CallJS("login.UserCreationScreen.setIsBackButtonVisible", value);
+  CallExternalAPI("setIsBackButtonVisible", value);
 }
 
 }  // namespace chromeos
diff --git a/chrome/browser/ui/webui/chromeos/login/user_creation_screen_handler.h b/chrome/browser/ui/webui/chromeos/login/user_creation_screen_handler.h
index 6b17041..21e7d09 100644
--- a/chrome/browser/ui/webui/chromeos/login/user_creation_screen_handler.h
+++ b/chrome/browser/ui/webui/chromeos/login/user_creation_screen_handler.h
@@ -5,6 +5,7 @@
 #ifndef CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_USER_CREATION_SCREEN_HANDLER_H_
 #define CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_USER_CREATION_SCREEN_HANDLER_H_
 
+#include "base/memory/weak_ptr.h"
 #include "chrome/browser/ui/webui/chromeos/login/base_screen_handler.h"
 
 namespace ash {
@@ -15,21 +16,16 @@
 
 // Interface for dependency injection between UserCreationScreen and its
 // WebUI representation.
-class UserCreationView {
+class UserCreationView : public base::SupportsWeakPtr<UserCreationView> {
  public:
-  constexpr static StaticOobeScreenId kScreenId{"user-creation"};
+  inline constexpr static StaticOobeScreenId kScreenId{"user-creation",
+                                                       "UserCreationScreen"};
 
-  virtual ~UserCreationView() {}
+  virtual ~UserCreationView() = default;
 
   // Shows the contents of the screen.
   virtual void Show() = 0;
 
-  // Binds `screen` to the view.
-  virtual void Bind(ash::UserCreationScreen* screen) = 0;
-
-  // Unbinds the screen from the view.
-  virtual void Unbind() = 0;
-
   virtual void SetIsBackButtonVisible(bool value) = 0;
 };
 
@@ -48,16 +44,11 @@
 
  private:
   void Show() override;
-  void Bind(ash::UserCreationScreen* screen) override;
-  void Unbind() override;
   void SetIsBackButtonVisible(bool value) override;
 
   // BaseScreenHandler:
   void DeclareLocalizedValues(
       ::login::LocalizedValuesBuilder* builder) override;
-  void InitializeDeprecated() override;
-
-  ash::UserCreationScreen* screen_ = nullptr;
 };
 
 }  // namespace chromeos
diff --git a/chrome/browser/ui/webui/help/version_updater_chromeos.cc b/chrome/browser/ui/webui/help/version_updater_chromeos.cc
index 92917783..0dbac6b 100644
--- a/chrome/browser/ui/webui/help/version_updater_chromeos.cc
+++ b/chrome/browser/ui/webui/help/version_updater_chromeos.cc
@@ -304,6 +304,7 @@
     case update_engine::Operation::ERROR:
     case update_engine::Operation::REPORTING_ERROR_EVENT:
     case update_engine::Operation::ATTEMPTING_ROLLBACK:
+    case update_engine::Operation::CLEANUP_PREVIOUS_UPDATE:
       // Update engine reports errors for some conditions that shouldn't
       // actually be displayed as errors to users so leave the status as
       // UPDATED. However for some specific errors use the specific FAILED
@@ -343,6 +344,7 @@
       progress = 100;
       my_status = UPDATING;
       break;
+    case update_engine::Operation::UPDATED_BUT_DEFERRED:
     case update_engine::Operation::UPDATED_NEED_REBOOT:
       my_status = NEARLY_UPDATED;
       break;
diff --git a/chrome/browser/ui/webui/new_tab_page/new_tab_page.mojom b/chrome/browser/ui/webui/new_tab_page/new_tab_page.mojom
index 6ea9c4a..94ed4c1df 100644
--- a/chrome/browser/ui/webui/new_tab_page/new_tab_page.mojom
+++ b/chrome/browser/ui/webui/new_tab_page/new_tab_page.mojom
@@ -54,8 +54,6 @@
 struct Theme {
   skia.mojom.SkColor text_color;
   skia.mojom.SkColor background_color;
-  // True if the theme is default.
-  bool is_default;
   // True if the background is custom.
   bool is_custom_background;
   // True if the theme is dark (e.g. NTP background color is dark).
@@ -251,6 +249,8 @@
   ChooseLocalCustomBackground() => (bool success);
   // Get the middle slot promo if it exists.
   GetPromo() => (Promo? promo);
+  // Blocklists a promo.
+  BlocklistPromo(string promo_id);
   // Called when a module the given id is dismissed.
   OnDismissModule(string module_id);
   // Called when a module the given id is restored.
diff --git a/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler.cc b/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler.cc
index 9e63e82..e06b967 100644
--- a/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler.cc
+++ b/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler.cc
@@ -148,7 +148,6 @@
       ntp_custom_background_service
           ? ntp_custom_background_service->GetCustomBackground()
           : absl::nullopt;
-  theme->is_default = theme_service->UsingDefaultTheme();
   theme->background_color = color_provider.GetColor(kColorNewTabPageBackground);
   SkColor text_color;
   if (custom_background.has_value()) {
@@ -649,6 +648,10 @@
   promo_service_->Refresh();
 }
 
+void NewTabPageHandler::BlocklistPromo(const std::string& promo_id) {
+  promo_service_->BlocklistPromo(promo_id);
+}
+
 void NewTabPageHandler::OnDismissModule(const std::string& module_id) {
   const std::string histogram_prefix(kModuleDismissedHistogram);
   base::UmaHistogramExactLinear(histogram_prefix, 1, 1);
diff --git a/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler.h b/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler.h
index 762d47f9..63b1e09d 100644
--- a/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler.h
+++ b/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler.h
@@ -98,6 +98,7 @@
   void ChooseLocalCustomBackground(
       ChooseLocalCustomBackgroundCallback callback) override;
   void GetPromo(GetPromoCallback callback) override;
+  void BlocklistPromo(const std::string& promo_id) override;
   void OnDismissModule(const std::string& module_id) override;
   void OnRestoreModule(const std::string& module_id) override;
   void SetModulesVisible(bool visible) override;
diff --git a/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler_unittest.cc b/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler_unittest.cc
index 2382982..1e41f37 100644
--- a/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler_unittest.cc
+++ b/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler_unittest.cc
@@ -332,7 +332,6 @@
   ASSERT_TRUE(theme);
   EXPECT_EQ(SkColorSetRGB(0, 0, 1), theme->background_color);
   EXPECT_EQ(SkColorSetRGB(0, 0, 2), theme->text_color);
-  EXPECT_FALSE(theme->is_default);
   EXPECT_FALSE(theme->is_custom_background);
   EXPECT_FALSE(theme->is_dark);
   EXPECT_EQ(SkColorSetRGB(0, 0, 3), theme->logo_color);
diff --git a/chrome/browser/ui/webui/signin/signin_url_utils.cc b/chrome/browser/ui/webui/signin/signin_url_utils.cc
index 6cd32db..6b28424 100644
--- a/chrome/browser/ui/webui/signin/signin_url_utils.cc
+++ b/chrome/browser/ui/webui/signin/signin_url_utils.cc
@@ -15,24 +15,29 @@
 namespace {
 
 // Query parameter names of the sync confirmtaion URL.
-const char kIsModalParamKey[] = "is_modal";
+const char kStyleParamKey[] = "style";
 
 // Query parameter names of the reauth confirmation URL.
 const char kAccessPointParamKey[] = "access_point";
 
 }  // namespace
 
-bool IsSyncConfirmationModal(const GURL& url) {
-  std::string is_modal_str;
-  int is_modal = 1;  // Default to modal if the parameter is missing.
-  if (net::GetValueForKeyInQuery(url, kIsModalParamKey, &is_modal_str))
-    base::StringToInt(is_modal_str, &is_modal);
-  return is_modal != 0;
+SyncConfirmationStyle GetSyncConfirmationStyle(const GURL& url) {
+  std::string style_str;
+  int style_int;
+  // Default to modal if the parameter is missing.
+  SyncConfirmationStyle style = SyncConfirmationStyle::kDefaultModal;
+  if (net::GetValueForKeyInQuery(url, kStyleParamKey, &style_str) &&
+      base::StringToInt(style_str, &style_int)) {
+    style = static_cast<SyncConfirmationStyle>(style_int);
+  }
+  return style;
 }
 
-GURL AppendSyncConfirmationQueryParams(const GURL& url, bool is_modal) {
+GURL AppendSyncConfirmationQueryParams(const GURL& url,
+                                       SyncConfirmationStyle style) {
   GURL url_with_params = net::AppendQueryParameter(
-      url, kIsModalParamKey, base::NumberToString(is_modal));
+      url, kStyleParamKey, base::NumberToString(static_cast<int>(style)));
   return url_with_params;
 }
 
diff --git a/chrome/browser/ui/webui/signin/signin_url_utils.h b/chrome/browser/ui/webui/signin/signin_url_utils.h
index c0fabf0..aa4c86e 100644
--- a/chrome/browser/ui/webui/signin/signin_url_utils.h
+++ b/chrome/browser/ui/webui/signin/signin_url_utils.h
@@ -9,13 +9,22 @@
 #include "components/signin/public/base/signin_metrics.h"
 #include "url/gurl.h"
 
-// Returns whether the sync confirmation page is using the design for modal
-// dialog.
-bool IsSyncConfirmationModal(const GURL& url);
+enum class SyncConfirmationStyle {
+  kDefaultModal,
+  kSigninInterceptModal,
+  kWindow
+};
 
-// Adds URL query parameters specified by `params` to `url`.
+// Returns which style the sync confirmation page is using, as a default modal
+// dialog, the signin intercept modal dialog version or as a window.
+SyncConfirmationStyle GetSyncConfirmationStyle(const GURL& url);
+
+// Adds the following URL query parameters to `url`.
 // `is_modal` specifies whether the style for modal dialog is used.
-GURL AppendSyncConfirmationQueryParams(const GURL& url, bool is_modal);
+// `is_signin_intercept` specifies whether the style for the signin intercept is
+// used.
+GURL AppendSyncConfirmationQueryParams(const GURL& url,
+                                       SyncConfirmationStyle style);
 
 // Returns `ReauthAccessPoint` encoded in the query of the reauth confirmation
 // URL.
diff --git a/chrome/browser/ui/webui/signin/signin_url_utils_unittest.cc b/chrome/browser/ui/webui/signin/signin_url_utils_unittest.cc
index c412af4..b00fc0d 100644
--- a/chrome/browser/ui/webui/signin/signin_url_utils_unittest.cc
+++ b/chrome/browser/ui/webui/signin/signin_url_utils_unittest.cc
@@ -14,23 +14,36 @@
 
 TEST(SigninURLUtilsTest, ParseParameterlessSyncConfirmationURL) {
   GURL url = GURL(chrome::kChromeUISyncConfirmationURL);
-  EXPECT_TRUE(IsSyncConfirmationModal(url));
+  EXPECT_EQ(SyncConfirmationStyle::kDefaultModal,
+            GetSyncConfirmationStyle(url));
 }
 
 TEST(SigninURLUtilsSyncConfirmationURLTest, GetAndParseURL) {
   // Modal version.
   GURL url = AppendSyncConfirmationQueryParams(
-      GURL(chrome::kChromeUISyncConfirmationURL), /*is_modal=*/true);
+      GURL(chrome::kChromeUISyncConfirmationURL),
+      SyncConfirmationStyle::kDefaultModal);
   EXPECT_TRUE(url.is_valid());
   EXPECT_EQ(url.host(), chrome::kChromeUISyncConfirmationHost);
-  EXPECT_TRUE(IsSyncConfirmationModal(url));
+  EXPECT_EQ(SyncConfirmationStyle::kDefaultModal,
+            GetSyncConfirmationStyle(url));
 
-  // Non-modal version.
+  // Signin Intercept version.
   url = AppendSyncConfirmationQueryParams(
-      GURL(chrome::kChromeUISyncConfirmationURL), /*is_modal=*/false);
+      GURL(chrome::kChromeUISyncConfirmationURL),
+      SyncConfirmationStyle::kSigninInterceptModal);
   EXPECT_TRUE(url.is_valid());
   EXPECT_EQ(url.host(), chrome::kChromeUISyncConfirmationHost);
-  EXPECT_FALSE(IsSyncConfirmationModal(url));
+  EXPECT_EQ(SyncConfirmationStyle::kSigninInterceptModal,
+            GetSyncConfirmationStyle(url));
+
+  // Window version.
+  url = AppendSyncConfirmationQueryParams(
+      GURL(chrome::kChromeUISyncConfirmationURL),
+      SyncConfirmationStyle::kWindow);
+  EXPECT_TRUE(url.is_valid());
+  EXPECT_EQ(url.host(), chrome::kChromeUISyncConfirmationHost);
+  EXPECT_EQ(SyncConfirmationStyle::kWindow, GetSyncConfirmationStyle(url));
 }
 
 class SigninURLUtilsReauthConfirmationURLTest
diff --git a/chrome/browser/ui/webui/signin/sync_confirmation_ui.cc b/chrome/browser/ui/webui/signin/sync_confirmation_ui.cc
index 42a503c..2059732 100644
--- a/chrome/browser/ui/webui/signin/sync_confirmation_ui.cc
+++ b/chrome/browser/ui/webui/signin/sync_confirmation_ui.cc
@@ -4,6 +4,8 @@
 
 #include "chrome/browser/ui/webui/signin/sync_confirmation_ui.h"
 
+#include <string>
+
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/values.h"
@@ -11,9 +13,12 @@
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/profiles/profile_attributes_storage.h"
 #include "chrome/browser/profiles/profile_avatar_icon_util.h"
+#include "chrome/browser/profiles/profile_manager.h"
 #include "chrome/browser/signin/account_consistency_mode_manager.h"
 #include "chrome/browser/signin/identity_manager_factory.h"
+#include "chrome/browser/signin/signin_features.h"
 #include "chrome/browser/sync/sync_service_factory.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/signin/profile_colors_util.h"
@@ -40,8 +45,7 @@
 
 SyncConfirmationUI::SyncConfirmationUI(content::WebUI* web_ui)
     : SigninWebDialogUI(web_ui), profile_(Profile::FromWebUI(web_ui)) {
-  bool is_modal =
-      IsSyncConfirmationModal(web_ui->GetWebContents()->GetVisibleURL());
+  const GURL& url = web_ui->GetWebContents()->GetVisibleURL();
   const bool is_sync_allowed = SyncServiceFactory::IsSyncAllowed(profile_);
 
   content::WebUIDataSource* source =
@@ -64,7 +68,7 @@
                     IDS_SYNC_LOADING_CONFIRMATION_TITLE);
 
   if (is_sync_allowed) {
-    InitializeForSyncConfirmation(source, is_modal);
+    InitializeForSyncConfirmation(source, GetSyncConfirmationStyle(url));
   } else {
     InitializeForSyncDisabled(source);
   }
@@ -86,7 +90,7 @@
 
 void SyncConfirmationUI::InitializeForSyncConfirmation(
     content::WebUIDataSource* source,
-    bool is_modal_dialog) {
+    SyncConfirmationStyle style) {
   int title_id = IDS_SYNC_CONFIRMATION_TITLE;
   int info_title_id = IDS_SYNC_CONFIRMATION_SYNC_INFO_TITLE;
   int confirm_label_id = IDS_SYNC_CONFIRMATION_CONFIRM_BUTTON_LABEL;
@@ -94,9 +98,6 @@
   title_id = IDS_SYNC_CONFIRMATION_TITLE_LACROS_NON_FORCED;
 #endif
   AddStringResource(source, "syncConfirmationTitle", title_id);
-  AddStringResource(source, "syncConfirmationSyncInfoTitle", info_title_id);
-  AddStringResource(source, "syncConfirmationConfirmLabel", confirm_label_id);
-
   AddStringResource(source, "syncConfirmationSyncInfoDesc",
                     IDS_SYNC_CONFIRMATION_SYNC_INFO_DESC);
   AddStringResource(source, "syncConfirmationSettingsInfo",
@@ -111,32 +112,62 @@
   source->SetDefaultResource(
       IDR_SIGNIN_SYNC_CONFIRMATION_SYNC_CONFIRMATION_HTML);
 
-  source->AddBoolean("isModalDialog", is_modal_dialog);
+  source->AddBoolean("isModalDialog",
+                     style == SyncConfirmationStyle::kDefaultModal ||
+                         style == SyncConfirmationStyle::kSigninInterceptModal);
+  source->AddBoolean("isSigninInterceptFre",
+                     style == SyncConfirmationStyle::kSigninInterceptModal);
 
   source->AddString("accountPictureUrl",
                     profiles::GetPlaceholderAvatarIconUrl());
+  switch (style) {
+    case SyncConfirmationStyle::kSigninInterceptModal:
+      DCHECK(base::FeatureList::IsEnabled(kSyncPromoAfterSigninIntercept));
+      // TODO(https://crbug.com/1282157): Add dynamic welcome title.
+      AddStringResource(source, "syncConfirmationSyncInfoTitle",
+                        IDS_SYNC_CONFIRMATION_SYNC_INFO_SIGNIN_INTERCEPT);
+      AddStringResource(source, "syncConfirmationConfirmLabel",
+                        IDS_SYNC_CONFIRMATION_TURN_ON_SYNC_BUTTON_LABEL);
+      AddStringResource(source, "syncConfirmationUndoLabel", IDS_NO_THANKS);
+      AddStringResource(source, "syncConfirmationSettingsLabel",
+                        IDS_SYNC_CONFIRMATION_MANAGE_SYNC_BUTTON_LABEL);
 
-  if (is_modal_dialog) {
-    AddStringResource(source, "syncConfirmationUndoLabel", IDS_CANCEL);
-    AddStringResource(source, "syncConfirmationSettingsLabel",
-                      IDS_SYNC_CONFIRMATION_SETTINGS_BUTTON_LABEL);
+      source->AddResourcePath(
+          "images/sync_confirmation_illustration.svg",
+          IDR_SIGNIN_SYNC_CONFIRMATION_IMAGES_SYNC_CONFIRMATION_ILLUSTRATION_SVG);
+      source->AddResourcePath(
+          "images/sync_confirmation_illustration_dark.svg",
+          IDR_SIGNIN_SYNC_CONFIRMATION_IMAGES_SYNC_CONFIRMATION_ILLUSTRATION_DARK_SVG);
+      break;
+    case SyncConfirmationStyle::kDefaultModal:
+      AddStringResource(source, "syncConfirmationSyncInfoTitle", info_title_id);
+      AddStringResource(source, "syncConfirmationConfirmLabel",
+                        confirm_label_id);
+      AddStringResource(source, "syncConfirmationUndoLabel", IDS_CANCEL);
+      AddStringResource(source, "syncConfirmationSettingsLabel",
+                        IDS_SYNC_CONFIRMATION_SETTINGS_BUTTON_LABEL);
 
-    source->AddResourcePath(
-        "images/sync_confirmation_illustration.svg",
-        IDR_SIGNIN_SYNC_CONFIRMATION_IMAGES_SYNC_CONFIRMATION_ILLUSTRATION_SVG);
-    source->AddResourcePath(
-        "images/sync_confirmation_illustration_dark.svg",
-        IDR_SIGNIN_SYNC_CONFIRMATION_IMAGES_SYNC_CONFIRMATION_ILLUSTRATION_DARK_SVG);
-  } else {
-    AddStringResource(source, "syncConfirmationUndoLabel", IDS_NO_THANKS);
-    AddStringResource(source, "syncConfirmationSettingsLabel",
-                      IDS_SYNC_CONFIRMATION_REFRESHED_SETTINGS_BUTTON_LABEL);
-    source->AddResourcePath(
-        "images/sync_confirmation_refreshed_illustration.svg",
-        IDR_SIGNIN_SYNC_CONFIRMATION_IMAGES_SYNC_CONFIRMATION_REFRESHED_ILLUSTRATION_SVG);
-    source->AddResourcePath(
-        "images/sync_confirmation_refreshed_illustration_dark.svg",
-        IDR_SIGNIN_SYNC_CONFIRMATION_IMAGES_SYNC_CONFIRMATION_REFRESHED_ILLUSTRATION_DARK_SVG);
+      source->AddResourcePath(
+          "images/sync_confirmation_illustration.svg",
+          IDR_SIGNIN_SYNC_CONFIRMATION_IMAGES_SYNC_CONFIRMATION_ILLUSTRATION_SVG);
+      source->AddResourcePath(
+          "images/sync_confirmation_illustration_dark.svg",
+          IDR_SIGNIN_SYNC_CONFIRMATION_IMAGES_SYNC_CONFIRMATION_ILLUSTRATION_DARK_SVG);
+      break;
+    case SyncConfirmationStyle::kWindow:
+      AddStringResource(source, "syncConfirmationSyncInfoTitle", info_title_id);
+      AddStringResource(source, "syncConfirmationConfirmLabel",
+                        confirm_label_id);
+      AddStringResource(source, "syncConfirmationUndoLabel", IDS_NO_THANKS);
+      AddStringResource(source, "syncConfirmationSettingsLabel",
+                        IDS_SYNC_CONFIRMATION_REFRESHED_SETTINGS_BUTTON_LABEL);
+      source->AddResourcePath(
+          "images/sync_confirmation_refreshed_illustration.svg",
+          IDR_SIGNIN_SYNC_CONFIRMATION_IMAGES_SYNC_CONFIRMATION_REFRESHED_ILLUSTRATION_SVG);
+      source->AddResourcePath(
+          "images/sync_confirmation_refreshed_illustration_dark.svg",
+          IDR_SIGNIN_SYNC_CONFIRMATION_IMAGES_SYNC_CONFIRMATION_REFRESHED_ILLUSTRATION_DARK_SVG);
+      break;
   }
 }
 
diff --git a/chrome/browser/ui/webui/signin/sync_confirmation_ui.h b/chrome/browser/ui/webui/signin/sync_confirmation_ui.h
index b70c4f1..c691e79e 100644
--- a/chrome/browser/ui/webui/signin/sync_confirmation_ui.h
+++ b/chrome/browser/ui/webui/signin/sync_confirmation_ui.h
@@ -24,6 +24,8 @@
 class WebUI;
 }
 
+enum class SyncConfirmationStyle;
+
 // WebUI controller for the sync confirmation dialog.
 //
 // Note: This controller does not set the WebUI message handler. It is
@@ -43,7 +45,7 @@
 
  private:
   void InitializeForSyncConfirmation(content::WebUIDataSource* source,
-                                     bool is_modal_dialog);
+                                     SyncConfirmationStyle style);
   void InitializeForSyncDisabled(content::WebUIDataSource* source);
 
   // Adds a string resource with the given GRD |ids| to the WebUI data |source|
diff --git a/chrome/browser/web_applications/web_app_command_manager.cc b/chrome/browser/web_applications/web_app_command_manager.cc
index fe78e02d..77fe3f1 100644
--- a/chrome/browser/web_applications/web_app_command_manager.cc
+++ b/chrome/browser/web_applications/web_app_command_manager.cc
@@ -267,13 +267,15 @@
   DCHECK(command_it != commands_.end());
   commands_.erase(command_it);
 
-  auto lock_free =
-      lock_manager_.TestLock(WebAppCommandLock::GetSharedWebContentsLock());
-  DCHECK_NE(lock_free,
-            content::DisjointRangeLockManager::TestLockResult::kInvalid);
-  if (lock_free == content::DisjointRangeLockManager::TestLockResult::kFree) {
-    AddValueToLog(base::Value("Destroying the shared web contents."));
-    shared_web_contents_.reset();
+  if (shared_web_contents_) {
+    auto lock_free =
+        lock_manager_.TestLock(WebAppCommandLock::GetSharedWebContentsLock());
+    DCHECK_NE(lock_free,
+              content::DisjointRangeLockManager::TestLockResult::kInvalid);
+    if (lock_free == content::DisjointRangeLockManager::TestLockResult::kFree) {
+      AddValueToLog(base::Value("Destroying the shared web contents."));
+      shared_web_contents_.reset();
+    }
   }
 
   std::move(completion_callback).Run();
diff --git a/chrome/browser/web_applications/web_app_install_info.cc b/chrome/browser/web_applications/web_app_install_info.cc
index f3fb17f..3c4946f 100644
--- a/chrome/browser/web_applications/web_app_install_info.cc
+++ b/chrome/browser/web_applications/web_app_install_info.cc
@@ -213,6 +213,31 @@
 }
 
 // WebAppInstallInfo
+
+// static
+WebAppInstallInfo WebAppInstallInfo::CreateInstallInfoForCreateShortcut(
+    const GURL& document_url,
+    const WebAppInstallInfo& other) {
+  WebAppInstallInfo create_shortcut_info;
+  create_shortcut_info.title = other.title;
+  create_shortcut_info.description = other.description;
+  create_shortcut_info.start_url = document_url;
+  create_shortcut_info.manifest_url = other.manifest_url;
+  create_shortcut_info.manifest_icons = other.manifest_icons;
+  create_shortcut_info.icon_bitmaps = other.icon_bitmaps;
+  create_shortcut_info.other_icon_bitmaps = other.other_icon_bitmaps;
+  create_shortcut_info.is_generated_icon = other.is_generated_icon;
+  create_shortcut_info.generated_icon_color = other.generated_icon_color;
+  create_shortcut_info.theme_color = other.theme_color;
+  create_shortcut_info.dark_mode_theme_color = other.dark_mode_theme_color;
+  create_shortcut_info.background_color = other.background_color;
+  create_shortcut_info.dark_mode_background_color =
+      other.dark_mode_background_color;
+  create_shortcut_info.display_mode = other.display_mode;
+  create_shortcut_info.additional_search_terms = other.additional_search_terms;
+  return create_shortcut_info;
+}
+
 WebAppInstallInfo::WebAppInstallInfo() = default;
 
 WebAppInstallInfo::WebAppInstallInfo(const WebAppInstallInfo& other) = default;
diff --git a/chrome/browser/web_applications/web_app_install_info.h b/chrome/browser/web_applications/web_app_install_info.h
index 2d51f51..3480054d 100644
--- a/chrome/browser/web_applications/web_app_install_info.h
+++ b/chrome/browser/web_applications/web_app_install_info.h
@@ -173,6 +173,13 @@
     MOBILE_CAPABLE_APPLE
   };
 
+  // Returns a copy of the |other| that has only the fields that should be
+  // copied/derived from various sources (e.g generated icons, manifest
+  // properties). This will strip out app-like fields such as file handlers etc.
+  static WebAppInstallInfo CreateInstallInfoForCreateShortcut(
+      const GURL& document_url,
+      const WebAppInstallInfo& other);
+
   WebAppInstallInfo();
 
   // TODO(b/227755254): Delete copy constructors and migrate to move assignment.
diff --git a/chrome/browser/web_applications/web_app_install_task.cc b/chrome/browser/web_applications/web_app_install_task.cc
index 04944a04..987fc34 100644
--- a/chrome/browser/web_applications/web_app_install_task.cc
+++ b/chrome/browser/web_applications/web_app_install_task.cc
@@ -29,6 +29,7 @@
 #include "chrome/browser/web_applications/web_app_url_loader.h"
 #include "chrome/browser/web_applications/web_app_utils.h"
 #include "chrome/common/chrome_features.h"
+#include "components/webapps/browser/features.h"
 #include "components/webapps/browser/install_result_code.h"
 #include "components/webapps/browser/installable/installable_metrics.h"
 #include "content/public/browser/browser_thread.h"
@@ -639,6 +640,16 @@
     UpdateWebAppInfoFromManifest(*opt_manifest, manifest_url,
                                  web_app_info.get());
 
+  if (flow_ == WebAppInstallFlow::kCreateShortcut &&
+      base::FeatureList::IsEnabled(
+          webapps::features::kCreateShortcutIgnoresManifest)) {
+    // When creating a shortcut, the |manifest_id| is not part of the App's
+    // primary key. The only thing that identifies a shortcut is the start URL,
+    // which is always set to the current page.
+    *web_app_info = WebAppInstallInfo::CreateInstallInfoForCreateShortcut(
+        web_contents()->GetLastCommittedURL(), *web_app_info);
+  }
+
   AppId app_id =
       GenerateAppId(web_app_info->manifest_id, web_app_info->start_url);
 
diff --git a/chrome/browser/web_applications/web_app_install_task_unittest.cc b/chrome/browser/web_applications/web_app_install_task_unittest.cc
index 7f82566..b6ba8eb 100644
--- a/chrome/browser/web_applications/web_app_install_task_unittest.cc
+++ b/chrome/browser/web_applications/web_app_install_task_unittest.cc
@@ -53,6 +53,7 @@
 #include "chrome/test/base/testing_browser_process.h"
 #include "chrome/test/base/testing_profile.h"
 #include "chrome/test/base/testing_profile_manager.h"
+#include "components/webapps/browser/features.h"
 #include "components/webapps/browser/install_result_code.h"
 #include "components/webapps/browser/installable/installable_data.h"
 #include "components/webapps/browser/installable/installable_metrics.h"
@@ -1139,6 +1140,54 @@
   run_loop.Run();
 }
 
+class WebAppInstallTaskWithShortcutFeatureTest : public WebAppInstallTaskTest {
+ private:
+  base::test::ScopedFeatureList scoped_feature_list_{
+      webapps::features::kCreateShortcutIgnoresManifest};
+};
+
+TEST_F(WebAppInstallTaskWithShortcutFeatureTest,
+       CreateShortcutUsesDocumentURL) {
+  InitializeInstallTaskAndRetriever(
+      webapps::WebappInstallSource::MENU_BROWSER_TAB);
+  SetInstallFinalizerForTesting();
+
+  const GURL manifest_start_url{"https://example.com/?pwa=true"};
+  const std::string title = "App Name";
+  const std::string description = "Description";
+  const GURL manifest_scope{"https://example.com/"};
+  const absl::optional<SkColor> theme_color = 0xAABBCCDD;
+
+  CreateRendererAppInfo(manifest_start_url, title, description, manifest_scope,
+                        theme_color,
+                        /*user_display_mode=*/UserDisplayMode::kStandalone);
+
+  base::RunLoop run_loop;
+
+  const GURL document_url{"https://example.com/my/special/document/"};
+  NavigateAndCommit(document_url);
+
+  install_task_->InstallWebAppFromManifestWithFallback(
+      web_contents(), WebAppInstallFlow::kCreateShortcut,
+      base::BindOnce(test::TestAcceptDialogCallback),
+      base::BindLambdaForTesting(
+          [&](const AppId& installed_app_id, webapps::InstallResultCode code) {
+            EXPECT_EQ(webapps::InstallResultCode::kSuccessNewInstall, code);
+
+            std::unique_ptr<WebAppInstallInfo> final_web_app_info =
+                fake_install_finalizer().web_app_info();
+            EXPECT_EQ(document_url, final_web_app_info->start_url);
+            EXPECT_EQ(absl::nullopt, final_web_app_info->manifest_id);
+            EXPECT_EQ(GURL{}, final_web_app_info->scope);
+            EXPECT_EQ(theme_color, final_web_app_info->theme_color);
+            EXPECT_EQ(title, base::UTF16ToUTF8(final_web_app_info->title));
+
+            run_loop.Quit();
+          }));
+
+  run_loop.Run();
+}
+
 #if BUILDFLAG(IS_CHROMEOS_ASH)
 TEST_F(WebAppInstallTaskTest, IntentToPlayStore) {
   arc_test_.app_instance()->set_is_installable(true);
diff --git a/chrome/build/linux.pgo.txt b/chrome/build/linux.pgo.txt
index 053f2c6..8954379d 100644
--- a/chrome/build/linux.pgo.txt
+++ b/chrome/build/linux.pgo.txt
@@ -1 +1 @@
-chrome-linux-main-1658750173-2eec8f1ea985f8fad2e743e6a9c059e46fa7b84f.profdata
+chrome-linux-main-1658771855-3ac45034f7eba4c709606006fb28cba1b88dd52c.profdata
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt
index 5e66e66..a3b5106 100644
--- a/chrome/build/mac.pgo.txt
+++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@
-chrome-mac-main-1658728299-716902db72425b5beeb45d1c0f60cc50332def39.profdata
+chrome-mac-main-1658750173-3b01b102cd09d7441b13144d51ecd6f95eff3fdd.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt
index 6a23609..fd5ffc8b 100644
--- a/chrome/build/win32.pgo.txt
+++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@
-chrome-win32-main-1658739531-f90dd72e05f9bbbe508c0821fa793b29c57ed8cf.profdata
+chrome-win32-main-1658750173-b3c397c9a7c1ec5f404c07bf0d4e1a693698978c.profdata
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index bbcc7e5..37d3772 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -1394,6 +1394,7 @@
       "//components/safe_browsing/core/browser/password_protection:password_protection_metrics_util",
       "//components/safe_browsing/core/common",
       "//components/safe_browsing/core/common/proto:client_model_proto",
+      "//components/saved_tab_groups:core",
       "//components/search",
       "//components/security_interstitials/content:proto",
       "//components/security_interstitials/content:security_interstitial_page",
@@ -1979,14 +1980,14 @@
       "../browser/portal/portal_recently_audible_browsertest.cc",
       "../browser/predictors/loading_predictor_browsertest.cc",
       "../browser/prefetch/prefetch_browsertest.cc",
-      "../browser/prefetch/prefetch_proxy/prefetch_proxy_browsertest.cc",
-      "../browser/prefetch/prefetch_proxy/prefetch_proxy_test_utils.cc",
-      "../browser/prefetch/prefetch_proxy/prefetch_proxy_test_utils.h",
       "../browser/prefs/pref_functional_browsertest.cc",
       "../browser/prefs/pref_service_browsertest.cc",
       "../browser/prefs/tracked/pref_hash_browsertest.cc",
       "../browser/preloading/latency_ablation_browsertest.cc",
       "../browser/preloading/prefetch/no_state_prefetch/prerender_nostate_prefetch_browsertest.cc",
+      "../browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_browsertest.cc",
+      "../browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_test_utils.cc",
+      "../browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_test_utils.h",
       "../browser/preloading/prefetch/search_prefetch/search_prefetch_browser_test_base.cc",
       "../browser/preloading/prefetch/search_prefetch/search_prefetch_browser_test_base.h",
       "../browser/preloading/prefetch/search_prefetch/search_prefetch_service_browsertest.cc",
@@ -5294,16 +5295,6 @@
     "../browser/predictors/resource_prefetch_predictor_tables_unittest.cc",
     "../browser/predictors/resource_prefetch_predictor_unittest.cc",
     "../browser/prefetch/prefetch_prefs_unittest.cc",
-    "../browser/prefetch/prefetch_proxy/prefetch_container_unittest.cc",
-    "../browser/prefetch/prefetch_proxy/prefetch_proxy_canary_checker_unittest.cc",
-    "../browser/prefetch/prefetch_proxy/prefetch_proxy_cookie_listener_unittest.cc",
-    "../browser/prefetch/prefetch_proxy/prefetch_proxy_origin_decider_unittest.cc",
-    "../browser/prefetch/prefetch_proxy/prefetch_proxy_params_unittest.cc",
-    "../browser/prefetch/prefetch_proxy/prefetch_proxy_prefetch_metrics_collector_unittest.cc",
-    "../browser/prefetch/prefetch_proxy/prefetch_proxy_proxy_configurator_unittest.cc",
-    "../browser/prefetch/prefetch_proxy/prefetch_proxy_tab_helper_unittest.cc",
-    "../browser/prefetch/prefetch_proxy/prefetch_proxy_url_loader_interceptor_unittest.cc",
-    "../browser/prefetch/prefetch_proxy/prefetch_type_unittest.cc",
     "../browser/prefs/chrome_command_line_pref_store_proxy_unittest.cc",
     "../browser/prefs/chrome_command_line_pref_store_ssl_manager_unittest.cc",
     "../browser/prefs/chrome_command_line_pref_store_unittest.cc",
@@ -5313,6 +5304,16 @@
     "../browser/prefs/proxy_policy_unittest.cc",
     "../browser/prefs/session_startup_pref_unittest.cc",
     "../browser/preloading/prefetch/no_state_prefetch/no_state_prefetch_unittest.cc",
+    "../browser/preloading/prefetch/prefetch_proxy/prefetch_container_unittest.cc",
+    "../browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_canary_checker_unittest.cc",
+    "../browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_cookie_listener_unittest.cc",
+    "../browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_origin_decider_unittest.cc",
+    "../browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_params_unittest.cc",
+    "../browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_prefetch_metrics_collector_unittest.cc",
+    "../browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_proxy_configurator_unittest.cc",
+    "../browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_tab_helper_unittest.cc",
+    "../browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_url_loader_interceptor_unittest.cc",
+    "../browser/preloading/prefetch/prefetch_proxy/prefetch_type_unittest.cc",
     "../browser/privacy/privacy_metrics_service_unittest.cc",
     "../browser/privacy_sandbox/privacy_sandbox_service_unittest.cc",
     "../browser/privacy_sandbox/privacy_sandbox_settings_delegate_unittest.cc",
@@ -5779,6 +5780,7 @@
     "//components/safe_browsing/core/common",
     "//components/safe_browsing/core/common/proto:client_model_proto",
     "//components/safe_search_api:test_support",
+    "//components/saved_tab_groups:core",
     "//components/schema_org/common:improved_mojom",
     "//components/search",
     "//components/search_provider_logos",
@@ -9260,6 +9262,7 @@
       "//components/reading_list/features:flags",
       "//components/renderer_context_menu",
       "//components/resources",
+      "//components/saved_tab_groups:core",
       "//components/security_interstitials/content:security_interstitial_page",
       "//components/shared_highlighting/core/common",
       "//components/site_engagement/content",
diff --git a/chrome/test/chromedriver/test/run_webdriver_tests.py b/chrome/test/chromedriver/test/run_webdriver_tests.py
index 2eb214c..f8a754a 100644
--- a/chrome/test/chromedriver/test/run_webdriver_tests.py
+++ b/chrome/test/chromedriver/test/run_webdriver_tests.py
@@ -36,8 +36,8 @@
 from blinkpy.common import exit_codes
 from blinkpy.common.host import Host
 from blinkpy.common.path_finder import PathFinder
+from blinkpy.common.path_finder import RELATIVE_WPT_TESTS
 from blinkpy.common.system.log_utils import configure_logging
-from blinkpy.w3c.common import CHROMIUM_WPT_DIR
 from blinkpy.web_tests.models.test_expectations import TestExpectations
 from blinkpy.web_tests.models.typ_types import ResultType
 
@@ -208,7 +208,7 @@
   # /blinkpy/web_tests/servers/wptserve.py?l=23&rcl=375b34c6ba64
   # 5d00c1413e4c6106c7bb74581c85
   server_config_dict = {
-    "doc_root": path_finder.path_from_chromium_base(CHROMIUM_WPT_DIR),
+    "doc_root": path_finder.path_from_chromium_base(RELATIVE_WPT_TESTS),
     "browser_host": "web-platform.test",
     "domains": {"": {"": "web-platform.test",
                      "www": "www.web-platform.test",
diff --git a/chrome/test/data/updater/puffin_patch_test/BUILD.gn b/chrome/test/data/updater/puffin_patch_test/BUILD.gn
new file mode 100644
index 0000000..8911d0e
--- /dev/null
+++ b/chrome/test/data/updater/puffin_patch_test/BUILD.gn
@@ -0,0 +1,73 @@
+# Copyright 2022 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("//components/crx_file/crx3.gni")
+
+group("puffin_patch_test_files") {
+  testonly = true
+  data_deps = [
+    ":puff_patch_v1_to_v2",
+    ":puff_patch_v2_to_v1",
+    ":puffin_app_v1_crx",
+    ":puffin_app_v2_crx",
+  ]
+}
+
+executable("puffin_app_v2") {
+  testonly = true
+  sources = [ "puffin_app_v2/main.cc" ]
+}
+
+executable("puffin_app_v1") {
+  testonly = true
+  sources = [ "puffin_app_v1/main.cc" ]
+}
+
+crx3("puffin_app_v1_crx") {
+  base_dir = "$root_build_dir"
+  key = "//chrome/updater/test/data/selfupdate_test_key.der"
+  output = "$root_build_dir/puffin_app_v1.crx3"
+  testonly = true
+  deps = [ ":puffin_app_v1" ]
+  if (is_win) {
+    inputs = [ "$root_build_dir/puffin_app_v1.exe" ]
+  } else {
+    inputs = [ "$root_build_dir/puffin_app_v1" ]
+  }
+}
+
+copy("puff_patch_v1_to_v2") {
+  if (is_win) {
+    sources = [ "win_v1_to_v2.puff" ]
+  } else if (is_linux) {
+    sources = [ "linux_v1_to_v2.puff" ]
+  } else if (is_mac) {
+    sources = [ "mac_v1_to_v2.puff" ]
+  }
+  outputs = [ "$root_build_dir/puffin_app_v1_to_v2.puff" ]
+}
+
+copy("puff_patch_v2_to_v1") {
+  if (is_win) {
+    sources = [ "win_v2_to_v1.puff" ]
+  } else if (is_linux) {
+    sources = [ "linux_v2_to_v1.puff" ]
+  } else if (is_mac) {
+    sources = [ "mac_v2_to_v1.puff" ]
+  }
+  outputs = [ "$root_build_dir/puffin_app_v2_to_v1.puff" ]
+}
+
+crx3("puffin_app_v2_crx") {
+  base_dir = "$root_build_dir"
+  key = "//chrome/updater/test/data/selfupdate_test_key.der"
+  output = "$root_build_dir/puffin_app_v2.crx3"
+  testonly = true
+  deps = [ ":puffin_app_v2" ]
+  if (is_win) {
+    inputs = [ "$root_build_dir/puffin_app_v2.exe" ]
+  } else {
+    inputs = [ "$root_build_dir/puffin_app_v2" ]
+  }
+}
diff --git a/chrome/test/data/updater/puffin_patch_test/README.md b/chrome/test/data/updater/puffin_patch_test/README.md
new file mode 100644
index 0000000..ede3990a
--- /dev/null
+++ b/chrome/test/data/updater/puffin_patch_test/README.md
@@ -0,0 +1,44 @@
+## How to regenerate linux, mac and windows test puff files:
+
+If changes are made to puffin_app_v1/main.cc or puffin_app_v2/main.cc, the various puff files which represent a patch between the crx's produced by each of these sources. Thus, we'll need to regenerate these on each platform.
+
+This README assumes you are already in your Chromium repo's src directory, that your gn args were generated in "out/Default", and that you are able to build the third_party/puffin:puffin target. Eventually, puffin will always be a valid target, but currently it requires you to link it into the build somehow. For now, you may need to temporarily add the following to your "//third_party/BUILD.gn"
+
+    group("puffin") {
+      testonly = true
+      deps = [ "//third_party/puffin"]
+    }
+
+*Be careful not to submit this change in the final cl!*
+
+**Linux commands**
+    autoninja -C out/Default puffin puffin_app_v1_crx puffin_app_v2_crx
+    rm chrome/test/data/updater/puffin_patch_test/linux_v1_to_v2.puff
+    rm chrome/test/data/updater/puffin_patch_test/linux_v2_to_v1.puff
+    out/Default/puffin -puffdiff out/Default/puffin_app_v1.crx3 out/Default/puffin_app_v2.crx3 chrome/test/data/updater/puffin_patch_test/linux_v1_to_v2.puff
+    out/Default/puffin -puffdiff out/Default/puffin_app_v2.crx3 out/Default/puffin_app_v1.crx3 chrome/test/data/updater/puffin_patch_test/linux_v2_to_v1.puff
+
+**Mac commands**
+    autoninja -C out/Default puffin puffin_app_v1_crx puffin_app_v2_crx
+    rm chrome/test/data/updater/puffin_patch_test/mac_v1_to_v2.puff
+    rm chrome/test/data/updater/puffin_patch_test/mac_v2_to_v1.puff
+    out/Default/puffin -puffdiff out/Default/puffin_app_v1.crx3 out/Default/puffin_app_v2.crx3 chrome/test/data/updater/puffin_patch_test/mac_v1_to_v2.puff
+    out/Default/puffin -puffdiff out/Default/puffin_app_v2.crx3 out/Default/puffin_app_v1.crx3 chrome/test/data/updater/puffin_patch_test/mac_v2_to_v1.puff
+
+**Windows commands**
+    autoninja -C out\Default puffin puffin_app_v1_crx puffin_app_v2_crx
+    del /f  chrome\test\data\updater\puffin_patch_test\win_v1_to_v2.puff
+    del /f  chrome\test\data\updater\puffin_patch_test\win_v2_to_v1.puff
+    out\Default\puffin.exe -puffdiff out\Default\puffin_app_v1.crx3 out\Default\puffin_app_v2.crx3 chrome\test\data\updater\puffin_patch_test\win_v1_to_v2.puff
+    out\Default\puffin.exe -puffdiff out\Default\puffin_app_v2.crx3 out\Default\puffin_app_v1.crx3 chrome\test\data\updater\puffin_patch_test\win_v2_to_v1.puff
+
+## Testing the new patches
+You can test but running the following commands to verify if all tests pass, on each platform. Specifically the "PatchingTest.ApplyPuffPatchTest":
+
+**Mac and Linux:**
+    autoninja -C out/Default puffin_unittest
+    out/Default/puffin_unittest
+
+**Windows:**
+    autoninja -C out\Default puffin_unittest
+    out\Default\puffin_unittest.exe
\ No newline at end of file
diff --git a/chrome/test/data/updater/puffin_patch_test/linux_v1_to_v2.puff b/chrome/test/data/updater/puffin_patch_test/linux_v1_to_v2.puff
new file mode 100644
index 0000000..7aaef8b
--- /dev/null
+++ b/chrome/test/data/updater/puffin_patch_test/linux_v1_to_v2.puff
Binary files differ
diff --git a/chrome/test/data/updater/puffin_patch_test/linux_v2_to_v1.puff b/chrome/test/data/updater/puffin_patch_test/linux_v2_to_v1.puff
new file mode 100644
index 0000000..418392a
--- /dev/null
+++ b/chrome/test/data/updater/puffin_patch_test/linux_v2_to_v1.puff
Binary files differ
diff --git a/chrome/test/data/updater/puffin_patch_test/mac_v1_to_v2.puff b/chrome/test/data/updater/puffin_patch_test/mac_v1_to_v2.puff
new file mode 100644
index 0000000..059c122
--- /dev/null
+++ b/chrome/test/data/updater/puffin_patch_test/mac_v1_to_v2.puff
Binary files differ
diff --git a/chrome/test/data/updater/puffin_patch_test/mac_v2_to_v1.puff b/chrome/test/data/updater/puffin_patch_test/mac_v2_to_v1.puff
new file mode 100644
index 0000000..91b92c52
--- /dev/null
+++ b/chrome/test/data/updater/puffin_patch_test/mac_v2_to_v1.puff
Binary files differ
diff --git a/chrome/test/data/updater/puffin_patch_test/puffin_app_v1/main.cc b/chrome/test/data/updater/puffin_patch_test/puffin_app_v1/main.cc
new file mode 100644
index 0000000..d85be81
--- /dev/null
+++ b/chrome/test/data/updater/puffin_patch_test/puffin_app_v1/main.cc
@@ -0,0 +1,14 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// The puffin patch test app is a do-nothing application "installer" that is
+// embedded in an update CRX. This is version 1, version 2 is located at
+// ../puffin_app_v2. if you apply the puffpatch puffin_app_v1_to_v2.puff to
+// puffin_app_v1.crx3, it produces puffin_app_v2.crx3. See
+// //third_party/puffin.
+#include <iostream>
+
+int main() {
+  std::cout << "Hello, world! this is version 1 of puffin_app." << std::endl;
+}
diff --git a/chrome/test/data/updater/puffin_patch_test/puffin_app_v2/main.cc b/chrome/test/data/updater/puffin_patch_test/puffin_app_v2/main.cc
new file mode 100644
index 0000000..f55c947
--- /dev/null
+++ b/chrome/test/data/updater/puffin_patch_test/puffin_app_v2/main.cc
@@ -0,0 +1,14 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// The puffin patch test app is a do-nothing application "installer" that is
+// embedded in an update CRX. This is version 2, version 1 is located at
+// ../puffin_app_v1. If you apply the
+// puffpatch puffin_app_v1_to_v2.puff to puffin_app_v1.crx3, it produces
+// puffin_app_v2.crx3. See //third_party/puffin.
+#include <iostream>
+
+int main() {
+  std::cout << "Hello, world! this is version 2 of puffin_app." << std::endl;
+}
diff --git a/chrome/test/data/updater/puffin_patch_test/win_v1_to_v2.puff b/chrome/test/data/updater/puffin_patch_test/win_v1_to_v2.puff
new file mode 100644
index 0000000..617a490
--- /dev/null
+++ b/chrome/test/data/updater/puffin_patch_test/win_v1_to_v2.puff
Binary files differ
diff --git a/chrome/test/data/updater/puffin_patch_test/win_v2_to_v1.puff b/chrome/test/data/updater/puffin_patch_test/win_v2_to_v1.puff
new file mode 100644
index 0000000..1449eac
--- /dev/null
+++ b/chrome/test/data/updater/puffin_patch_test/win_v2_to_v1.puff
Binary files differ
diff --git a/chrome/test/data/webui/cr_elements/cr_expand_button_tests.ts b/chrome/test/data/webui/cr_elements/cr_expand_button_tests.ts
index 3400d25..7e14bf7 100644
--- a/chrome/test/data/webui/cr_elements/cr_expand_button_tests.ts
+++ b/chrome/test/data/webui/cr_elements/cr_expand_button_tests.ts
@@ -14,6 +14,8 @@
 suite('cr-expand-button', function() {
   let button: CrExpandButtonElement;
   let icon: CrIconButtonElement;
+  const expandTitle = 'expand title';
+  const collapseTitle = 'collapse title';
 
   setup(() => {
     document.body.innerHTML = '';
@@ -33,10 +35,14 @@
   });
 
   test('changing |expanded|', () => {
+    button.expandTitle = expandTitle;
+    button.collapseTitle = collapseTitle;
     assertFalse(button.expanded);
+    assertEquals(expandTitle, button.title);
     assertEquals('false', icon.getAttribute('aria-expanded'));
     assertEquals('cr:expand-more', icon.ironIcon);
     button.expanded = true;
+    assertEquals(collapseTitle, button.title);
     assertEquals('true', icon.getAttribute('aria-expanded'));
     assertEquals('cr:expand-less', icon.ironIcon);
   });
@@ -72,4 +78,14 @@
     button.expanded = true;
     assertEquals(collapseIconName, icon.ironIcon);
   });
+
+  test('setting |expand-title| and |collapse-title|', () => {
+    assertFalse(button.expanded);
+    button.expandTitle = expandTitle;
+    assertEquals(expandTitle, button.title);
+
+    button.click();
+    button.collapseTitle = collapseTitle;
+    assertEquals(collapseTitle, button.title);
+  });
 });
diff --git a/chrome/test/data/webui/new_tab_page/middle_slot_promo_test.ts b/chrome/test/data/webui/new_tab_page/middle_slot_promo_test.ts
index 7ba321e8..7c7cbeaf 100644
--- a/chrome/test/data/webui/new_tab_page/middle_slot_promo_test.ts
+++ b/chrome/test/data/webui/new_tab_page/middle_slot_promo_test.ts
@@ -8,7 +8,9 @@
 import {MiddleSlotPromoElement} from 'chrome://new-tab-page/lazy_load.js';
 import {$$, BrowserCommandProxy, CrAutoImgElement, NewTabPageProxy} from 'chrome://new-tab-page/new_tab_page.js';
 import {PageCallbackRouter, PageHandlerRemote} from 'chrome://new-tab-page/new_tab_page.mojom-webui.js';
+import {assert} from 'chrome://resources/js/assert_ts.js';
 import {Command, CommandHandlerRemote} from 'chrome://resources/js/browser_command/browser_command.mojom-webui.js';
+import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
 import {assertDeepEquals, assertEquals} from 'chrome://webui-test/chai_assert.js';
 import {TestBrowserProxy} from 'chrome://webui-test/test_browser_proxy.js';
 import {eventToPromise, flushTasks} from 'chrome://webui-test/test_util.js';
@@ -64,6 +66,7 @@
             },
           },
         ],
+        id: 19030295,
       },
     }));
 
@@ -88,14 +91,16 @@
 
   function assertHasContent(
       hasContent: boolean, middleSlotPromo: MiddleSlotPromoElement) {
-    assertEquals(hasContent, !!$$(middleSlotPromo, '#container'));
+    assertEquals(hasContent, !!$$(middleSlotPromo, '#promoContainer'));
   }
 
   test(`render canShowPromo=true`, async () => {
     const canShowPromo = true;
     const middleSlotPromo = await createMiddleSlotPromo(canShowPromo);
     assertHasContent(canShowPromo, middleSlotPromo);
-    const parts = $$(middleSlotPromo, '#container')!.children;
+    const promoContainer = $$(middleSlotPromo, '#promoContainer');
+    assert(promoContainer);
+    const parts = promoContainer.children;
     assertEquals(6, parts.length);
 
     const image = parts[0] as CrAutoImgElement;
@@ -141,10 +146,10 @@
     assertHasContent(canShowPromo, middleSlotPromo);
     promoBrowserCommandHandler.setResultFor(
         'executeCommand', Promise.resolve());
-    const imageWithCommand =
-        $$(middleSlotPromo, '#container')!.children[2] as HTMLElement;
-    const command =
-        $$(middleSlotPromo, '#container')!.children[5] as HTMLElement;
+    const promoContainer = $$(middleSlotPromo, '#promoContainer');
+    assert(promoContainer);
+    const imageWithCommand = promoContainer.children[2] as HTMLElement;
+    const command = promoContainer.children[5] as HTMLElement;
 
     async function testClick(el: HTMLElement) {
       promoBrowserCommandHandler.reset();
@@ -185,4 +190,27 @@
       assertHasContent(false, middleSlotPromo);
     });
   });
+
+  suite('middle slot promo dismissal', () => {
+    suiteSetup(() => {
+      loadTimeData.overrideValues({
+        middleSlotPromoDismissalEnabled: true,
+      });
+    });
+
+    test(`clicking dismiss button dismisses promo`, async () => {
+      const canShowPromo = true;
+      const middleSlotPromo = await createMiddleSlotPromo(canShowPromo);
+      assertHasContent(canShowPromo, middleSlotPromo);
+      const promoAndDismissContainer =
+          $$(middleSlotPromo, '#promoAndDismissContainer') as HTMLElement;
+      assert(promoAndDismissContainer);
+      const parts = promoAndDismissContainer.children;
+      assertEquals(3, parts.length);
+
+      const dismissPromoButton = parts[1] as HTMLElement;
+      dismissPromoButton.click();
+      assertEquals(true, promoAndDismissContainer.hidden);
+    });
+  });
 });
diff --git a/chrome/test/data/webui/new_tab_page/test_support.ts b/chrome/test/data/webui/new_tab_page/test_support.ts
index 07bda16..3b1e542 100644
--- a/chrome/test/data/webui/new_tab_page/test_support.ts
+++ b/chrome/test/data/webui/new_tab_page/test_support.ts
@@ -122,7 +122,6 @@
     backgroundImageAttributionUrl: undefined,
     dailyRefreshCollectionId: '',
     isDark: false,
-    isDefault: true,
     logoColor: undefined,
     mostVisited: mostVisited,
     searchBox: searchBox,
diff --git a/chrome/test/data/webui/settings/chromeos/apps_page_test.js b/chrome/test/data/webui/settings/chromeos/apps_page_test.js
index 92b7097..4705a1c 100644
--- a/chrome/test/data/webui/settings/chromeos/apps_page_test.js
+++ b/chrome/test/data/webui/settings/chromeos/apps_page_test.js
@@ -4,7 +4,7 @@
 
 import 'chrome://os-settings/chromeos/os_settings.js';
 
-import {AndroidAppsBrowserProxyImpl, createBoolPermission, Router, routes, setAppNotificationProviderForTesting} from 'chrome://os-settings/chromeos/os_settings.js';
+import {AndroidAppsBrowserProxyImpl, createBoolPermission, Router, routes, RoutesConstantsMojom, setAppNotificationProviderForTesting} from 'chrome://os-settings/chromeos/os_settings.js';
 import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
 import {PromiseResolver} from 'chrome://resources/js/promise_resolver.m.js';
 import {getDeepActiveElement} from 'chrome://resources/js/util.m.js';
@@ -436,7 +436,7 @@
       // this route doesn't exist for tests. Add it in for testing.
       if (!routes.ANDROID_APPS_DETAILS) {
         routes.ANDROID_APPS_DETAILS = routes.APPS.createChild(
-            '/' + chromeos.settings.mojom.GOOGLE_PLAY_STORE_SUBPAGE_PATH);
+            '/' + RoutesConstantsMojom.GOOGLE_PLAY_STORE_SUBPAGE_PATH);
       }
 
       subpage.prefs = {arc: {enabled: {value: true}}};
diff --git a/chrome/test/data/webui/settings/chromeos/os_settings_search_box_test.js b/chrome/test/data/webui/settings/chromeos/os_settings_search_box_test.js
index b269665..6e5a8e6 100644
--- a/chrome/test/data/webui/settings/chromeos/os_settings_search_box_test.js
+++ b/chrome/test/data/webui/settings/chromeos/os_settings_search_box_test.js
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import {OpenWindowProxyImpl, PersonalizationSearchMojom, Router, routes, SearchMojom, SearchResultIconMojom, setPersonalizationSearchHandlerForTesting, setSettingsSearchHandlerForTesting, setUserActionRecorderForTesting, UserActionRecorderMojom} from 'chrome://os-settings/chromeos/os_settings.js';
+import {OpenWindowProxyImpl, PersonalizationSearchMojom, Router, routes, RoutesConstantsMojom, SearchMojom, SearchResultIconMojom, setPersonalizationSearchHandlerForTesting, setSettingsSearchHandlerForTesting, SettingConstantsMojom, setUserActionRecorderForTesting, UserActionRecorderMojom} from 'chrome://os-settings/chromeos/os_settings.js';
 import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
 import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 import {eventToPromise} from 'chrome://test/test_util.js';
@@ -137,9 +137,9 @@
           true :
           wasGeneratedFromTextMatch,
       id: {
-        section: chromeos.settings.mojom.Section.MIN_VALUE,
-        subpage: chromeos.settings.mojom.Subpage.MIN_VALUE,
-        setting: chromeos.settings.mojom.Setting.MIN_VALUE,
+        section: RoutesConstantsMojom.Section.MIN_VALUE,
+        subpage: RoutesConstantsMojom.Subpage.MIN_VALUE,
+        setting: SettingConstantsMojom.Setting.MIN_VALUE,
       },
       type: SearchMojom.SearchResultType.MIN_VALUE,
       relevanceScore: typeof relevanceScore === 'number' ?
@@ -497,7 +497,7 @@
 
         const result =
             fakeSettingsResult('Wallpaper', 'personalization?settingId=500');
-        result.id.setting = chromeos.settings.mojom.Setting.kOpenWallpaper;
+        result.id.setting = SettingConstantsMojom.Setting.kOpenWallpaper;
 
         settingsSearchHandler.setFakeResults([result]);
         await simulateSearch('fake query 2');
diff --git a/chrome/updater/app/server/win/updater_legacy_idl.template b/chrome/updater/app/server/win/updater_legacy_idl.template
index b810d57..e2140fb 100644
--- a/chrome/updater/app/server/win/updater_legacy_idl.template
+++ b/chrome/updater/app/server/win/updater_legacy_idl.template
@@ -528,6 +528,22 @@
   }
 
   [
+    uuid(6DDCE70D-A4AE-4E97-908C-BE7B2DB750AD),
+    helpstring("Policy Status for per-user applications.")
+  ]
+  coclass PolicyStatusUserClass {
+    [default] interface IUnknown;
+  }
+
+  [
+    uuid(521FDB42-7130-4806-822A-FC5163FAD983),
+    helpstring("Policy Status for system applications.")
+  ]
+  coclass PolicyStatusSystemClass {
+    [default] interface IUnknown;
+  }
+
+  [
     uuid(ABC01078-F197-4b0b-ADBC-CFE684B39C82),
     helpstring("ProcessLauncherClass Class")
   ]
diff --git a/chrome/updater/app/server/win/wrl_classes.cc b/chrome/updater/app/server/win/wrl_classes.cc
index bb7f546..f3d1cbf 100644
--- a/chrome/updater/app/server/win/wrl_classes.cc
+++ b/chrome/updater/app/server/win/wrl_classes.cc
@@ -43,6 +43,10 @@
     ProcessLauncherClass,
     Microsoft::WRL::SimpleClassFactory<LegacyProcessLauncherImpl>,
     ActiveSystem);
+CoCreatableClassWithFactoryEx(
+    PolicyStatusSystemClass,
+    Microsoft::WRL::SimpleClassFactory<PolicyStatusImpl>,
+    ActiveSystem);
 #endif  // BUILDFLAG(GOOGLE_CHROME_BRANDING)
 
 CoCreatableClassWithFactoryEx(UpdaterUserClass,
@@ -54,6 +58,10 @@
     GoogleUpdate3WebUserClass,
     Microsoft::WRL::SimpleClassFactory<LegacyOnDemandImpl>,
     ActiveUser);
+CoCreatableClassWithFactoryEx(
+    PolicyStatusUserClass,
+    Microsoft::WRL::SimpleClassFactory<PolicyStatusImpl>,
+    ActiveUser);
 #endif  // BUILDFLAG(GOOGLE_CHROME_BRANDING)
 
 CoCreatableClassWithFactoryEx(
diff --git a/chrome/updater/policy/dm_policy_manager.cc b/chrome/updater/policy/dm_policy_manager.cc
index e2cacaeb..4c6042ec 100644
--- a/chrome/updater/policy/dm_policy_manager.cc
+++ b/chrome/updater/policy/dm_policy_manager.cc
@@ -57,7 +57,7 @@
 
 DMPolicyManager::~DMPolicyManager() = default;
 
-bool DMPolicyManager::IsManaged() const {
+bool DMPolicyManager::HasActiveDevicePolicies() const {
 #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC)
   return base::IsManagedDevice();
 #else
diff --git a/chrome/updater/policy/dm_policy_manager.h b/chrome/updater/policy/dm_policy_manager.h
index f369b44..a7f805f3 100644
--- a/chrome/updater/policy/dm_policy_manager.h
+++ b/chrome/updater/policy/dm_policy_manager.h
@@ -27,7 +27,7 @@
   // Overrides for PolicyManagerInterface.
   std::string source() const override;
 
-  bool IsManaged() const override;
+  bool HasActiveDevicePolicies() const override;
 
   bool GetLastCheckPeriodMinutes(int* minutes) const override;
   bool GetUpdatesSuppressedTimes(
diff --git a/chrome/updater/policy/dm_policy_manager_unittest.cc b/chrome/updater/policy/dm_policy_manager_unittest.cc
index 8d77d3d..59e2c2e4 100644
--- a/chrome/updater/policy/dm_policy_manager_unittest.cc
+++ b/chrome/updater/policy/dm_policy_manager_unittest.cc
@@ -109,7 +109,7 @@
   auto policy_manager(std::make_unique<DMPolicyManager>(omaha_settings));
 
 #if !BUILDFLAG(IS_LINUX)
-  EXPECT_EQ(policy_manager->IsManaged(), base::IsManagedDevice());
+  EXPECT_EQ(policy_manager->HasActiveDevicePolicies(), base::IsManagedDevice());
 #endif  // BUILDFLAG(IS_LINUX)
   EXPECT_EQ(policy_manager->source(), "DeviceManagement");
 
@@ -185,7 +185,7 @@
   auto policy_manager(std::make_unique<DMPolicyManager>(omaha_settings));
 
 #if !BUILDFLAG(IS_LINUX)
-  EXPECT_EQ(policy_manager->IsManaged(), base::IsManagedDevice());
+  EXPECT_EQ(policy_manager->HasActiveDevicePolicies(), base::IsManagedDevice());
 #endif  // BUILDFLAG(IS_LINUX)
   EXPECT_EQ(policy_manager->source(), "DeviceManagement");
 
@@ -276,7 +276,7 @@
 
   auto policy_manager(std::make_unique<DMPolicyManager>(omaha_settings));
 
-  EXPECT_EQ(policy_manager->IsManaged(), base::IsManagedDevice());
+  EXPECT_EQ(policy_manager->HasActiveDevicePolicies(), base::IsManagedDevice());
   EXPECT_EQ(policy_manager->source(), "DeviceManagement");
 
   int last_check_period_minutes = 0;
diff --git a/chrome/updater/policy/mac/managed_preference_policy_manager.mm b/chrome/updater/policy/mac/managed_preference_policy_manager.mm
index 1e71181b..c6a87d38 100644
--- a/chrome/updater/policy/mac/managed_preference_policy_manager.mm
+++ b/chrome/updater/policy/mac/managed_preference_policy_manager.mm
@@ -29,7 +29,7 @@
   // Overrides for PolicyManagerInterface.
   std::string source() const override;
 
-  bool IsManaged() const override;
+  bool HasActiveDevicePolicies() const override;
 
   bool GetLastCheckPeriodMinutes(int* minutes) const override;
   bool GetUpdatesSuppressedTimes(
@@ -65,7 +65,7 @@
 
 ManagedPreferencePolicyManager::~ManagedPreferencePolicyManager() = default;
 
-bool ManagedPreferencePolicyManager::IsManaged() const {
+bool ManagedPreferencePolicyManager::HasActiveDevicePolicies() const {
   return [impl_ managed];
 }
 
diff --git a/chrome/updater/policy/manager.cc b/chrome/updater/policy/manager.cc
index d3b3c5a2..1cce86c 100644
--- a/chrome/updater/policy/manager.cc
+++ b/chrome/updater/policy/manager.cc
@@ -58,7 +58,7 @@
 
   std::string source() const override;
 
-  bool IsManaged() const override;
+  bool HasActiveDevicePolicies() const override;
 
   bool GetLastCheckPeriodMinutes(int* minutes) const override;
   bool GetUpdatesSuppressedTimes(
@@ -88,7 +88,7 @@
 
 DefaultValuesPolicyManager::~DefaultValuesPolicyManager() = default;
 
-bool DefaultValuesPolicyManager::IsManaged() const {
+bool DefaultValuesPolicyManager::HasActiveDevicePolicies() const {
   return true;
 }
 
diff --git a/chrome/updater/policy/manager.h b/chrome/updater/policy/manager.h
index 31da27e..96b8eed1 100644
--- a/chrome/updater/policy/manager.h
+++ b/chrome/updater/policy/manager.h
@@ -50,7 +50,7 @@
   // its policies are operational. For instance, the Device Management Policy
   // Manager will return |true| for this method if the machine is joined to
   // a DM server.
-  virtual bool IsManaged() const = 0;
+  virtual bool HasActiveDevicePolicies() const = 0;
 
   // Returns the policy for how often the Updater should check for updates.
   // Returns the time interval between update checks in minutes.
diff --git a/chrome/updater/policy/manager_unittest.cc b/chrome/updater/policy/manager_unittest.cc
index 0eea504c..a84e021 100644
--- a/chrome/updater/policy/manager_unittest.cc
+++ b/chrome/updater/policy/manager_unittest.cc
@@ -10,7 +10,7 @@
 TEST(PolicyManager, GetDefaultValuesPolicyManager) {
   std::unique_ptr<PolicyManagerInterface> policy_manager(
       GetDefaultValuesPolicyManager());
-  ASSERT_TRUE(policy_manager->IsManaged());
+  ASSERT_TRUE(policy_manager->HasActiveDevicePolicies());
 }
 
 TEST(PolicyManager, UpdateSuppressedTimes) {
diff --git a/chrome/updater/policy/policy_manager.cc b/chrome/updater/policy/policy_manager.cc
index a2ded76..3bdc30de 100644
--- a/chrome/updater/policy/policy_manager.cc
+++ b/chrome/updater/policy/policy_manager.cc
@@ -56,7 +56,7 @@
 
 PolicyManager::~PolicyManager() = default;
 
-bool PolicyManager::IsManaged() const {
+bool PolicyManager::HasActiveDevicePolicies() const {
   return !policies_.empty();
 }
 
diff --git a/chrome/updater/policy/policy_manager.h b/chrome/updater/policy/policy_manager.h
index 9c52be8..3ed0682a 100644
--- a/chrome/updater/policy/policy_manager.h
+++ b/chrome/updater/policy/policy_manager.h
@@ -27,7 +27,7 @@
   // Overrides for PolicyManagerInterface.
   std::string source() const override;
 
-  bool IsManaged() const override;
+  bool HasActiveDevicePolicies() const override;
 
   bool GetLastCheckPeriodMinutes(int* minutes) const override;
   bool GetUpdatesSuppressedTimes(
diff --git a/chrome/updater/policy/policy_manager_unittest.cc b/chrome/updater/policy/policy_manager_unittest.cc
index 272138fe..04561918 100644
--- a/chrome/updater/policy/policy_manager_unittest.cc
+++ b/chrome/updater/policy/policy_manager_unittest.cc
@@ -20,7 +20,7 @@
 
 TEST_F(PolicyManagerTests, NoPolicySet) {
   auto policy_manager = std::make_unique<PolicyManager>(base::Value::Dict());
-  EXPECT_FALSE(policy_manager->IsManaged());
+  EXPECT_FALSE(policy_manager->HasActiveDevicePolicies());
 
   EXPECT_EQ(policy_manager->source(), "DictValuePolicy");
 
@@ -104,7 +104,7 @@
 
   auto policy_manager = std::make_unique<PolicyManager>(std::move(policies));
 
-  EXPECT_TRUE(policy_manager->IsManaged());
+  EXPECT_TRUE(policy_manager->HasActiveDevicePolicies());
 
   int check_period = 0;
   EXPECT_TRUE(policy_manager->GetLastCheckPeriodMinutes(&check_period));
@@ -204,7 +204,7 @@
 
   auto policy_manager = std::make_unique<PolicyManager>(std::move(policies));
 
-  EXPECT_TRUE(policy_manager->IsManaged());
+  EXPECT_TRUE(policy_manager->HasActiveDevicePolicies());
 
   int check_period = 0;
   EXPECT_FALSE(policy_manager->GetLastCheckPeriodMinutes(&check_period));
diff --git a/chrome/updater/policy/service.cc b/chrome/updater/policy/service.cc
index 1b938f46..41d38c6 100644
--- a/chrome/updater/policy/service.cc
+++ b/chrome/updater/policy/service.cc
@@ -32,7 +32,8 @@
             managers.begin(), managers.end(),
             [](const std::unique_ptr<PolicyManagerInterface>& lhs,
                const std::unique_ptr<PolicyManagerInterface>& rhs) {
-              return lhs->IsManaged() && !rhs->IsManaged();
+              return lhs->HasActiveDevicePolicies() &&
+                     !rhs->HasActiveDevicePolicies();
             });
         return managers;
       }(std::move(managers))) {}
@@ -46,7 +47,7 @@
   std::vector<std::string> sources;
   for (const std::unique_ptr<PolicyManagerInterface>& policy_manager :
        policy_managers_) {
-    if (policy_manager->IsManaged())
+    if (policy_manager->HasActiveDevicePolicies())
       sources.push_back(policy_manager->source());
   }
   return base::JoinString(sources, ";");
@@ -173,7 +174,7 @@
        policy_managers_) {
     if (!policy_query_callback.Run(policy_manager.get(), &value))
       continue;
-    status.AddPolicyIfNeeded(policy_manager->IsManaged(),
+    status.AddPolicyIfNeeded(policy_manager->HasActiveDevicePolicies(),
                              policy_manager->source(), value);
   }
   if (!status.effective_policy())
@@ -200,7 +201,7 @@
        policy_managers_) {
     if (!policy_query_callback.Run(policy_manager.get(), app_id, &value))
       continue;
-    status.AddPolicyIfNeeded(policy_manager->IsManaged(),
+    status.AddPolicyIfNeeded(policy_manager->HasActiveDevicePolicies(),
                              policy_manager->source(), value);
   }
   if (!status.effective_policy())
diff --git a/chrome/updater/policy/service_unittest.cc b/chrome/updater/policy/service_unittest.cc
index 681283d..3613b849 100644
--- a/chrome/updater/policy/service_unittest.cc
+++ b/chrome/updater/policy/service_unittest.cc
@@ -18,12 +18,15 @@
 // Policy and Device Management.
 class FakePolicyManager : public PolicyManagerInterface {
  public:
-  FakePolicyManager(bool is_managed, const std::string& source)
-      : is_managed_(is_managed), source_(source) {}
+  FakePolicyManager(bool has_active_device_policies, const std::string& source)
+      : has_active_device_policies_(has_active_device_policies),
+        source_(source) {}
   ~FakePolicyManager() override = default;
 
   std::string source() const override { return source_; }
-  bool IsManaged() const override { return is_managed_; }
+  bool HasActiveDevicePolicies() const override {
+    return has_active_device_policies_;
+  }
   bool GetLastCheckPeriodMinutes(int* minutes) const override { return false; }
   bool GetUpdatesSuppressedTimes(
       UpdatesSuppressedTimes* suppressed_times) const override {
@@ -98,7 +101,7 @@
   }
 
  private:
-  bool is_managed_;
+  bool has_active_device_policies_;
   std::string source_;
   UpdatesSuppressedTimes suppressed_times_;
   std::string download_preference_;
diff --git a/chrome/updater/policy/win/group_policy_manager.cc b/chrome/updater/policy/win/group_policy_manager.cc
index 7d3f2dd..2bb2529f 100644
--- a/chrome/updater/policy/win/group_policy_manager.cc
+++ b/chrome/updater/policy/win/group_policy_manager.cc
@@ -77,8 +77,8 @@
 
 GroupPolicyManager::~GroupPolicyManager() = default;
 
-bool GroupPolicyManager::IsManaged() const {
-  return PolicyManager::IsManaged() && base::IsManagedDevice();
+bool GroupPolicyManager::HasActiveDevicePolicies() const {
+  return PolicyManager::HasActiveDevicePolicies() && base::IsManagedDevice();
 }
 
 std::string GroupPolicyManager::source() const {
diff --git a/chrome/updater/policy/win/group_policy_manager.h b/chrome/updater/policy/win/group_policy_manager.h
index a4d51aaa..2aebf80 100644
--- a/chrome/updater/policy/win/group_policy_manager.h
+++ b/chrome/updater/policy/win/group_policy_manager.h
@@ -21,7 +21,7 @@
 
   // Overrides for PolicyManagerInterface.
   std::string source() const override;
-  bool IsManaged() const override;
+  bool HasActiveDevicePolicies() const override;
 };
 
 }  // namespace updater
diff --git a/chrome/updater/policy/win/group_policy_manager_unittest.cc b/chrome/updater/policy/win/group_policy_manager_unittest.cc
index 0191681..40dc6ad 100644
--- a/chrome/updater/policy/win/group_policy_manager_unittest.cc
+++ b/chrome/updater/policy/win/group_policy_manager_unittest.cc
@@ -49,7 +49,7 @@
 TEST_F(GroupPolicyManagerTests, NoPolicySet) {
   std::unique_ptr<PolicyManagerInterface> policy_manager =
       std::make_unique<GroupPolicyManager>();
-  EXPECT_FALSE(policy_manager->IsManaged());
+  EXPECT_FALSE(policy_manager->HasActiveDevicePolicies());
 
   EXPECT_EQ(policy_manager->source(), "GroupPolicy");
 
@@ -143,7 +143,8 @@
 
   std::unique_ptr<PolicyManagerInterface> policy_manager =
       std::make_unique<GroupPolicyManager>();
-  EXPECT_EQ(policy_manager->IsManaged(), base::win::IsEnrolledToDomain());
+  EXPECT_EQ(policy_manager->HasActiveDevicePolicies(),
+            base::win::IsEnrolledToDomain());
 
   int check_period = 0;
   EXPECT_TRUE(policy_manager->GetLastCheckPeriodMinutes(&check_period));
diff --git a/chrome/updater/test/integration_tests_win.cc b/chrome/updater/test/integration_tests_win.cc
index 2cd688c..49e3b14 100644
--- a/chrome/updater/test/integration_tests_win.cc
+++ b/chrome/updater/test/integration_tests_win.cc
@@ -667,6 +667,18 @@
     Microsoft::WRL::ComPtr<IDispatch> dispatch;
     EXPECT_HRESULT_SUCCEEDED(google_update->createAppBundleWeb(&dispatch));
     EXPECT_HRESULT_SUCCEEDED(dispatch.As(&app_bundle));
+
+    Microsoft::WRL::ComPtr<IUnknown> policy_status_server;
+    EXPECT_HRESULT_SUCCEEDED(::CoCreateInstance(
+        scope == UpdaterScope::kSystem ? __uuidof(PolicyStatusSystemClass)
+                                       : __uuidof(PolicyStatusUserClass),
+        nullptr, CLSCTX_LOCAL_SERVER, IID_PPV_ARGS(&policy_status_server)));
+    Microsoft::WRL::ComPtr<IPolicyStatus2> policy_status2;
+    EXPECT_HRESULT_SUCCEEDED(policy_status_server.As(&policy_status2));
+    base::win::ScopedBstr updater_version;
+    EXPECT_HRESULT_SUCCEEDED(
+        policy_status2->get_updaterVersion(updater_version.Receive()));
+    EXPECT_STREQ(updater_version.Get(), kUpdaterVersionUtf16);
 #endif  // BUILDFLAG(GOOGLE_CHROME_BRANDING)
   }
 
diff --git a/chrome/updater/win/setup/setup_util.cc b/chrome/updater/win/setup/setup_util.cc
index 7cf5b57..5f3c375 100644
--- a/chrome/updater/win/setup/setup_util.cc
+++ b/chrome/updater/win/setup/setup_util.cc
@@ -144,7 +144,8 @@
         __uuidof(UpdaterUserClass),
 
 #if BUILDFLAG(GOOGLE_CHROME_BRANDING)
-            __uuidof(GoogleUpdate3WebUserClass)
+            __uuidof(GoogleUpdate3WebUserClass),
+            __uuidof(PolicyStatusUserClass),
 #endif  // BUILDFLAG(GOOGLE_CHROME_BRANDING)
       };
     case UpdaterScope::kSystem:
@@ -153,7 +154,7 @@
 
 #if BUILDFLAG(GOOGLE_CHROME_BRANDING)
             __uuidof(GoogleUpdate3WebSystemClass),
-            __uuidof(ProcessLauncherClass)
+            __uuidof(PolicyStatusSystemClass), __uuidof(ProcessLauncherClass),
 #endif  // BUILDFLAG(GOOGLE_CHROME_BRANDING)
       };
   }
diff --git a/chromecast/crash/linux/crash_testing_utils.cc b/chromecast/crash/linux/crash_testing_utils.cc
index bd822216..03901ec 100644
--- a/chromecast/crash/linux/crash_testing_utils.cc
+++ b/chromecast/crash/linux/crash_testing_utils.cc
@@ -31,26 +31,25 @@
 const char kRatelimitPeriodStartKey[] = "period_start";
 const char kRatelimitPeriodDumpsKey[] = "period_dumps";
 
-std::unique_ptr<base::ListValue> ParseLockFile(const std::string& path) {
+absl::optional<base::Value::List> ParseLockFile(const std::string& path) {
   std::string lockfile_string;
   RCHECK(base::ReadFileToString(base::FilePath(path), &lockfile_string),
-         nullptr,
-         "Failed to read file");
+         absl::nullopt, "Failed to read file");
 
   std::vector<std::string> lines = base::SplitString(
       lockfile_string, "\n", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
 
-  std::unique_ptr<base::ListValue> dumps = std::make_unique<base::ListValue>();
+  base::Value::List dumps;
 
   // Validate dumps
   for (const std::string& line : lines) {
     if (line.size() == 0)
       continue;
     absl::optional<base::Value> dump_info = base::JSONReader::Read(line);
-    RCHECK(dump_info.has_value(), nullptr, "Invalid DumpInfo");
+    RCHECK(dump_info.has_value(), absl::nullopt, "Invalid DumpInfo");
     DumpInfo info(&dump_info.value());
-    RCHECK(info.valid(), nullptr, "Invalid DumpInfo");
-    dumps->GetList().Append(std::move(dump_info.value()));
+    RCHECK(info.valid(), absl::nullopt, "Invalid DumpInfo");
+    dumps.Append(std::move(dump_info.value()));
   }
 
   return dumps;
@@ -67,11 +66,10 @@
   return value;
 }
 
-int WriteLockFile(const std::string& path, base::ListValue* contents) {
-  DCHECK(contents);
+int WriteLockFile(const std::string& path, const base::Value::List& contents) {
   std::string lockfile;
 
-  for (const auto& elem : contents->GetListDeprecated()) {
+  for (const auto& elem : contents) {
     std::string dump_info;
     bool ret = base::JSONWriter::Write(elem, &dump_info);
     RCHECK(ret, -1, "Failed to serialize DumpInfo");
@@ -84,11 +82,11 @@
              : -1;
 }
 
-bool WriteMetadataFile(const std::string& path, const base::Value* metadata) {
-  DCHECK(metadata);
+bool WriteMetadataFile(const std::string& path,
+                       const base::Value::Dict& metadata) {
   base::FilePath file_path(path);
   JSONFileValueSerializer serializer(file_path);
-  return serializer.Serialize(*metadata);
+  return serializer.Serialize(metadata);
 }
 
 }  // namespace
@@ -102,12 +100,12 @@
 bool FetchDumps(const std::string& lockfile_path,
                 std::vector<std::unique_ptr<DumpInfo>>* dumps) {
   DCHECK(dumps);
-  std::unique_ptr<base::ListValue> dump_list = ParseLockFile(lockfile_path);
+  absl::optional<base::Value::List> dump_list = ParseLockFile(lockfile_path);
   RCHECK(dump_list, false, "Failed to parse lockfile");
 
   dumps->clear();
 
-  for (const auto& elem : dump_list->GetListDeprecated()) {
+  for (const auto& elem : *dump_list) {
     std::unique_ptr<DumpInfo> dump(new DumpInfo(&elem));
     RCHECK(dump->valid(), false, "Invalid DumpInfo");
     dumps->push_back(std::move(dump));
@@ -117,31 +115,29 @@
 }
 
 bool ClearDumps(const std::string& lockfile_path) {
-  std::unique_ptr<base::ListValue> dump_list =
-      std::make_unique<base::ListValue>();
-  return WriteLockFile(lockfile_path, dump_list.get()) == 0;
+  base::Value::List dump_list;
+  return WriteLockFile(lockfile_path, dump_list) == 0;
 }
 
 bool CreateFiles(const std::string& lockfile_path,
                  const std::string& metadata_path) {
-  std::unique_ptr<base::DictionaryValue> metadata =
-      std::make_unique<base::DictionaryValue>();
+  base::Value::Dict metadata;
 
-  auto ratelimit_fields = std::make_unique<base::DictionaryValue>();
-  ratelimit_fields->SetDoubleKey(kRatelimitPeriodStartKey, 0.0);
-  ratelimit_fields->SetInteger(kRatelimitPeriodDumpsKey, 0);
-  metadata->Set(kRatelimitKey, std::move(ratelimit_fields));
+  base::Value::Dict ratelimit_fields;
+  ratelimit_fields.Set(kRatelimitPeriodStartKey, 0.0);
+  ratelimit_fields.Set(kRatelimitPeriodDumpsKey, 0);
+  metadata.Set(kRatelimitKey, std::move(ratelimit_fields));
 
-  std::unique_ptr<base::ListValue> dumps = std::make_unique<base::ListValue>();
+  base::Value::List dumps;
 
-  return WriteLockFile(lockfile_path, dumps.get()) == 0 &&
-         WriteMetadataFile(metadata_path, metadata.get());
+  return WriteLockFile(lockfile_path, dumps) == 0 &&
+         WriteMetadataFile(metadata_path, metadata);
 }
 
 bool AppendLockFile(const std::string& lockfile_path,
                     const std::string& metadata_path,
                     const DumpInfo& dump) {
-  std::unique_ptr<base::ListValue> contents = ParseLockFile(lockfile_path);
+  absl::optional<base::Value::List> contents = ParseLockFile(lockfile_path);
   if (!contents) {
     CreateFiles(lockfile_path, metadata_path);
     if (!(contents = ParseLockFile(lockfile_path))) {
@@ -149,25 +145,24 @@
     }
   }
 
-  contents->GetList().Append(
-      base::Value::FromUniquePtrValue(dump.GetAsValue()));
+  contents->Append(dump.GetAsValue());
 
-  return WriteLockFile(lockfile_path, contents.get()) == 0;
+  return WriteLockFile(lockfile_path, *contents) == 0;
 }
 
 bool SetRatelimitPeriodStart(const std::string& metadata_path,
                              const base::Time& start) {
   std::unique_ptr<base::Value> contents = ParseMetadataFile(metadata_path);
-
-  base::DictionaryValue* dict;
-  base::DictionaryValue* ratelimit_params;
-  if (!contents || !contents->GetAsDictionary(&dict) ||
-      !dict->GetDictionary(kRatelimitKey, &ratelimit_params)) {
+  if (!contents || !contents->is_dict())
     return false;
-  }
 
-  ratelimit_params->SetDoubleKey(kRatelimitPeriodStartKey, start.ToDoubleT());
-  return WriteMetadataFile(metadata_path, contents.get()) == 0;
+  base::Value::Dict* ratelimit_params =
+      contents->GetDict().FindDict(kRatelimitKey);
+  if (!ratelimit_params)
+    return false;
+
+  ratelimit_params->Set(kRatelimitPeriodStartKey, start.ToDoubleT());
+  return WriteMetadataFile(metadata_path, contents->GetDict()) == 0;
 }
 
 }  // namespace chromecast
diff --git a/chromecast/crash/linux/dump_info.cc b/chromecast/crash/linux/dump_info.cc
index d946026..77b36a8 100644
--- a/chromecast/crash/linux/dump_info.cc
+++ b/chromecast/crash/linux/dump_info.cc
@@ -60,43 +60,40 @@
 
 DumpInfo::~DumpInfo() {}
 
-std::unique_ptr<base::Value> DumpInfo::GetAsValue() const {
-  std::unique_ptr<base::Value> result =
-      std::make_unique<base::DictionaryValue>();
-  base::DictionaryValue* entry;
-  result->GetAsDictionary(&entry);
+base::Value DumpInfo::GetAsValue() const {
+  base::Value::Dict result;
 
   base::Time::Exploded ex;
   dump_time_.LocalExplode(&ex);
   std::string dump_time =
       base::StringPrintf(kDumpTimeFormat, ex.year, ex.month, ex.day_of_month,
                          ex.hour, ex.minute, ex.second);
-  entry->SetString(kDumpTimeKey, dump_time);
+  result.Set(kDumpTimeKey, dump_time);
 
-  entry->SetString(kDumpKey, crashed_process_dump_);
+  result.Set(kDumpKey, crashed_process_dump_);
   std::string uptime = std::to_string(params_.process_uptime);
-  entry->SetString(kUptimeKey, uptime);
-  entry->SetString(kLogfileKey, logfile_);
+  result.Set(kUptimeKey, uptime);
+  result.Set(kLogfileKey, logfile_);
 
-  std::unique_ptr<base::ListValue> attachments_list(new base::ListValue());
+  base::Value::List attachments_list;
   for (const auto& attachment : attachments_) {
-    attachments_list->Append(attachment);
+    attachments_list.Append(attachment);
   }
-  entry->SetList(kAttachmentsKey, std::move(attachments_list));
-  entry->SetString(kSuffixKey, params_.suffix);
-  entry->SetString(kPrevAppNameKey, params_.previous_app_name);
-  entry->SetString(kCurAppNameKey, params_.current_app_name);
-  entry->SetString(kLastAppNameKey, params_.last_app_name);
-  entry->SetString(kReleaseVersionKey, params_.cast_release_version);
-  entry->SetString(kBuildNumberKey, params_.cast_build_number);
-  entry->SetString(kReasonKey, params_.reason);
-  entry->SetString(kStadiaSessionIdKey, params_.stadia_session_id);
-  entry->SetString(kExecNameKey, params_.exec_name);
-  entry->SetString(kSignatureKey, params_.signature);
-  entry->SetString(kExtraInfoKey, params_.extra_info);
-  entry->SetString(kCrashProductNameKey, params_.crash_product_name);
+  result.Set(kAttachmentsKey, std::move(attachments_list));
+  result.Set(kSuffixKey, params_.suffix);
+  result.Set(kPrevAppNameKey, params_.previous_app_name);
+  result.Set(kCurAppNameKey, params_.current_app_name);
+  result.Set(kLastAppNameKey, params_.last_app_name);
+  result.Set(kReleaseVersionKey, params_.cast_release_version);
+  result.Set(kBuildNumberKey, params_.cast_build_number);
+  result.Set(kReasonKey, params_.reason);
+  result.Set(kStadiaSessionIdKey, params_.stadia_session_id);
+  result.Set(kExecNameKey, params_.exec_name);
+  result.Set(kSignatureKey, params_.signature);
+  result.Set(kExtraInfoKey, params_.extra_info);
+  result.Set(kCrashProductNameKey, params_.crash_product_name);
 
-  return result;
+  return base::Value(std::move(result));
 }
 
 bool DumpInfo::ParseEntry(const base::Value* entry) {
@@ -135,7 +132,7 @@
   const base::ListValue* attachments_list;
   if (dict->GetList(kAttachmentsKey, &attachments_list)) {
     ++num_params;
-    for (const auto& attachment : attachments_list->GetListDeprecated()) {
+    for (const auto& attachment : attachments_list->GetList()) {
       attachments_.push_back(attachment.GetString());
     }
   }
diff --git a/chromecast/crash/linux/dump_info.h b/chromecast/crash/linux/dump_info.h
index 076c132..8ce74523 100644
--- a/chromecast/crash/linux/dump_info.h
+++ b/chromecast/crash/linux/dump_info.h
@@ -68,7 +68,7 @@
   //   "build_number": <build_number>
   //   "reason": <reason>
   // }
-  std::unique_ptr<base::Value> GetAsValue() const;
+  base::Value GetAsValue() const;
   const MinidumpParams& params() const { return params_; }
   bool valid() const { return valid_; }
 
diff --git a/chromecast/crash/linux/synchronized_minidump_manager.cc b/chromecast/crash/linux/synchronized_minidump_manager.cc
index b0b1056c..ab94d72 100644
--- a/chromecast/crash/linux/synchronized_minidump_manager.cc
+++ b/chromecast/crash/linux/synchronized_minidump_manager.cc
@@ -27,6 +27,7 @@
 #include "base/strings/string_split.h"
 #include "chromecast/base/path_utils.h"
 #include "chromecast/crash/linux/dump_info.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
 
 // if |cond| is false, returns |retval|.
 #define RCHECK(cond, retval) \
@@ -64,25 +65,22 @@
 
 // Gets the ratelimit parameter dictionary given a deserialized |metadata|.
 // Returns nullptr if invalid.
-base::DictionaryValue* GetRatelimitParams(base::Value* metadata) {
-  base::DictionaryValue* dict;
-  base::DictionaryValue* ratelimit_params;
-  if (!metadata || !metadata->GetAsDictionary(&dict) ||
-      !dict->GetDictionary(kLockfileRatelimitKey, &ratelimit_params)) {
+base::Value::Dict* GetRatelimitParams(
+    absl::optional<base::Value::Dict>& metadata) {
+  if (!metadata)
     return nullptr;
-  }
-
-  return ratelimit_params;
+  return metadata->FindDict(kLockfileRatelimitKey);
 }
 
 // Returns the time of the current ratelimit period's start in |metadata|.
 // Returns base::Time() if an error occurs.
-base::Time GetRatelimitPeriodStart(base::Value* metadata) {
-  base::DictionaryValue* ratelimit_params = GetRatelimitParams(metadata);
+base::Time GetRatelimitPeriodStart(
+    absl::optional<base::Value::Dict>& metadata) {
+  base::Value::Dict* ratelimit_params = GetRatelimitParams(metadata);
   RCHECK(ratelimit_params, base::Time());
 
   absl::optional<double> seconds =
-      ratelimit_params->FindDoubleKey(kLockfileRatelimitPeriodStartKey);
+      ratelimit_params->FindDouble(kLockfileRatelimitPeriodStartKey);
   RCHECK(seconds, base::Time());
 
   // Return value of 0 indicates "not initialized", so we need to explicitly
@@ -92,54 +90,52 @@
 
 // Sets the time of the current ratelimit period's start in |metadata| to
 // |period_start|. Returns true on success, false on error.
-bool SetRatelimitPeriodStart(base::Value* metadata, base::Time period_start) {
+bool SetRatelimitPeriodStart(absl::optional<base::Value::Dict>& metadata,
+                             base::Time period_start) {
   DCHECK(!period_start.is_null());
 
-  base::DictionaryValue* ratelimit_params = GetRatelimitParams(metadata);
+  base::Value::Dict* ratelimit_params = GetRatelimitParams(metadata);
   RCHECK(ratelimit_params, false);
 
-  ratelimit_params->SetDoubleKey(kLockfileRatelimitPeriodStartKey,
-                                 period_start.ToDoubleT());
+  ratelimit_params->Set(kLockfileRatelimitPeriodStartKey,
+                        period_start.ToDoubleT());
   return true;
 }
 
 // Gets the number of dumps added to |metadata| in the current ratelimit
 // period. Returns < 0 on error.
-int GetRatelimitPeriodDumps(base::Value* metadata) {
-  int period_dumps = -1;
-
-  base::DictionaryValue* ratelimit_params = GetRatelimitParams(metadata);
-  if (!ratelimit_params ||
-      !ratelimit_params->GetInteger(kLockfileRatelimitPeriodDumpsKey,
-                                    &period_dumps)) {
+int GetRatelimitPeriodDumps(absl::optional<base::Value::Dict>& metadata) {
+  base::Value::Dict* ratelimit_params = GetRatelimitParams(metadata);
+  if (!ratelimit_params)
     return -1;
-  }
-
-  return period_dumps;
+  absl::optional<int> period_dumps =
+      ratelimit_params->FindInt(kLockfileRatelimitPeriodDumpsKey);
+  return period_dumps.value_or(-1);
 }
 
 // Sets the current ratelimit period's number of dumps in |metadata| to
 // |period_dumps|. Returns true on success, false on error.
-bool SetRatelimitPeriodDumps(base::Value* metadata, int period_dumps) {
+bool SetRatelimitPeriodDumps(absl::optional<base::Value::Dict>& metadata,
+                             int period_dumps) {
   DCHECK_GE(period_dumps, 0);
 
-  base::DictionaryValue* ratelimit_params = GetRatelimitParams(metadata);
+  base::Value::Dict* ratelimit_params = GetRatelimitParams(metadata);
   RCHECK(ratelimit_params, false);
 
-  ratelimit_params->SetInteger(kLockfileRatelimitPeriodDumpsKey, period_dumps);
+  ratelimit_params->Set(kLockfileRatelimitPeriodDumpsKey, period_dumps);
 
   return true;
 }
 
 // Returns true if |metadata| contains valid metadata, false otherwise.
-bool ValidateMetadata(base::Value* metadata) {
+bool ValidateMetadata(absl::optional<base::Value::Dict>& metadata) {
   RCHECK(metadata, false);
 
   // Validate ratelimit params
-  base::DictionaryValue* ratelimit_params = GetRatelimitParams(metadata);
+  base::Value::Dict* ratelimit_params = GetRatelimitParams(metadata);
 
   return ratelimit_params &&
-         ratelimit_params->DictSize() == kLockfileNumRatelimitParams &&
+         ratelimit_params->size() == kLockfileNumRatelimitParams &&
          !GetRatelimitPeriodStart(metadata).is_null() &&
          GetRatelimitPeriodDumps(metadata) >= 0;
 }
@@ -293,7 +289,7 @@
   std::vector<std::string> lines = base::SplitString(
       lockfile, "\n", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
 
-  std::unique_ptr<base::ListValue> dumps = std::make_unique<base::ListValue>();
+  base::Value::List dumps;
 
   // Validate dumps
   for (const std::string& line : lines) {
@@ -303,30 +299,33 @@
     RCHECK(dump_info.has_value(), false);
     DumpInfo info(&dump_info.value());
     RCHECK(info.valid(), false);
-    dumps->GetList().Append(std::move(dump_info.value()));
+    dumps.Append(std::move(dump_info.value()));
   }
 
   JSONFileValueDeserializer deserializer(metadata_path_);
   int error_code = -1;
   std::string error_msg;
-  std::unique_ptr<base::Value> metadata =
+  std::unique_ptr<base::Value> metadata_ptr =
       deserializer.Deserialize(&error_code, &error_msg);
-  DLOG_IF(ERROR, !metadata) << "JSON error " << error_code << ":" << error_msg;
-  RCHECK(metadata, false);
-  RCHECK(ValidateMetadata(metadata.get()), false);
+  DLOG_IF(ERROR, !metadata_ptr)
+      << "JSON error " << error_code << ":" << error_msg;
+  RCHECK(metadata_ptr, false);
+  RCHECK(metadata_ptr->is_dict(), false);
+  absl::optional<base::Value::Dict> metadata =
+      std::move(metadata_ptr->GetDict());
+  RCHECK(ValidateMetadata(metadata), false);
 
   dumps_ = std::move(dumps);
   metadata_ = std::move(metadata);
   return true;
 }
 
-bool SynchronizedMinidumpManager::WriteFiles(const base::ListValue* dumps,
-                                             const base::Value* metadata) {
-  DCHECK(dumps);
-  DCHECK(metadata);
+bool SynchronizedMinidumpManager::WriteFiles(
+    const base::Value::List& dumps,
+    const base::Value::Dict& metadata) {
   std::string lockfile;
 
-  for (const auto& elem : dumps->GetListDeprecated()) {
+  for (const auto& elem : dumps) {
     std::string dump_info;
     bool ret = base::JSONWriter::Write(elem, &dump_info);
     RCHECK(ret, false);
@@ -339,21 +338,20 @@
   }
 
   JSONFileValueSerializer serializer(metadata_path_);
-  return serializer.Serialize(*metadata);
+  return serializer.Serialize(metadata);
 }
 
 bool SynchronizedMinidumpManager::InitializeFiles() {
-  std::unique_ptr<base::DictionaryValue> metadata =
-      std::make_unique<base::DictionaryValue>();
+  base::Value::Dict metadata;
 
-  auto ratelimit_fields = std::make_unique<base::DictionaryValue>();
-  ratelimit_fields->SetDoubleKey(kLockfileRatelimitPeriodStartKey, 0.0);
-  ratelimit_fields->SetInteger(kLockfileRatelimitPeriodDumpsKey, 0);
-  metadata->Set(kLockfileRatelimitKey, std::move(ratelimit_fields));
+  base::Value::Dict ratelimit_fields;
+  ratelimit_fields.Set(kLockfileRatelimitPeriodStartKey, 0.0);
+  ratelimit_fields.Set(kLockfileRatelimitPeriodDumpsKey, 0);
+  metadata.Set(kLockfileRatelimitKey, std::move(ratelimit_fields));
 
-  std::unique_ptr<base::ListValue> dumps = std::make_unique<base::ListValue>();
+  base::Value::List dumps;
 
-  return WriteFiles(dumps.get(), metadata.get());
+  return WriteFiles(dumps, metadata);
 }
 
 bool SynchronizedMinidumpManager::AddEntryToLockFile(
@@ -367,16 +365,15 @@
     return false;
   }
 
-  dumps_->GetList().Append(
-      base::Value::FromUniquePtrValue(dump_info.GetAsValue()));
+  dumps_->Append(dump_info.GetAsValue());
   return true;
 }
 
 bool SynchronizedMinidumpManager::RemoveEntryFromLockFile(int index) {
-  base::Value::ListView dumps_view = dumps_->GetListDeprecated();
-  if (index < 0 || static_cast<size_t>(index) >= dumps_view.size())
+  if (index < 0 || static_cast<size_t>(index) >= dumps_->size())
     return false;
-  return dumps_->EraseListIter(dumps_view.begin() + index);
+  dumps_->erase(dumps_->begin() + index);
+  return true;
 }
 
 void SynchronizedMinidumpManager::ReleaseLockFile() {
@@ -384,7 +381,7 @@
   // all fd's will release the lock. To be safe, we explicitly unlock.
   if (lockfile_fd_ >= 0) {
     if (dumps_ && metadata_)
-      WriteFiles(dumps_.get(), metadata_.get());
+      WriteFiles(*dumps_, *metadata_);
 
     UnlockAndCloseFile(lockfile_fd_);
     lockfile_fd_ = -1;
@@ -397,7 +394,7 @@
 std::vector<std::unique_ptr<DumpInfo>> SynchronizedMinidumpManager::GetDumps() {
   std::vector<std::unique_ptr<DumpInfo>> dumps;
 
-  for (const auto& elem : dumps_->GetListDeprecated()) {
+  for (const auto& elem : *dumps_) {
     dumps.push_back(std::unique_ptr<DumpInfo>(new DumpInfo(&elem)));
   }
 
@@ -406,11 +403,10 @@
 
 bool SynchronizedMinidumpManager::SetCurrentDumps(
     const std::vector<std::unique_ptr<DumpInfo>>& dumps) {
-  dumps_->ClearList();
+  dumps_->clear();
 
   for (auto& dump : dumps) {
-    dumps_->GetList().Append(
-        base::Value::FromUniquePtrValue(dump->GetAsValue()));
+    dumps_->Append(dump->GetAsValue());
   }
 
   return true;
@@ -418,30 +414,30 @@
 
 bool SynchronizedMinidumpManager::IncrementNumDumpsInCurrentPeriod() {
   DCHECK(metadata_);
-  int last_dumps = GetRatelimitPeriodDumps(metadata_.get());
+  int last_dumps = GetRatelimitPeriodDumps(metadata_);
   RCHECK(last_dumps >= 0, false);
 
-  return SetRatelimitPeriodDumps(metadata_.get(), last_dumps + 1);
+  return SetRatelimitPeriodDumps(metadata_, last_dumps + 1);
 }
 
 bool SynchronizedMinidumpManager::DecrementNumDumpsInCurrentPeriod() {
   DCHECK(metadata_);
-  int last_dumps = GetRatelimitPeriodDumps(metadata_.get());
+  int last_dumps = GetRatelimitPeriodDumps(metadata_);
   if (last_dumps > 0) {
-    return SetRatelimitPeriodDumps(metadata_.get(), last_dumps - 1);
+    return SetRatelimitPeriodDumps(metadata_, last_dumps - 1);
   }
   return true;
 }
 
 void SynchronizedMinidumpManager::ResetRateLimitPeriod() {
-  SetRatelimitPeriodStart(metadata_.get(), base::Time::Now());
-  SetRatelimitPeriodDumps(metadata_.get(), 0);
+  SetRatelimitPeriodStart(metadata_, base::Time::Now());
+  SetRatelimitPeriodDumps(metadata_, 0);
 }
 
 bool SynchronizedMinidumpManager::CanUploadDump() {
   base::Time cur_time = base::Time::Now();
-  base::Time period_start = GetRatelimitPeriodStart(metadata_.get());
-  int period_dumps_count = GetRatelimitPeriodDumps(metadata_.get());
+  base::Time period_start = GetRatelimitPeriodStart(metadata_);
+  int period_dumps_count = GetRatelimitPeriodDumps(metadata_);
 
   // If we're in invalid state, or we passed the period, reset the ratelimit.
   // When the device reboots, |cur_time| may be incorrectly reported to be a
diff --git a/chromecast/crash/linux/synchronized_minidump_manager.h b/chromecast/crash/linux/synchronized_minidump_manager.h
index 28f6791..0943372e 100644
--- a/chromecast/crash/linux/synchronized_minidump_manager.h
+++ b/chromecast/crash/linux/synchronized_minidump_manager.h
@@ -10,6 +10,7 @@
 #include "base/files/file_path.h"
 #include "base/values.h"
 #include "chromecast/crash/linux/dump_info.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
 
 namespace chromecast {
 
@@ -133,7 +134,8 @@
 
   // Write deserialized |dumps| to |lockfile_path_| and the deserialized
   // |metadata| to |metadata_path_|.
-  bool WriteFiles(const base::ListValue* dumps, const base::Value* metadata);
+  bool WriteFiles(const base::Value::List& dumps,
+                  const base::Value::Dict& metadata);
 
   // Creates an empty lock file and an initialized metadata file.
   bool InitializeFiles();
@@ -144,8 +146,8 @@
   const base::FilePath lockfile_path_;
   const base::FilePath metadata_path_;
   int lockfile_fd_;
-  std::unique_ptr<base::Value> metadata_;
-  std::unique_ptr<base::ListValue> dumps_;
+  absl::optional<base::Value::Dict> metadata_;
+  absl::optional<base::Value::List> dumps_;
 };
 
 }  // namespace chromecast
diff --git a/chromecast/crash/linux/synchronized_minidump_manager_unittest.cc b/chromecast/crash/linux/synchronized_minidump_manager_unittest.cc
index 65aaeac2..d41aaed 100644
--- a/chromecast/crash/linux/synchronized_minidump_manager_unittest.cc
+++ b/chromecast/crash/linux/synchronized_minidump_manager_unittest.cc
@@ -245,7 +245,7 @@
 TEST_F(SynchronizedMinidumpManagerTest,
        AddEntryToLockFile_FailsWithInvalidEntry) {
   // Create invalid dump info value
-  base::DictionaryValue val;
+  base::Value val{base::Value::Dict()};
 
   // Test that the manager tried to log the entry and failed.
   SynchronizedMinidumpManagerSimple manager;
diff --git a/chromeos/ash/components/dbus/update_engine/update_engine_client.cc b/chromeos/ash/components/dbus/update_engine/update_engine_client.cc
index 898526b..7be0b57ec 100644
--- a/chromeos/ash/components/dbus/update_engine/update_engine_client.cc
+++ b/chromeos/ash/components/dbus/update_engine/update_engine_client.cc
@@ -691,6 +691,8 @@
       case update_engine::Operation::ATTEMPTING_ROLLBACK:
       case update_engine::Operation::NEED_PERMISSION_TO_UPDATE:
       case update_engine::Operation::DISABLED:
+      case update_engine::Operation::UPDATED_BUT_DEFERRED:
+      case update_engine::Operation::CLEANUP_PREVIOUS_UPDATE:
         return;
       case update_engine::Operation::CHECKING_FOR_UPDATE:
         next_operation = update_engine::Operation::UPDATE_AVAILABLE;
diff --git a/chromeos/dbus/dbus_thread_manager.cc b/chromeos/dbus/dbus_thread_manager.cc
index 48c56b0b..bee4a5b 100644
--- a/chromeos/dbus/dbus_thread_manager.cc
+++ b/chromeos/dbus/dbus_thread_manager.cc
@@ -9,7 +9,6 @@
 
 #include "base/logging.h"
 #include "chromeos/dbus/common/dbus_client.h"
-#include "chromeos/dbus/shill/shill_clients.h"
 
 namespace chromeos {
 
@@ -23,10 +22,6 @@
   // Some clients call DBusThreadManager::Get() during initialization.
   DCHECK(g_dbus_thread_manager);
 
-  // TODO(stevenjb): Move these to dbus_helper.cc in src/chrome and any tests
-  // that require Shill clients. https://crbug.com/948390.
-  shill_clients::Initialize(GetSystemBus());
-
   if (!IsUsingFakes())
     VLOG(1) << "DBusThreadManager initialized for ChromeOS";
   else
@@ -50,9 +45,6 @@
   // Ensure that we only shutdown DBusThreadManager once.
   CHECK(g_dbus_thread_manager);
 
-  // TODO(stevenjb): Remove. https://crbug.com/948390.
-  shill_clients::Shutdown();
-
   DBusThreadManager* dbus_thread_manager = g_dbus_thread_manager;
   g_dbus_thread_manager = nullptr;
   delete dbus_thread_manager;
diff --git a/chromeos/profiles/orderfile.newest.txt b/chromeos/profiles/orderfile.newest.txt
index e463275..f50b6ec 100644
--- a/chromeos/profiles/orderfile.newest.txt
+++ b/chromeos/profiles/orderfile.newest.txt
@@ -1 +1 @@
-chromeos-chrome-orderfile-field-105-5161.0-1658138909-benchmark-105.0.5195.2-r1.orderfile.xz
+chromeos-chrome-orderfile-field-105-5161.0-1658138909-benchmark-105.0.5195.3-r1.orderfile.xz
diff --git a/chromeos/strings/chromeos_strings_af.xtb b/chromeos/strings/chromeos_strings_af.xtb
index b3163247..ed19fda 100644
--- a/chromeos/strings/chromeos_strings_af.xtb
+++ b/chromeos/strings/chromeos_strings_af.xtb
@@ -118,6 +118,7 @@
 <translation id="1851218745569890714">Videokonferensies</translation>
 <translation id="1852934301711881861">Installeer Chrome OS Flex</translation>
 <translation id="1856388568474281774">Afpyl</translation>
+<translation id="1858620243986915808">Heg skermskoot aan</translation>
 <translation id="1871569928317311284">Skakel donkertema af</translation>
 <translation id="1874612839560830905">MTU</translation>
 <translation id="188114911237521550">Skakel donkermodus af</translation>
@@ -132,6 +133,7 @@
 <translation id="1977994649430373166">Google-profielfoto</translation>
 <translation id="1979103255016296513">Wagwoord moes al verander geword het</translation>
 <translation id="1999615961760456652">Kontroleringsportaal</translation>
+<translation id="200669432486043882">Vervang lêer</translation>
 <translation id="2006864819935886708">Konnektiwiteit</translation>
 <translation id="2008685064673031089">Hoofsoektog</translation>
 <translation id="2011174342667534258">SDK-weergawe:</translation>
diff --git a/chromeos/strings/chromeos_strings_am.xtb b/chromeos/strings/chromeos_strings_am.xtb
index c69be9e..5628e43 100644
--- a/chromeos/strings/chromeos_strings_am.xtb
+++ b/chromeos/strings/chromeos_strings_am.xtb
@@ -132,6 +132,7 @@
 <translation id="1977994649430373166">የGoogle መገለጫ ፎቶ</translation>
 <translation id="1979103255016296513">የይለፍ ቃል ለውጥ ማድረጊያ ጊዜው አልፏል</translation>
 <translation id="1999615961760456652">ተያዥ መግቢያ</translation>
+<translation id="200669432486043882">ፋይል ተካ</translation>
 <translation id="2006864819935886708">ግንኙነት</translation>
 <translation id="2008685064673031089">ዋና ፍለጋ</translation>
 <translation id="2011174342667534258">የኤስዲኬ ስሪት፦</translation>
diff --git a/chromeos/strings/chromeos_strings_ar.xtb b/chromeos/strings/chromeos_strings_ar.xtb
index 86da973..8d79218 100644
--- a/chromeos/strings/chromeos_strings_ar.xtb
+++ b/chromeos/strings/chromeos_strings_ar.xtb
@@ -132,6 +132,7 @@
 <translation id="1977994649430373166">‏صورة الملف الشخصي في حساب Google</translation>
 <translation id="1979103255016296513">تأخير تغيير كلمة المرور</translation>
 <translation id="1999615961760456652">مدخل مشروط الوصول إليه</translation>
+<translation id="200669432486043882">استبدال ملف</translation>
 <translation id="2006864819935886708">إمكانية التوصيل</translation>
 <translation id="2008685064673031089">البحث الأوّلي</translation>
 <translation id="2011174342667534258">‏إصدار حزمة تطوير البرامج (SDK):</translation>
diff --git a/chromeos/strings/chromeos_strings_az.xtb b/chromeos/strings/chromeos_strings_az.xtb
index c6ecd44..a48d4a1 100644
--- a/chromeos/strings/chromeos_strings_az.xtb
+++ b/chromeos/strings/chromeos_strings_az.xtb
@@ -134,6 +134,7 @@
 <translation id="1977994649430373166">Google profil şəkli</translation>
 <translation id="1979103255016296513">Parol dəyişikliyinin gecikməsi</translation>
 <translation id="1999615961760456652">Giriş Portalı</translation>
+<translation id="200669432486043882">Faylı əvəz edin</translation>
 <translation id="2006864819935886708">Bağlantı</translation>
 <translation id="2008685064673031089">Əsas axtarış</translation>
 <translation id="2011174342667534258">SDK Versiyası:</translation>
diff --git a/chromeos/strings/chromeos_strings_bg.xtb b/chromeos/strings/chromeos_strings_bg.xtb
index 252f2b5..e0cc455 100644
--- a/chromeos/strings/chromeos_strings_bg.xtb
+++ b/chromeos/strings/chromeos_strings_bg.xtb
@@ -132,6 +132,7 @@
 <translation id="1977994649430373166">Снимка на потребителския профил в Google</translation>
 <translation id="1979103255016296513">Срокът за промяна на паролата е изтекъл</translation>
 <translation id="1999615961760456652">Портал за удостоверяване</translation>
+<translation id="200669432486043882">Замяна на файла</translation>
 <translation id="2006864819935886708">Свързване към мрежата</translation>
 <translation id="2008685064673031089">Търсене на прости числа</translation>
 <translation id="2011174342667534258">Версия на SDK:</translation>
diff --git a/chromeos/strings/chromeos_strings_bn.xtb b/chromeos/strings/chromeos_strings_bn.xtb
index f5b8641e..4fb7c016 100644
--- a/chromeos/strings/chromeos_strings_bn.xtb
+++ b/chromeos/strings/chromeos_strings_bn.xtb
@@ -133,6 +133,7 @@
 <translation id="1977994649430373166">Google প্রোফাইল ফটো</translation>
 <translation id="1979103255016296513">পাসওয়ার্ড পরিবর্তন করার সময় পেরিয়ে গেছে</translation>
 <translation id="1999615961760456652">ক্যাপটিভ পোর্টাল</translation>
+<translation id="200669432486043882">ফাইলটি প্রতিস্থাপন করুন</translation>
 <translation id="2006864819935886708">সংযোজকতা</translation>
 <translation id="2008685064673031089">প্রাইম সার্চ</translation>
 <translation id="2011174342667534258">SDK ভার্সন:</translation>
diff --git a/chromeos/strings/chromeos_strings_bs.xtb b/chromeos/strings/chromeos_strings_bs.xtb
index 2ab1c90..5511f84 100644
--- a/chromeos/strings/chromeos_strings_bs.xtb
+++ b/chromeos/strings/chromeos_strings_bs.xtb
@@ -133,6 +133,7 @@
 <translation id="1977994649430373166">Fotografija Google profila</translation>
 <translation id="1979103255016296513">Vrijeme za promjenu lozinke je isteklo</translation>
 <translation id="1999615961760456652">Zaštitni portal</translation>
+<translation id="200669432486043882">Zamijeni datoteku</translation>
 <translation id="2006864819935886708">Povezivost</translation>
 <translation id="2008685064673031089">Primarno pretraživanje</translation>
 <translation id="2011174342667534258">Verzija SDK:</translation>
diff --git a/chromeos/strings/chromeos_strings_ca.xtb b/chromeos/strings/chromeos_strings_ca.xtb
index 684ba5f..c78de83 100644
--- a/chromeos/strings/chromeos_strings_ca.xtb
+++ b/chromeos/strings/chromeos_strings_ca.xtb
@@ -132,6 +132,7 @@
 <translation id="1977994649430373166">Foto de perfil de Google</translation>
 <translation id="1979103255016296513">Canvi de contrasenya vençut</translation>
 <translation id="1999615961760456652">Portal captiu</translation>
+<translation id="200669432486043882">Substitueix el fitxer</translation>
 <translation id="2006864819935886708">Connectivitat</translation>
 <translation id="2008685064673031089">Cerca principal</translation>
 <translation id="2011174342667534258">Versió de l'SDK:</translation>
diff --git a/chromeos/strings/chromeos_strings_cs.xtb b/chromeos/strings/chromeos_strings_cs.xtb
index bf028cf..6a49012 100644
--- a/chromeos/strings/chromeos_strings_cs.xtb
+++ b/chromeos/strings/chromeos_strings_cs.xtb
@@ -133,6 +133,7 @@
 <translation id="1977994649430373166">Profilová fotka Google</translation>
 <translation id="1979103255016296513">Uběhl termín pro změnu hesla</translation>
 <translation id="1999615961760456652">Captive portál</translation>
+<translation id="200669432486043882">Nahradit soubor</translation>
 <translation id="2006864819935886708">Připojení</translation>
 <translation id="2008685064673031089">Vyhledávání prvočísel</translation>
 <translation id="2011174342667534258">Verze sady SDK:</translation>
diff --git a/chromeos/strings/chromeos_strings_da.xtb b/chromeos/strings/chromeos_strings_da.xtb
index 82151b4..8006e28 100644
--- a/chromeos/strings/chromeos_strings_da.xtb
+++ b/chromeos/strings/chromeos_strings_da.xtb
@@ -132,6 +132,7 @@
 <translation id="1977994649430373166">Google-profilbillede</translation>
 <translation id="1979103255016296513">Adgangskoden mangler at blive ændret</translation>
 <translation id="1999615961760456652">Loginportal</translation>
+<translation id="200669432486043882">Erstat fil</translation>
 <translation id="2006864819935886708">Forbindelse</translation>
 <translation id="2008685064673031089">Prime-søgning</translation>
 <translation id="2011174342667534258">SDK-version:</translation>
diff --git a/chromeos/strings/chromeos_strings_de.xtb b/chromeos/strings/chromeos_strings_de.xtb
index a911603..0406133 100644
--- a/chromeos/strings/chromeos_strings_de.xtb
+++ b/chromeos/strings/chromeos_strings_de.xtb
@@ -132,6 +132,7 @@
 <translation id="1977994649430373166">Google-Profilfoto</translation>
 <translation id="1979103255016296513">Passwortänderung überfällig</translation>
 <translation id="1999615961760456652">Captive Portal</translation>
+<translation id="200669432486043882">Datei ersetzen</translation>
 <translation id="2006864819935886708">Verbindung</translation>
 <translation id="2008685064673031089">Primzahlensuche</translation>
 <translation id="2011174342667534258">SDK-Version:</translation>
diff --git a/chromeos/strings/chromeos_strings_el.xtb b/chromeos/strings/chromeos_strings_el.xtb
index f9af3ed..c5db49e 100644
--- a/chromeos/strings/chromeos_strings_el.xtb
+++ b/chromeos/strings/chromeos_strings_el.xtb
@@ -132,6 +132,7 @@
 <translation id="1977994649430373166">Φωτογραφία προφίλ Google</translation>
 <translation id="1979103255016296513">Εκπρόθεσμη αλλαγή κωδικού πρόσβασης</translation>
 <translation id="1999615961760456652">Πύλη υποδοχής</translation>
+<translation id="200669432486043882">Αντικατάσταση αρχείου</translation>
 <translation id="2006864819935886708">Συνδεσιμότητα</translation>
 <translation id="2008685064673031089">Αναζήτηση Prime</translation>
 <translation id="2011174342667534258">Έκδοση SDK:</translation>
diff --git a/chromeos/strings/chromeos_strings_en-GB.xtb b/chromeos/strings/chromeos_strings_en-GB.xtb
index eb6bc92..fc576e8a9 100644
--- a/chromeos/strings/chromeos_strings_en-GB.xtb
+++ b/chromeos/strings/chromeos_strings_en-GB.xtb
@@ -134,6 +134,7 @@
 <translation id="1977994649430373166">Google profile photo</translation>
 <translation id="1979103255016296513">Password change overdue</translation>
 <translation id="1999615961760456652">Captive portal</translation>
+<translation id="200669432486043882">Replace file</translation>
 <translation id="2006864819935886708">Connectivity</translation>
 <translation id="2008685064673031089">Prime search</translation>
 <translation id="2011174342667534258">SDK version:</translation>
diff --git a/chromeos/strings/chromeos_strings_es-419.xtb b/chromeos/strings/chromeos_strings_es-419.xtb
index bda6498..a0731d7 100644
--- a/chromeos/strings/chromeos_strings_es-419.xtb
+++ b/chromeos/strings/chromeos_strings_es-419.xtb
@@ -132,6 +132,7 @@
 <translation id="1977994649430373166">Foto de perfil de Google</translation>
 <translation id="1979103255016296513">Está pendiente el cambio de contraseña</translation>
 <translation id="1999615961760456652">Portal cautivo</translation>
+<translation id="200669432486043882">Reemplazar el archivo</translation>
 <translation id="2006864819935886708">Conectividad</translation>
 <translation id="2008685064673031089">Búsqueda de números primos</translation>
 <translation id="2011174342667534258">Versión del SDK:</translation>
diff --git a/chromeos/strings/chromeos_strings_es.xtb b/chromeos/strings/chromeos_strings_es.xtb
index 9603b0a8..d63003d 100644
--- a/chromeos/strings/chromeos_strings_es.xtb
+++ b/chromeos/strings/chromeos_strings_es.xtb
@@ -132,6 +132,7 @@
 <translation id="1977994649430373166">Foto de perfil de Google</translation>
 <translation id="1979103255016296513">Ya ha terminado el plazo para cambiar la contraseña</translation>
 <translation id="1999615961760456652">Portal cautivo</translation>
+<translation id="200669432486043882">Reemplazar archivo</translation>
 <translation id="2006864819935886708">Conectividad</translation>
 <translation id="2008685064673031089">Búsqueda principal</translation>
 <translation id="2011174342667534258">Versión del SDK:</translation>
diff --git a/chromeos/strings/chromeos_strings_et.xtb b/chromeos/strings/chromeos_strings_et.xtb
index d7bc3c1..466b1c3 100644
--- a/chromeos/strings/chromeos_strings_et.xtb
+++ b/chromeos/strings/chromeos_strings_et.xtb
@@ -132,6 +132,7 @@
 <translation id="1977994649430373166">Google'i profiilifoto</translation>
 <translation id="1979103255016296513">Parooli muutmise tähtaeg on möödunud</translation>
 <translation id="1999615961760456652">Hõiveportaal</translation>
+<translation id="200669432486043882">Asenda fail</translation>
 <translation id="2006864819935886708">Ühenduvus</translation>
 <translation id="2008685064673031089">Algarvude otsing</translation>
 <translation id="2011174342667534258">SDK versioon:</translation>
diff --git a/chromeos/strings/chromeos_strings_eu.xtb b/chromeos/strings/chromeos_strings_eu.xtb
index 47ffbc35..123c05a 100644
--- a/chromeos/strings/chromeos_strings_eu.xtb
+++ b/chromeos/strings/chromeos_strings_eu.xtb
@@ -132,6 +132,7 @@
 <translation id="1977994649430373166">Google-ko profileko argazkia</translation>
 <translation id="1979103255016296513">Pasahitza iraungita dago eta aldatu egin behar da</translation>
 <translation id="1999615961760456652">Sare-zerbitzuaren ataria</translation>
+<translation id="200669432486043882">Ordeztu fitxategia</translation>
 <translation id="2006864819935886708">Konexioa</translation>
 <translation id="2008685064673031089">Prime bilaketa</translation>
 <translation id="2011174342667534258">SDKaren bertsioa:</translation>
diff --git a/chromeos/strings/chromeos_strings_fa.xtb b/chromeos/strings/chromeos_strings_fa.xtb
index d59f44f..195fb97 100644
--- a/chromeos/strings/chromeos_strings_fa.xtb
+++ b/chromeos/strings/chromeos_strings_fa.xtb
@@ -118,6 +118,7 @@
 <translation id="1851218745569890714">کنفرانس ویدیویی</translation>
 <translation id="1852934301711881861">‏نصب ChromeOS Flex</translation>
 <translation id="1856388568474281774">جهت‌نمای پایین</translation>
+<translation id="1858620243986915808">پیوست کردن نماگرفت</translation>
 <translation id="1871569928317311284">خاموش کردن زمینه تیره</translation>
 <translation id="1874612839560830905">MTU</translation>
 <translation id="188114911237521550">خاموش کردن حالت تاریک</translation>
@@ -132,6 +133,7 @@
 <translation id="1977994649430373166">‏عکس نمایه Google</translation>
 <translation id="1979103255016296513">مهلت تغییر گذرواژه به پایان رسید</translation>
 <translation id="1999615961760456652">درگاه مهمان</translation>
+<translation id="200669432486043882">جایگزینی فایل</translation>
 <translation id="2006864819935886708">قابلیت اتصال</translation>
 <translation id="2008685064673031089">جستجوی اصلی</translation>
 <translation id="2011174342667534258">‏نسخه SDK:</translation>
diff --git a/chromeos/strings/chromeos_strings_fi.xtb b/chromeos/strings/chromeos_strings_fi.xtb
index 9934e547..093b6ee 100644
--- a/chromeos/strings/chromeos_strings_fi.xtb
+++ b/chromeos/strings/chromeos_strings_fi.xtb
@@ -132,6 +132,7 @@
 <translation id="1977994649430373166">Google-profiilikuva</translation>
 <translation id="1979103255016296513">Salasanan vaihto myöhässä</translation>
 <translation id="1999615961760456652">Captive portal</translation>
+<translation id="200669432486043882">Korvaa tiedosto.</translation>
 <translation id="2006864819935886708">Yhteys</translation>
 <translation id="2008685064673031089">Ensisijainen haku</translation>
 <translation id="2011174342667534258">SDK-versio:</translation>
diff --git a/chromeos/strings/chromeos_strings_fil.xtb b/chromeos/strings/chromeos_strings_fil.xtb
index a7938a78..8ec2e95 100644
--- a/chromeos/strings/chromeos_strings_fil.xtb
+++ b/chromeos/strings/chromeos_strings_fil.xtb
@@ -134,6 +134,7 @@
 <translation id="1977994649430373166">Larawan sa profile sa Google</translation>
 <translation id="1979103255016296513">Overdue na ang pagpapalit ng password</translation>
 <translation id="1999615961760456652">Captive Portal</translation>
+<translation id="200669432486043882">Magpalit ng file</translation>
 <translation id="2006864819935886708">Pagkakakonekta</translation>
 <translation id="2008685064673031089">Prime na paghahanap</translation>
 <translation id="2011174342667534258">Bersyon ng SDK:</translation>
diff --git a/chromeos/strings/chromeos_strings_fr-CA.xtb b/chromeos/strings/chromeos_strings_fr-CA.xtb
index 40bac2c3..53faaa5 100644
--- a/chromeos/strings/chromeos_strings_fr-CA.xtb
+++ b/chromeos/strings/chromeos_strings_fr-CA.xtb
@@ -132,6 +132,7 @@
 <translation id="1977994649430373166">Photo de profil Google</translation>
 <translation id="1979103255016296513">Le mot de passe est expiré; vous devez le changer</translation>
 <translation id="1999615961760456652">Portail captif</translation>
+<translation id="200669432486043882">Remplacer un fichier</translation>
 <translation id="2006864819935886708">Connectivité</translation>
 <translation id="2008685064673031089">Recherche de numéros premiers</translation>
 <translation id="2011174342667534258">Version de la trousse SDK :</translation>
diff --git a/chromeos/strings/chromeos_strings_fr.xtb b/chromeos/strings/chromeos_strings_fr.xtb
index cedbaad..c95ee9d 100644
--- a/chromeos/strings/chromeos_strings_fr.xtb
+++ b/chromeos/strings/chromeos_strings_fr.xtb
@@ -132,6 +132,7 @@
 <translation id="1977994649430373166">Photo du profil Google</translation>
 <translation id="1979103255016296513">Mot de passe à modifier</translation>
 <translation id="1999615961760456652">Portail captif</translation>
+<translation id="200669432486043882">Remplacer un fichier</translation>
 <translation id="2006864819935886708">Connectivité</translation>
 <translation id="2008685064673031089">Recherche de nombres premiers</translation>
 <translation id="2011174342667534258">Version du SDK :</translation>
diff --git a/chromeos/strings/chromeos_strings_gl.xtb b/chromeos/strings/chromeos_strings_gl.xtb
index a7bc59a6..3c21e5a 100644
--- a/chromeos/strings/chromeos_strings_gl.xtb
+++ b/chromeos/strings/chromeos_strings_gl.xtb
@@ -132,6 +132,7 @@
 <translation id="1977994649430373166">Foto do perfil de Google</translation>
 <translation id="1979103255016296513">Produciuse un atraso no cambio de contrasinal</translation>
 <translation id="1999615961760456652">Portal cativo</translation>
+<translation id="200669432486043882">Substituír ficheiro</translation>
 <translation id="2006864819935886708">Conectividade</translation>
 <translation id="2008685064673031089">Busca principal</translation>
 <translation id="2011174342667534258">Versión do SDK:</translation>
diff --git a/chromeos/strings/chromeos_strings_gu.xtb b/chromeos/strings/chromeos_strings_gu.xtb
index 298751d..0fc6093 100644
--- a/chromeos/strings/chromeos_strings_gu.xtb
+++ b/chromeos/strings/chromeos_strings_gu.xtb
@@ -132,6 +132,7 @@
 <translation id="1977994649430373166">Google પ્રોફાઇલ ફોટો</translation>
 <translation id="1979103255016296513">પાસવર્ડ બદલવાની તારીખ નીકળી ગઈ છે</translation>
 <translation id="1999615961760456652">કૅપ્ટિવ પોર્ટલ</translation>
+<translation id="200669432486043882">ફાઈલ બદલો</translation>
 <translation id="2006864819935886708">કનેક્ટિવિટી</translation>
 <translation id="2008685064673031089">મુખ્ય શોધ</translation>
 <translation id="2011174342667534258">SDK વર્ઝન:</translation>
diff --git a/chromeos/strings/chromeos_strings_hi.xtb b/chromeos/strings/chromeos_strings_hi.xtb
index f964ca7..7a1cea4 100644
--- a/chromeos/strings/chromeos_strings_hi.xtb
+++ b/chromeos/strings/chromeos_strings_hi.xtb
@@ -132,6 +132,7 @@
 <translation id="1977994649430373166">Google खाते पर प्रोफ़ाइल फ़ोटो</translation>
 <translation id="1979103255016296513">पासवर्ड बदलने का समय निकल चुका है</translation>
 <translation id="1999615961760456652">कैप्टिव पोर्टल</translation>
+<translation id="200669432486043882">फ़ाइल प्रतिस्‍थापित करें</translation>
 <translation id="2006864819935886708">कनेक्टिविटी</translation>
 <translation id="2008685064673031089">प्राइम सर्च</translation>
 <translation id="2011174342667534258">SDK टूल का वर्शन:</translation>
diff --git a/chromeos/strings/chromeos_strings_hr.xtb b/chromeos/strings/chromeos_strings_hr.xtb
index d14b6cb8..8cc3e6ae 100644
--- a/chromeos/strings/chromeos_strings_hr.xtb
+++ b/chromeos/strings/chromeos_strings_hr.xtb
@@ -133,6 +133,7 @@
 <translation id="1977994649430373166">Fotografija Google profila</translation>
 <translation id="1979103255016296513">Zakašnjela promjena zaporke</translation>
 <translation id="1999615961760456652">Zaštitni portal</translation>
+<translation id="200669432486043882">Zamijeni datoteku</translation>
 <translation id="2006864819935886708">Povezivost</translation>
 <translation id="2008685064673031089">Glavno pretraživanje</translation>
 <translation id="2011174342667534258">Verzija SDK-a:</translation>
diff --git a/chromeos/strings/chromeos_strings_hu.xtb b/chromeos/strings/chromeos_strings_hu.xtb
index e6bde56..a0a6a3e1 100644
--- a/chromeos/strings/chromeos_strings_hu.xtb
+++ b/chromeos/strings/chromeos_strings_hu.xtb
@@ -133,6 +133,7 @@
 <translation id="1977994649430373166">Google-profilfotó</translation>
 <translation id="1979103255016296513">Esedékes a jelszó frissítése</translation>
 <translation id="1999615961760456652">Hitelesítési portál</translation>
+<translation id="200669432486043882">Fájl cseréje</translation>
 <translation id="2006864819935886708">Kapcsolódási hiba</translation>
 <translation id="2008685064673031089">Prímszámkeresés</translation>
 <translation id="2011174342667534258">SDK-verzió:</translation>
diff --git a/chromeos/strings/chromeos_strings_hy.xtb b/chromeos/strings/chromeos_strings_hy.xtb
index 8d7b284a..4039abd 100644
--- a/chromeos/strings/chromeos_strings_hy.xtb
+++ b/chromeos/strings/chromeos_strings_hy.xtb
@@ -132,6 +132,7 @@
 <translation id="1977994649430373166">Google պրոֆիլի լուսանկար</translation>
 <translation id="1979103255016296513">Գաղտնաբառի փոփոխման ժամկետն անցել է</translation>
 <translation id="1999615961760456652">Մուտքի էջ</translation>
+<translation id="200669432486043882">Փոխարինել ֆայլը</translation>
 <translation id="2006864819935886708">Կապ</translation>
 <translation id="2008685064673031089">Prime որոնում</translation>
 <translation id="2011174342667534258">SDK-ի տարբերակը՝</translation>
diff --git a/chromeos/strings/chromeos_strings_id.xtb b/chromeos/strings/chromeos_strings_id.xtb
index 41b05c6..07ebb4c5 100644
--- a/chromeos/strings/chromeos_strings_id.xtb
+++ b/chromeos/strings/chromeos_strings_id.xtb
@@ -132,6 +132,7 @@
 <translation id="1977994649430373166">Foto profil Google</translation>
 <translation id="1979103255016296513">Perubahan sandi melewati batas waktu</translation>
 <translation id="1999615961760456652">Captive Portal</translation>
+<translation id="200669432486043882">Ganti file</translation>
 <translation id="2006864819935886708">Konektivitas</translation>
 <translation id="2008685064673031089">Penelusuran bilangan prima</translation>
 <translation id="2011174342667534258">Versi SDK:</translation>
diff --git a/chromeos/strings/chromeos_strings_is.xtb b/chromeos/strings/chromeos_strings_is.xtb
index 7ca67c7..87ad35c1 100644
--- a/chromeos/strings/chromeos_strings_is.xtb
+++ b/chromeos/strings/chromeos_strings_is.xtb
@@ -132,6 +132,7 @@
 <translation id="1977994649430373166">Google prófílmynd</translation>
 <translation id="1979103255016296513">Breyting á aðgangsorði komin fram yfir tíma</translation>
 <translation id="1999615961760456652">Innskráningarsíða</translation>
+<translation id="200669432486043882">Skipta út skrá</translation>
 <translation id="2006864819935886708">Tenging</translation>
 <translation id="2008685064673031089">Aðalleit</translation>
 <translation id="2011174342667534258">Útgáfa forritunarverkfæra:</translation>
diff --git a/chromeos/strings/chromeos_strings_it.xtb b/chromeos/strings/chromeos_strings_it.xtb
index 9c644b1b..18214a8 100644
--- a/chromeos/strings/chromeos_strings_it.xtb
+++ b/chromeos/strings/chromeos_strings_it.xtb
@@ -92,6 +92,7 @@
 <translation id="1644574205037202324">Cronologia</translation>
 <translation id="1645954272419197032">Conferma le informazioni del dispositivo</translation>
 <translation id="1662989795263954667">Operazione interrotta - Inchiostro esaurito</translation>
+<translation id="1664796644829245314">Visualizza <ph name="PREVIEW_OBJECT" /> in anteprima</translation>
 <translation id="1668469839109562275">VPN integrata</translation>
 <translation id="1672499492233627739">Feed video della webcam</translation>
 <translation id="1676557873873341166">Acquisizione video in corso…</translation>
@@ -118,6 +119,7 @@
 <translation id="1851218745569890714">Videoconferenze</translation>
 <translation id="1852934301711881861">Installa Chrome OS Flex</translation>
 <translation id="1856388568474281774">Freccia giù</translation>
+<translation id="1858620243986915808">Allega screenshot</translation>
 <translation id="1871569928317311284">Disattiva il tema scuro</translation>
 <translation id="1874612839560830905">MTU</translation>
 <translation id="188114911237521550">Disattiva la modalità Buio</translation>
@@ -132,6 +134,7 @@
 <translation id="1977994649430373166">Foto del profilo Google</translation>
 <translation id="1979103255016296513">Modifica della password scaduta</translation>
 <translation id="1999615961760456652">Captive portal</translation>
+<translation id="200669432486043882">Sostituisci file</translation>
 <translation id="2006864819935886708">Connettività</translation>
 <translation id="2008685064673031089">Prime search</translation>
 <translation id="2011174342667534258">Versione SDK:</translation>
@@ -797,6 +800,7 @@
 <translation id="7978412674231730200">Chiave privata</translation>
 <translation id="7982789257301363584">Rete</translation>
 <translation id="7994702968232966508">Metodo EAP</translation>
+<translation id="8018928621986160031">Salvati in "<ph name="FILE_LOCATION" />"</translation>
 <translation id="802154636333426148">Download non riuscito</translation>
 <translation id="8031884997696620457">HSPAPlus</translation>
 <translation id="80398733265834479">Attiva la modalità Colore automatico</translation>
diff --git a/chromeos/strings/chromeos_strings_iw.xtb b/chromeos/strings/chromeos_strings_iw.xtb
index bdac50e..c9d58058 100644
--- a/chromeos/strings/chromeos_strings_iw.xtb
+++ b/chromeos/strings/chromeos_strings_iw.xtb
@@ -132,6 +132,7 @@
 <translation id="1977994649430373166">‏תמונת הפרופיל ב-Google</translation>
 <translation id="1979103255016296513">המועד האחרון לשינוי הסיסמה כבר חלף</translation>
 <translation id="1999615961760456652">פורטל שבוי</translation>
+<translation id="200669432486043882">החלף קובץ</translation>
 <translation id="2006864819935886708">קישוריות</translation>
 <translation id="2008685064673031089">חיפוש מספרים ראשוניים</translation>
 <translation id="2011174342667534258">‏גרסת SDK:</translation>
diff --git a/chromeos/strings/chromeos_strings_ja.xtb b/chromeos/strings/chromeos_strings_ja.xtb
index af19118..ac0248fa 100644
--- a/chromeos/strings/chromeos_strings_ja.xtb
+++ b/chromeos/strings/chromeos_strings_ja.xtb
@@ -132,6 +132,7 @@
 <translation id="1977994649430373166">Google のプロフィール写真</translation>
 <translation id="1979103255016296513">パスワードの変更期限を過ぎました</translation>
 <translation id="1999615961760456652">キャプティブ ポータル</translation>
+<translation id="200669432486043882">ファイルを交換</translation>
 <translation id="2006864819935886708">接続</translation>
 <translation id="2008685064673031089">Prime サーチ</translation>
 <translation id="2011174342667534258">SDK のバージョン:</translation>
diff --git a/chromeos/strings/chromeos_strings_ka.xtb b/chromeos/strings/chromeos_strings_ka.xtb
index 936ab98..e0eb257 100644
--- a/chromeos/strings/chromeos_strings_ka.xtb
+++ b/chromeos/strings/chromeos_strings_ka.xtb
@@ -134,6 +134,7 @@
 <translation id="1977994649430373166">Google პროფილის ფოტო</translation>
 <translation id="1979103255016296513">პაროლის შეცვლა დაგვიანებულია</translation>
 <translation id="1999615961760456652">ავტორიზაციის პორტალი</translation>
+<translation id="200669432486043882">ფაილის ჩანაცვლება</translation>
 <translation id="2006864819935886708">კავშირი</translation>
 <translation id="2008685064673031089">Prime Search</translation>
 <translation id="2011174342667534258">SDK ვერსია:</translation>
diff --git a/chromeos/strings/chromeos_strings_kk.xtb b/chromeos/strings/chromeos_strings_kk.xtb
index 5be7971..40e1f0c1 100644
--- a/chromeos/strings/chromeos_strings_kk.xtb
+++ b/chromeos/strings/chromeos_strings_kk.xtb
@@ -132,6 +132,7 @@
 <translation id="1977994649430373166">Google профилі фотосуреті</translation>
 <translation id="1979103255016296513">Құпия сөзді өзгертуге берілген мерзім аяқталды</translation>
 <translation id="1999615961760456652">Адаптивті портал</translation>
+<translation id="200669432486043882">Файлды ауыстыру</translation>
 <translation id="2006864819935886708">Қосылу мүмкіндігі</translation>
 <translation id="2008685064673031089">Prime search</translation>
 <translation id="2011174342667534258">SDK нұсқасы:</translation>
diff --git a/chromeos/strings/chromeos_strings_km.xtb b/chromeos/strings/chromeos_strings_km.xtb
index 07794bc..13ea433 100644
--- a/chromeos/strings/chromeos_strings_km.xtb
+++ b/chromeos/strings/chromeos_strings_km.xtb
@@ -133,6 +133,7 @@
 <translation id="1977994649430373166">រូបថត​កម្រង​ព័ត៌មាន Google</translation>
 <translation id="1979103255016296513">ការផ្លាស់ប្ដូរពាក្យសម្ងាត់​បានផុតកំណត់ហើយ</translation>
 <translation id="1999615961760456652">ច្រកចូលប្រើបណ្ដាញ</translation>
+<translation id="200669432486043882">ជំនួសឯកសារ</translation>
 <translation id="2006864819935886708">ការតភ្ជាប់</translation>
 <translation id="2008685064673031089">ការស្វែងរកចម្បង</translation>
 <translation id="2011174342667534258">កំណែ SDK៖</translation>
diff --git a/chromeos/strings/chromeos_strings_kn.xtb b/chromeos/strings/chromeos_strings_kn.xtb
index 2f2482e..7e06c93 100644
--- a/chromeos/strings/chromeos_strings_kn.xtb
+++ b/chromeos/strings/chromeos_strings_kn.xtb
@@ -132,6 +132,7 @@
 <translation id="1977994649430373166">Google ಪ್ರೊಫೈಲ್ ಫೋಟೋ</translation>
 <translation id="1979103255016296513">ಪಾಸ್‌ವರ್ಡ್ ಬದಲಾವಣೆ ಮಾಡಲು ತೀರಾ ತಡವಾಗಿದೆ</translation>
 <translation id="1999615961760456652">ವೈ-ಫೈ ಪ್ರಾರಂಭ ಪೋರ್ಟಲ್</translation>
+<translation id="200669432486043882">ಫೈಲ್ ಸ್ಥಳಾಂತರಿಸಿ</translation>
 <translation id="2006864819935886708">ಸಂಪರ್ಕತೆ</translation>
 <translation id="2008685064673031089">ಪ್ರೈಮ್ ಹುಡುಕಾಟ</translation>
 <translation id="2011174342667534258">SDK ಆವೃತ್ತಿ:</translation>
diff --git a/chromeos/strings/chromeos_strings_ko.xtb b/chromeos/strings/chromeos_strings_ko.xtb
index 706d3831..94c2357 100644
--- a/chromeos/strings/chromeos_strings_ko.xtb
+++ b/chromeos/strings/chromeos_strings_ko.xtb
@@ -133,6 +133,7 @@
 <translation id="1977994649430373166">Google 프로필 사진</translation>
 <translation id="1979103255016296513">비밀번호 변경 기한 지남</translation>
 <translation id="1999615961760456652">종속 포털</translation>
+<translation id="200669432486043882">파일 바꾸기</translation>
 <translation id="2006864819935886708">연결</translation>
 <translation id="2008685064673031089">Prime 검색</translation>
 <translation id="2011174342667534258">SDK 버전:</translation>
diff --git a/chromeos/strings/chromeos_strings_ky.xtb b/chromeos/strings/chromeos_strings_ky.xtb
index cd390bf..ef9cc4f 100644
--- a/chromeos/strings/chromeos_strings_ky.xtb
+++ b/chromeos/strings/chromeos_strings_ky.xtb
@@ -132,6 +132,7 @@
 <translation id="1977994649430373166">Google профилиңиздин сүрөтү</translation>
 <translation id="1979103255016296513">Сырсөздү өзгөртүү мөөнөтү бүттү</translation>
 <translation id="1999615961760456652">Кирүү бети</translation>
+<translation id="200669432486043882">Файлды алмаштыруу</translation>
 <translation id="2006864819935886708">Байланыш</translation>
 <translation id="2008685064673031089">Баштапкы издөө</translation>
 <translation id="2011174342667534258">Иштеп чыгуучунун топтомунун версиясы:</translation>
diff --git a/chromeos/strings/chromeos_strings_lo.xtb b/chromeos/strings/chromeos_strings_lo.xtb
index 5492c92..e30f0fc 100644
--- a/chromeos/strings/chromeos_strings_lo.xtb
+++ b/chromeos/strings/chromeos_strings_lo.xtb
@@ -132,6 +132,7 @@
 <translation id="1977994649430373166">ຮູບໂປຣໄຟລ໌ Google</translation>
 <translation id="1979103255016296513">ກາຍກຳນົດປ່ຽນລະຫັດຜ່ານແລ້ວ</translation>
 <translation id="1999615961760456652">ຊ່ອງທາງເຂົ້າຮັກສາໄວ້</translation>
+<translation id="200669432486043882">ປ່ຽນ​ແທນ​ໄຟ​ລ໌</translation>
 <translation id="2006864819935886708">ການເຊື່ອມຕໍ່</translation>
 <translation id="2008685064673031089">ການຊອກຫາສຳຄັນ</translation>
 <translation id="2011174342667534258">ເວີຊັນ SDK:</translation>
diff --git a/chromeos/strings/chromeos_strings_lt.xtb b/chromeos/strings/chromeos_strings_lt.xtb
index 8f4c2cb..7671273d 100644
--- a/chromeos/strings/chromeos_strings_lt.xtb
+++ b/chromeos/strings/chromeos_strings_lt.xtb
@@ -132,6 +132,7 @@
 <translation id="1977994649430373166">„Google“ profilio nuotrauka</translation>
 <translation id="1979103255016296513">Vėluojama pakeisti slaptažodį</translation>
 <translation id="1999615961760456652">Fiksuotasis portalas</translation>
+<translation id="200669432486043882">Pakeisti failą</translation>
 <translation id="2006864819935886708">Jungiamumas</translation>
 <translation id="2008685064673031089">Pagrindinė paieška</translation>
 <translation id="2011174342667534258">SDK versija:</translation>
diff --git a/chromeos/strings/chromeos_strings_lv.xtb b/chromeos/strings/chromeos_strings_lv.xtb
index c80431f..0e7bb1b 100644
--- a/chromeos/strings/chromeos_strings_lv.xtb
+++ b/chromeos/strings/chromeos_strings_lv.xtb
@@ -132,6 +132,7 @@
 <translation id="1977994649430373166">Google profila fotoattēls</translation>
 <translation id="1979103255016296513">Paroles maiņa ir nokavēta</translation>
 <translation id="1999615961760456652">Caurlaides lapa</translation>
+<translation id="200669432486043882">Aizstāt failu</translation>
 <translation id="2006864819935886708">Savienojamība</translation>
 <translation id="2008685064673031089">Pirmskaitļu meklēšana</translation>
 <translation id="2011174342667534258">SDK versija:</translation>
diff --git a/chromeos/strings/chromeos_strings_mk.xtb b/chromeos/strings/chromeos_strings_mk.xtb
index 89abe30..c128e44 100644
--- a/chromeos/strings/chromeos_strings_mk.xtb
+++ b/chromeos/strings/chromeos_strings_mk.xtb
@@ -134,6 +134,7 @@
 <translation id="1977994649430373166">Фотографија на профилот на Google</translation>
 <translation id="1979103255016296513">Измина рокот за промена на лозинката</translation>
 <translation id="1999615961760456652">Портал за проверка</translation>
+<translation id="200669432486043882">Замени датотека</translation>
 <translation id="2006864819935886708">Поврзување</translation>
 <translation id="2008685064673031089">Примарно пребарување</translation>
 <translation id="2011174342667534258">Верзија на SDK:</translation>
diff --git a/chromeos/strings/chromeos_strings_ml.xtb b/chromeos/strings/chromeos_strings_ml.xtb
index b6881da..2920f226 100644
--- a/chromeos/strings/chromeos_strings_ml.xtb
+++ b/chromeos/strings/chromeos_strings_ml.xtb
@@ -132,6 +132,7 @@
 <translation id="1977994649430373166">Google പ്രൊഫൈൽ ഫോട്ടോ</translation>
 <translation id="1979103255016296513">പാസ്‌വേഡ് മാറ്റേണ്ട സമയം കഴിഞ്ഞു</translation>
 <translation id="1999615961760456652">ക്യാപ്‌റ്റീവ് പോർട്ടൽ</translation>
+<translation id="200669432486043882">ഫയൽ മാറ്റി പകരംവെയ്‌ക്കുക</translation>
 <translation id="2006864819935886708">കണക്റ്റിവിറ്റി</translation>
 <translation id="2008685064673031089">പ്രധാന തിരയൽ</translation>
 <translation id="2011174342667534258">SDK പതിപ്പ്:</translation>
diff --git a/chromeos/strings/chromeos_strings_mn.xtb b/chromeos/strings/chromeos_strings_mn.xtb
index 57ef2ec7..0c93e5c6 100644
--- a/chromeos/strings/chromeos_strings_mn.xtb
+++ b/chromeos/strings/chromeos_strings_mn.xtb
@@ -134,6 +134,7 @@
 <translation id="1977994649430373166">Google профайл зураг</translation>
 <translation id="1979103255016296513">Нууц үг солих хугацаа хэтэрсэн</translation>
 <translation id="1999615961760456652">Дамжих портал</translation>
+<translation id="200669432486043882">Файлыг дарж солих</translation>
 <translation id="2006864819935886708">Холболт</translation>
 <translation id="2008685064673031089">Үндсэн хайлт</translation>
 <translation id="2011174342667534258">SDK хувилбар:</translation>
diff --git a/chromeos/strings/chromeos_strings_mr.xtb b/chromeos/strings/chromeos_strings_mr.xtb
index 03ffb8f8..195e8b0 100644
--- a/chromeos/strings/chromeos_strings_mr.xtb
+++ b/chromeos/strings/chromeos_strings_mr.xtb
@@ -132,6 +132,7 @@
 <translation id="1977994649430373166">Google प्रोफाइल फोटो</translation>
 <translation id="1979103255016296513">पासवर्ड बदलण्याची मुदत संपली आहे</translation>
 <translation id="1999615961760456652">कॅप्टिव्ह पोर्टल</translation>
+<translation id="200669432486043882">फाईल बदला</translation>
 <translation id="2006864819935886708">कनेक्टिव्हिटी</translation>
 <translation id="2008685064673031089">प्राइम शोध</translation>
 <translation id="2011174342667534258">SDK आवृत्ती:</translation>
diff --git a/chromeos/strings/chromeos_strings_ms.xtb b/chromeos/strings/chromeos_strings_ms.xtb
index d23778b..a8e459c 100644
--- a/chromeos/strings/chromeos_strings_ms.xtb
+++ b/chromeos/strings/chromeos_strings_ms.xtb
@@ -133,6 +133,7 @@
 <translation id="1977994649430373166">Foto profil Google</translation>
 <translation id="1979103255016296513">Kata laluan perlu ditukar</translation>
 <translation id="1999615961760456652">Portal Terbolot</translation>
+<translation id="200669432486043882">Gantikan fail</translation>
 <translation id="2006864819935886708">Kesambungan</translation>
 <translation id="2008685064673031089">Carian nombor perdana</translation>
 <translation id="2011174342667534258">Versi SDK:</translation>
diff --git a/chromeos/strings/chromeos_strings_my.xtb b/chromeos/strings/chromeos_strings_my.xtb
index 799a030..37f2b5a 100644
--- a/chromeos/strings/chromeos_strings_my.xtb
+++ b/chromeos/strings/chromeos_strings_my.xtb
@@ -92,6 +92,7 @@
 <translation id="1644574205037202324">မှတ်တမ်း</translation>
 <translation id="1645954272419197032">ကိရိယာ၏ အချက်အလက်များ အတည်ပြုပါ</translation>
 <translation id="1662989795263954667">ရပ်သွားသည် - မင်ကုန်နေသည်</translation>
+<translation id="1664796644829245314"><ph name="PREVIEW_OBJECT" /> ကို အစမ်းကြည့်ရန်</translation>
 <translation id="1668469839109562275">အသင့်ပါသော VPN</translation>
 <translation id="1672499492233627739">ဝဘ်ကမ်ဗီဒီယို ဖိဒ်</translation>
 <translation id="1676557873873341166">ဗီဒီယိုရိုက်နေသည်</translation>
@@ -133,6 +134,7 @@
 <translation id="1977994649430373166">Google ပရိုဖိုင်ဓာတ်ပုံ</translation>
 <translation id="1979103255016296513">စကားဝှက်ပြောင်းလဲမှု သက်တမ်းကုန်သွားပါပြီ</translation>
 <translation id="1999615961760456652">စတင်ဝင်ရန် စာမျက်နှာ</translation>
+<translation id="200669432486043882">ဖိုင် အစားထိုးရန်</translation>
 <translation id="2006864819935886708">ချိတ်ဆက်နိုင်မှု</translation>
 <translation id="2008685064673031089">အဓိက ရှာဖွေမှု</translation>
 <translation id="2011174342667534258">SDK ဗားရှင်း-</translation>
@@ -797,6 +799,7 @@
 <translation id="7978412674231730200">ကိုယ်ပိုင် သော့</translation>
 <translation id="7982789257301363584">ကွန်ရက်</translation>
 <translation id="7994702968232966508">EAP နည်းလမ်း</translation>
+<translation id="8018928621986160031">“<ph name="FILE_LOCATION" />” သို့ သိမ်းထားသည်</translation>
 <translation id="802154636333426148">ဒေါင်းလုဒ်လုပ်မှု မအောင်မြင်ပါ</translation>
 <translation id="8031884997696620457">HSPAPlus</translation>
 <translation id="80398733265834479">အလိုအလျောက်အရောင်ချိန်မုဒ် ဖွင့်ရန်</translation>
diff --git a/chromeos/strings/chromeos_strings_ne.xtb b/chromeos/strings/chromeos_strings_ne.xtb
index 7004802..64f7353 100644
--- a/chromeos/strings/chromeos_strings_ne.xtb
+++ b/chromeos/strings/chromeos_strings_ne.xtb
@@ -132,6 +132,7 @@
 <translation id="1977994649430373166">Google प्रोफाइल फोटो</translation>
 <translation id="1979103255016296513">पासवर्ड परिवर्तन गर्न ढिला भइसकेको छ</translation>
 <translation id="1999615961760456652">क्याप्टिभ पोर्टल</translation>
+<translation id="200669432486043882">फाइल बदल्नुहोस्</translation>
 <translation id="2006864819935886708">कनेक्टिभिटी</translation>
 <translation id="2008685064673031089">प्राइम सर्च</translation>
 <translation id="2011174342667534258">SDK को संस्करण:</translation>
diff --git a/chromeos/strings/chromeos_strings_nl.xtb b/chromeos/strings/chromeos_strings_nl.xtb
index 81bff6a..a883bc75 100644
--- a/chromeos/strings/chromeos_strings_nl.xtb
+++ b/chromeos/strings/chromeos_strings_nl.xtb
@@ -133,6 +133,7 @@
 <translation id="1977994649430373166">Google-profielfoto</translation>
 <translation id="1979103255016296513">Wachtwoord moet dringend worden gewijzigd</translation>
 <translation id="1999615961760456652">Captive portal</translation>
+<translation id="200669432486043882">Bestand vervangen</translation>
 <translation id="2006864819935886708">Connectiviteit</translation>
 <translation id="2008685064673031089">Priemgetallen zoeken</translation>
 <translation id="2011174342667534258">SDK-versie:</translation>
diff --git a/chromeos/strings/chromeos_strings_no.xtb b/chromeos/strings/chromeos_strings_no.xtb
index a9045d35..f0f35e3 100644
--- a/chromeos/strings/chromeos_strings_no.xtb
+++ b/chromeos/strings/chromeos_strings_no.xtb
@@ -119,6 +119,7 @@
 <translation id="1851218745569890714">Videokonferanser</translation>
 <translation id="1852934301711881861">Installer ChromeOS Flex</translation>
 <translation id="1856388568474281774">Nedoverpil</translation>
+<translation id="1858620243986915808">Legg ved skjermdump</translation>
 <translation id="1871569928317311284">Slå av mørkt tema</translation>
 <translation id="1874612839560830905">MTU</translation>
 <translation id="188114911237521550">Slå av mørk modus</translation>
@@ -133,6 +134,7 @@
 <translation id="1977994649430373166">Google-profilbilde</translation>
 <translation id="1979103255016296513">Det er på høy tid å endre passordet</translation>
 <translation id="1999615961760456652">Obligatorisk side</translation>
+<translation id="200669432486043882">Bytt ut fil</translation>
 <translation id="2006864819935886708">Tilkobling</translation>
 <translation id="2008685064673031089">Primtallsøk</translation>
 <translation id="2011174342667534258">SDK-versjon:</translation>
diff --git a/chromeos/strings/chromeos_strings_pa.xtb b/chromeos/strings/chromeos_strings_pa.xtb
index 7c37e89..123274e 100644
--- a/chromeos/strings/chromeos_strings_pa.xtb
+++ b/chromeos/strings/chromeos_strings_pa.xtb
@@ -133,6 +133,7 @@
 <translation id="1977994649430373166">Google ਪ੍ਰੋਫਾਈਲ ਫ਼ੋਟੋ</translation>
 <translation id="1979103255016296513">ਪਾਸਵਰਡ ਬਦਲਣਾ ਬਾਕੀ ਹੈ</translation>
 <translation id="1999615961760456652">ਕੈਪਟਿਵ ਪੋਰਟਲ</translation>
+<translation id="200669432486043882">ਫਾਈਲ ਬਦਲੋ</translation>
 <translation id="2006864819935886708">ਕਨੈਕਟੀਵਿਟੀ</translation>
 <translation id="2008685064673031089">ਪ੍ਰਮੁੱਖ ਖੋਜ</translation>
 <translation id="2011174342667534258">SDK ਵਰਜਨ:</translation>
diff --git a/chromeos/strings/chromeos_strings_pl.xtb b/chromeos/strings/chromeos_strings_pl.xtb
index 7ec030f..b6277ef 100644
--- a/chromeos/strings/chromeos_strings_pl.xtb
+++ b/chromeos/strings/chromeos_strings_pl.xtb
@@ -92,6 +92,7 @@
 <translation id="1644574205037202324">Historia</translation>
 <translation id="1645954272419197032">Potwierdź informacje o urządzeniu</translation>
 <translation id="1662989795263954667">Zatrzymano – brak tuszu</translation>
+<translation id="1664796644829245314">Wyświetl podgląd: <ph name="PREVIEW_OBJECT" /></translation>
 <translation id="1668469839109562275">Wbudowana sieć VPN</translation>
 <translation id="1672499492233627739">Przekaz z kamery internetowej</translation>
 <translation id="1676557873873341166">Nagrywam obraz</translation>
@@ -133,6 +134,7 @@
 <translation id="1977994649430373166">Zdjęcie profilowe Google</translation>
 <translation id="1979103255016296513">Zaległa zmiana hasła</translation>
 <translation id="1999615961760456652">Portal przechwytujący</translation>
+<translation id="200669432486043882">Zastąp plik</translation>
 <translation id="2006864819935886708">Łączność</translation>
 <translation id="2008685064673031089">Znajdowanie liczb pierwszych</translation>
 <translation id="2011174342667534258">Wersja SDK:</translation>
@@ -798,6 +800,7 @@
 <translation id="7978412674231730200">Klucz prywatny</translation>
 <translation id="7982789257301363584">Sieć</translation>
 <translation id="7994702968232966508">Metoda EAP</translation>
+<translation id="8018928621986160031">Zapisano w folderze „<ph name="FILE_LOCATION" />”</translation>
 <translation id="802154636333426148">Nie udało się pobrać</translation>
 <translation id="8031884997696620457">HSPAPlus</translation>
 <translation id="80398733265834479">Włącz automatyczny tryb kolorów</translation>
diff --git a/chromeos/strings/chromeos_strings_pt-BR.xtb b/chromeos/strings/chromeos_strings_pt-BR.xtb
index 5426082..5eda51c 100644
--- a/chromeos/strings/chromeos_strings_pt-BR.xtb
+++ b/chromeos/strings/chromeos_strings_pt-BR.xtb
@@ -92,6 +92,7 @@
 <translation id="1644574205037202324">Histórico</translation>
 <translation id="1645954272419197032">Confirme as informações do dispositivo</translation>
 <translation id="1662989795263954667">Parado (sem tinta)</translation>
+<translation id="1664796644829245314">Visualizar <ph name="PREVIEW_OBJECT" /></translation>
 <translation id="1668469839109562275">VPN integrado</translation>
 <translation id="1672499492233627739">Feed de vídeo da webcam</translation>
 <translation id="1676557873873341166">Captura de vídeo ativada</translation>
@@ -133,6 +134,7 @@
 <translation id="1977994649430373166">Foto do perfil do Google</translation>
 <translation id="1979103255016296513">O prazo para a alteração de senha foi ultrapassado</translation>
 <translation id="1999615961760456652">Portal cativo</translation>
+<translation id="200669432486043882">Substituir arquivo</translation>
 <translation id="2006864819935886708">Conectividade</translation>
 <translation id="2008685064673031089">Pesquisa de números primos</translation>
 <translation id="2011174342667534258">Versão do SDK:</translation>
@@ -798,6 +800,7 @@
 <translation id="7978412674231730200">Chave privada</translation>
 <translation id="7982789257301363584">Rede</translation>
 <translation id="7994702968232966508">Método EAP</translation>
+<translation id="8018928621986160031">Salvos em "<ph name="FILE_LOCATION" />"</translation>
 <translation id="802154636333426148">Falha no download</translation>
 <translation id="8031884997696620457">HSPAPlus</translation>
 <translation id="80398733265834479">Ativar o modo de cor automático</translation>
diff --git a/chromeos/strings/chromeos_strings_pt-PT.xtb b/chromeos/strings/chromeos_strings_pt-PT.xtb
index 5402f00..99e934ac 100644
--- a/chromeos/strings/chromeos_strings_pt-PT.xtb
+++ b/chromeos/strings/chromeos_strings_pt-PT.xtb
@@ -133,6 +133,7 @@
 <translation id="1977994649430373166">Foto do perfil do Google</translation>
 <translation id="1979103255016296513">Alteração da palavra-passe vencida</translation>
 <translation id="1999615961760456652">Portal cativo</translation>
+<translation id="200669432486043882">Substituir ficheiro</translation>
 <translation id="2006864819935886708">Conectividade</translation>
 <translation id="2008685064673031089">Pesquisa Prime</translation>
 <translation id="2011174342667534258">Versão do SDK:</translation>
diff --git a/chromeos/strings/chromeos_strings_ro.xtb b/chromeos/strings/chromeos_strings_ro.xtb
index 2a24f3d..6c79868 100644
--- a/chromeos/strings/chromeos_strings_ro.xtb
+++ b/chromeos/strings/chromeos_strings_ro.xtb
@@ -133,6 +133,7 @@
 <translation id="1977994649430373166">Fotografie de profil Google</translation>
 <translation id="1979103255016296513">Ai depășit timpul limită pentru schimbarea parolei</translation>
 <translation id="1999615961760456652">Portal captiv</translation>
+<translation id="200669432486043882">Înlocuiește un fișier</translation>
 <translation id="2006864819935886708">Conectivitate</translation>
 <translation id="2008685064673031089">Căutare de numere prime</translation>
 <translation id="2011174342667534258">Versiunea SDK:</translation>
diff --git a/chromeos/strings/chromeos_strings_ru.xtb b/chromeos/strings/chromeos_strings_ru.xtb
index 073813d..79a4eb9 100644
--- a/chromeos/strings/chromeos_strings_ru.xtb
+++ b/chromeos/strings/chromeos_strings_ru.xtb
@@ -132,6 +132,7 @@
 <translation id="1977994649430373166">Фото профиля Google</translation>
 <translation id="1979103255016296513">Истек срок изменения пароля</translation>
 <translation id="1999615961760456652">Страница входа</translation>
+<translation id="200669432486043882">Заменить файл</translation>
 <translation id="2006864819935886708">Подключение</translation>
 <translation id="2008685064673031089">Поиск простых чисел</translation>
 <translation id="2011174342667534258">Версия SDK:</translation>
diff --git a/chromeos/strings/chromeos_strings_si.xtb b/chromeos/strings/chromeos_strings_si.xtb
index 3d15e24..1f79f31 100644
--- a/chromeos/strings/chromeos_strings_si.xtb
+++ b/chromeos/strings/chromeos_strings_si.xtb
@@ -132,6 +132,7 @@
 <translation id="1977994649430373166">Google පැතිකඩ ඡායාරූපය</translation>
 <translation id="1979103255016296513">මුරපදය වෙනස් කිරීම කල් ගොස් ඇත</translation>
 <translation id="1999615961760456652">පිවිසුම් දොරටුව</translation>
+<translation id="200669432486043882">ගොනුව ප්‍රතිස්ථාපනය කරන්න</translation>
 <translation id="2006864819935886708">සබැඳුම</translation>
 <translation id="2008685064673031089">ප්‍රයිම් සෙවීම</translation>
 <translation id="2011174342667534258">SDK අනුවාදය:</translation>
diff --git a/chromeos/strings/chromeos_strings_sk.xtb b/chromeos/strings/chromeos_strings_sk.xtb
index 9e05414..a5ff229 100644
--- a/chromeos/strings/chromeos_strings_sk.xtb
+++ b/chromeos/strings/chromeos_strings_sk.xtb
@@ -133,6 +133,7 @@
 <translation id="1977994649430373166">Profilová fotka na Googli</translation>
 <translation id="1979103255016296513">Uplynul termín zmeny hesla</translation>
 <translation id="1999615961760456652">Prihlasovací portál</translation>
+<translation id="200669432486043882">Nahradiť súbor</translation>
 <translation id="2006864819935886708">Pripojiteľnosť</translation>
 <translation id="2008685064673031089">Vyhľadávanie prvočísel</translation>
 <translation id="2011174342667534258">Verzia súpravy SDK:</translation>
diff --git a/chromeos/strings/chromeos_strings_sl.xtb b/chromeos/strings/chromeos_strings_sl.xtb
index 59a1c0a..da4a8046 100644
--- a/chromeos/strings/chromeos_strings_sl.xtb
+++ b/chromeos/strings/chromeos_strings_sl.xtb
@@ -132,6 +132,7 @@
 <translation id="1977994649430373166">Fotografija za profil v Googlu</translation>
 <translation id="1979103255016296513">Rok za spremembo gesla je potekel</translation>
 <translation id="1999615961760456652">Prestrezni portal</translation>
+<translation id="200669432486043882">Zamenjava datoteke</translation>
 <translation id="2006864819935886708">Povezljivost</translation>
 <translation id="2008685064673031089">Začetno iskanje</translation>
 <translation id="2011174342667534258">Različica kompleta za razvoj programske opreme:</translation>
diff --git a/chromeos/strings/chromeos_strings_sq.xtb b/chromeos/strings/chromeos_strings_sq.xtb
index b69b22b..f2771c7b 100644
--- a/chromeos/strings/chromeos_strings_sq.xtb
+++ b/chromeos/strings/chromeos_strings_sq.xtb
@@ -132,6 +132,7 @@
 <translation id="1977994649430373166">Fotografia e profilit në Google</translation>
 <translation id="1979103255016296513">Afati i ndryshimit të fjalëkalimit ka kaluar</translation>
 <translation id="1999615961760456652">Portal izolues</translation>
+<translation id="200669432486043882">Zëvendëso skedarin</translation>
 <translation id="2006864819935886708">Lidhshmëria</translation>
 <translation id="2008685064673031089">Kërkimi kryesor</translation>
 <translation id="2011174342667534258">Versioni i SDK-së:</translation>
diff --git a/chromeos/strings/chromeos_strings_sr-Latn.xtb b/chromeos/strings/chromeos_strings_sr-Latn.xtb
index 91f62de..c0978d1 100644
--- a/chromeos/strings/chromeos_strings_sr-Latn.xtb
+++ b/chromeos/strings/chromeos_strings_sr-Latn.xtb
@@ -133,6 +133,7 @@
 <translation id="1977994649430373166">Slika Google profila</translation>
 <translation id="1979103255016296513">Rok za promenu lozinke je istekao</translation>
 <translation id="1999615961760456652">Ulazni portal</translation>
+<translation id="200669432486043882">Zameni datoteku</translation>
 <translation id="2006864819935886708">Uspostavljanje veze</translation>
 <translation id="2008685064673031089">Primarna pretraga</translation>
 <translation id="2011174342667534258">Verzija paketa za razvoj softvera:</translation>
diff --git a/chromeos/strings/chromeos_strings_sr.xtb b/chromeos/strings/chromeos_strings_sr.xtb
index 3f79203..1748974e 100644
--- a/chromeos/strings/chromeos_strings_sr.xtb
+++ b/chromeos/strings/chromeos_strings_sr.xtb
@@ -133,6 +133,7 @@
 <translation id="1977994649430373166">Слика Google профила</translation>
 <translation id="1979103255016296513">Рок за промену лозинке је истекао</translation>
 <translation id="1999615961760456652">Улазни портал</translation>
+<translation id="200669432486043882">Замени датотеку</translation>
 <translation id="2006864819935886708">Успостављање везе</translation>
 <translation id="2008685064673031089">Примарна претрага</translation>
 <translation id="2011174342667534258">Верзија пакета за развој софтвера:</translation>
diff --git a/chromeos/strings/chromeos_strings_sv.xtb b/chromeos/strings/chromeos_strings_sv.xtb
index d875903..dd504f29 100644
--- a/chromeos/strings/chromeos_strings_sv.xtb
+++ b/chromeos/strings/chromeos_strings_sv.xtb
@@ -133,6 +133,7 @@
 <translation id="1977994649430373166">Profilbild på Google</translation>
 <translation id="1979103255016296513">Tiden för att ändra lösenordet har gått ut</translation>
 <translation id="1999615961760456652">Infångstportal</translation>
+<translation id="200669432486043882">Ersätt fil</translation>
 <translation id="2006864819935886708">Anslutning</translation>
 <translation id="2008685064673031089">Primtalssökning</translation>
 <translation id="2011174342667534258">SDK-version:</translation>
diff --git a/chromeos/strings/chromeos_strings_sw.xtb b/chromeos/strings/chromeos_strings_sw.xtb
index 18bdb41..49b4519 100644
--- a/chromeos/strings/chromeos_strings_sw.xtb
+++ b/chromeos/strings/chromeos_strings_sw.xtb
@@ -132,6 +132,7 @@
 <translation id="1977994649430373166">Picha ya wasifu kwenye Google</translation>
 <translation id="1979103255016296513">Muda wa kubadilisha nenosiri umeisha</translation>
 <translation id="1999615961760456652">Ukurasa wa Mwanzo</translation>
+<translation id="200669432486043882">Badilisha faili</translation>
 <translation id="2006864819935886708">Uunganishaji</translation>
 <translation id="2008685064673031089">Prime search</translation>
 <translation id="2011174342667534258">Toleo la SDK:</translation>
diff --git a/chromeos/strings/chromeos_strings_ta.xtb b/chromeos/strings/chromeos_strings_ta.xtb
index d00d952..099fd06 100644
--- a/chromeos/strings/chromeos_strings_ta.xtb
+++ b/chromeos/strings/chromeos_strings_ta.xtb
@@ -132,6 +132,7 @@
 <translation id="1977994649430373166">Google சுயவிவரப் படம்</translation>
 <translation id="1979103255016296513">கடவுச்சொல்லை மாற்ற வேண்டும்</translation>
 <translation id="1999615961760456652">கேப்டிவ் போர்டல்</translation>
+<translation id="200669432486043882">ஃபைலை இடமாற்று</translation>
 <translation id="2006864819935886708">இணைப்பு</translation>
 <translation id="2008685064673031089">முதன்மைத் தேடல்</translation>
 <translation id="2011174342667534258">SDK பதிப்பு:</translation>
diff --git a/chromeos/strings/chromeos_strings_te.xtb b/chromeos/strings/chromeos_strings_te.xtb
index 808ff1c..6aebd03 100644
--- a/chromeos/strings/chromeos_strings_te.xtb
+++ b/chromeos/strings/chromeos_strings_te.xtb
@@ -118,6 +118,7 @@
 <translation id="1851218745569890714">వీడియో మీటింగ్‌ నిర్వహించడం</translation>
 <translation id="1852934301711881861">ChromeOS Flexను ఇన్‌స్టాల్ చేయండి</translation>
 <translation id="1856388568474281774">కింది వైపు బాణం</translation>
+<translation id="1858620243986915808">స్క్రీన్‌షాట్‌ను అటాచ్ చేయండి</translation>
 <translation id="1871569928317311284">ముదురు రంగు రూపాన్ని ఆఫ్ చేయండి</translation>
 <translation id="1874612839560830905">MTU</translation>
 <translation id="188114911237521550">డార్క్ మోడ్‌ను ఆఫ్ చేయండి</translation>
@@ -132,6 +133,7 @@
 <translation id="1977994649430373166">Google ప్రొఫైల్ ఫోటో</translation>
 <translation id="1979103255016296513">పాస్‌వర్డ్‌ మార్చాల్సిన గడువు ముగిసింది</translation>
 <translation id="1999615961760456652">క్యాప్టివ్ పోర్టల్</translation>
+<translation id="200669432486043882">ఫైల్‌ను భర్తీ చేయి</translation>
 <translation id="2006864819935886708">కనెక్టివిటీ</translation>
 <translation id="2008685064673031089">ప్రైమ్ సెర్చ్</translation>
 <translation id="2011174342667534258">SDK వెర్షన్:</translation>
diff --git a/chromeos/strings/chromeos_strings_th.xtb b/chromeos/strings/chromeos_strings_th.xtb
index 01cd2fc..eb3ba2d 100644
--- a/chromeos/strings/chromeos_strings_th.xtb
+++ b/chromeos/strings/chromeos_strings_th.xtb
@@ -134,6 +134,7 @@
 <translation id="1977994649430373166">รูปโปรไฟล์ Google</translation>
 <translation id="1979103255016296513">เลยเวลาเปลี่ยนรหัสผ่านแล้ว</translation>
 <translation id="1999615961760456652">แคพทีฟพอร์ทัล</translation>
+<translation id="200669432486043882">แทนที่ไฟล์</translation>
 <translation id="2006864819935886708">การเชื่อมต่อ</translation>
 <translation id="2008685064673031089">Prime Search</translation>
 <translation id="2011174342667534258">เวอร์ชันของ SDK:</translation>
diff --git a/chromeos/strings/chromeos_strings_tr.xtb b/chromeos/strings/chromeos_strings_tr.xtb
index e29c49e..39afd45 100644
--- a/chromeos/strings/chromeos_strings_tr.xtb
+++ b/chromeos/strings/chromeos_strings_tr.xtb
@@ -132,6 +132,7 @@
 <translation id="1977994649430373166">Google profil fotoğrafı</translation>
 <translation id="1979103255016296513">Şifre değişikliği zamanı geçti</translation>
 <translation id="1999615961760456652">Giriş Portalı</translation>
+<translation id="200669432486043882">Dosyayı değiştir</translation>
 <translation id="2006864819935886708">Bağlantı</translation>
 <translation id="2008685064673031089">Birincil arama</translation>
 <translation id="2011174342667534258">SDK Sürümü:</translation>
diff --git a/chromeos/strings/chromeos_strings_uk.xtb b/chromeos/strings/chromeos_strings_uk.xtb
index 06f2172f..8b00a8b3 100644
--- a/chromeos/strings/chromeos_strings_uk.xtb
+++ b/chromeos/strings/chromeos_strings_uk.xtb
@@ -132,6 +132,7 @@
 <translation id="1977994649430373166">Фотографія профілю Google</translation>
 <translation id="1979103255016296513">Час для зміни пароля минув</translation>
 <translation id="1999615961760456652">Адаптивний портал</translation>
+<translation id="200669432486043882">Замінити файл</translation>
 <translation id="2006864819935886708">Підключення</translation>
 <translation id="2008685064673031089">Пошук Prime</translation>
 <translation id="2011174342667534258">Версія пакета SDK:</translation>
diff --git a/chromeos/strings/chromeos_strings_ur.xtb b/chromeos/strings/chromeos_strings_ur.xtb
index 2712fd7d..9419ad54 100644
--- a/chromeos/strings/chromeos_strings_ur.xtb
+++ b/chromeos/strings/chromeos_strings_ur.xtb
@@ -132,6 +132,7 @@
 <translation id="1977994649430373166">‏Google پروفائل کی تصویر</translation>
 <translation id="1979103255016296513">پاس ورڈ تبدیل کرنے میں تاخیر ہو گئی ہے</translation>
 <translation id="1999615961760456652">کیپٹو پورٹل</translation>
+<translation id="200669432486043882">فائل تبدیل کریں</translation>
 <translation id="2006864819935886708">کنیکٹویٹی</translation>
 <translation id="2008685064673031089">پرائم تلاش</translation>
 <translation id="2011174342667534258">‏SDK ورژن:</translation>
diff --git a/chromeos/strings/chromeos_strings_uz.xtb b/chromeos/strings/chromeos_strings_uz.xtb
index d38dbba5..867caa19d 100644
--- a/chromeos/strings/chromeos_strings_uz.xtb
+++ b/chromeos/strings/chromeos_strings_uz.xtb
@@ -133,6 +133,7 @@
 <translation id="1977994649430373166">Google profil surati</translation>
 <translation id="1979103255016296513">Parolni almashtirish muddati tugadi</translation>
 <translation id="1999615961760456652">Kirish portali</translation>
+<translation id="200669432486043882">Faylni almashtirish</translation>
 <translation id="2006864819935886708">Ulanish</translation>
 <translation id="2008685064673031089">Oddiy sonlarni qidirish</translation>
 <translation id="2011174342667534258">SDK versiyasi:</translation>
diff --git a/chromeos/strings/chromeos_strings_vi.xtb b/chromeos/strings/chromeos_strings_vi.xtb
index b62fb6c..f2f25c0 100644
--- a/chromeos/strings/chromeos_strings_vi.xtb
+++ b/chromeos/strings/chromeos_strings_vi.xtb
@@ -132,6 +132,7 @@
 <translation id="1977994649430373166">Ảnh hồ sơ trên Google</translation>
 <translation id="1979103255016296513">Đã quá hạn thay đổi mật khẩu</translation>
 <translation id="1999615961760456652">Trang xác thực</translation>
+<translation id="200669432486043882">Thay thế tệp</translation>
 <translation id="2006864819935886708">Kết nối</translation>
 <translation id="2008685064673031089">Tìm kiếm quan trọng</translation>
 <translation id="2011174342667534258">Phiên bản SDK:</translation>
diff --git a/chromeos/strings/chromeos_strings_zh-CN.xtb b/chromeos/strings/chromeos_strings_zh-CN.xtb
index ccd76044..cf27cac 100644
--- a/chromeos/strings/chromeos_strings_zh-CN.xtb
+++ b/chromeos/strings/chromeos_strings_zh-CN.xtb
@@ -132,6 +132,7 @@
 <translation id="1977994649430373166">Google 个人资料照片</translation>
 <translation id="1979103255016296513">密码更改期限已过</translation>
 <translation id="1999615961760456652">强制门户</translation>
+<translation id="200669432486043882">替换文件</translation>
 <translation id="2006864819935886708">连接</translation>
 <translation id="2008685064673031089">高峰搜索</translation>
 <translation id="2011174342667534258">SDK 版本:</translation>
diff --git a/chromeos/strings/chromeos_strings_zh-HK.xtb b/chromeos/strings/chromeos_strings_zh-HK.xtb
index 6466a27d..193305fb 100644
--- a/chromeos/strings/chromeos_strings_zh-HK.xtb
+++ b/chromeos/strings/chromeos_strings_zh-HK.xtb
@@ -133,6 +133,7 @@
 <translation id="1977994649430373166">Google 個人檔案相片</translation>
 <translation id="1979103255016296513">變更密碼已逾期</translation>
 <translation id="1999615961760456652">強制網絡入口</translation>
+<translation id="200669432486043882">取代檔案</translation>
 <translation id="2006864819935886708">連線問題</translation>
 <translation id="2008685064673031089">尖峰搜尋</translation>
 <translation id="2011174342667534258">SDK 版本:</translation>
diff --git a/chromeos/strings/chromeos_strings_zh-TW.xtb b/chromeos/strings/chromeos_strings_zh-TW.xtb
index 71d68a5..e9ea92c 100644
--- a/chromeos/strings/chromeos_strings_zh-TW.xtb
+++ b/chromeos/strings/chromeos_strings_zh-TW.xtb
@@ -133,6 +133,7 @@
 <translation id="1977994649430373166">Google 個人資料相片</translation>
 <translation id="1979103255016296513">已超過密碼變更期限</translation>
 <translation id="1999615961760456652">網頁認證入口</translation>
+<translation id="200669432486043882">取代檔案</translation>
 <translation id="2006864819935886708">連線問題</translation>
 <translation id="2008685064673031089">尖峰搜尋</translation>
 <translation id="2011174342667534258">SDK 版本:</translation>
diff --git a/chromeos/strings/chromeos_strings_zu.xtb b/chromeos/strings/chromeos_strings_zu.xtb
index 5ed202a..7e65870 100644
--- a/chromeos/strings/chromeos_strings_zu.xtb
+++ b/chromeos/strings/chromeos_strings_zu.xtb
@@ -132,6 +132,7 @@
 <translation id="1977994649430373166">Isithombe sephrofayela ye-Google</translation>
 <translation id="1979103255016296513">Ukushintsha iphasiwedi kudlulelwe isikhathi</translation>
 <translation id="1999615961760456652">Iphothali yabathunjiweyo</translation>
+<translation id="200669432486043882">Faka esikhundleni ifayela</translation>
 <translation id="2006864819935886708">Ukuxhumana</translation>
 <translation id="2008685064673031089">Usesho oluphakeme</translation>
 <translation id="2011174342667534258">Uhlobo lwe-SDK:</translation>
diff --git a/chromeos/ui/frame/caption_buttons/snap_controller.h b/chromeos/ui/frame/caption_buttons/snap_controller.h
index c7ad9fc..dcee6e7 100644
--- a/chromeos/ui/frame/caption_buttons/snap_controller.h
+++ b/chromeos/ui/frame/caption_buttons/snap_controller.h
@@ -28,6 +28,12 @@
                // top and secondary position is the bottom.
 };
 
+enum class SnapRatio {
+  kDefaultSnapRatio,   // 0.5f
+  kOneThirdSnapRatio,  // 0.33f
+  kTwoThirdSnapRatio   // 0.67f
+};
+
 // This interface handles snap actions to be performed on a top level window.
 // The singleton that implements the interface is provided by Ash.
 class COMPONENT_EXPORT(CHROMEOS_UI_FRAME) SnapController {
@@ -47,7 +53,10 @@
 
   // Snaps the window in the given direction, if not kNone. Destroys the preview
   // window, if any.
-  virtual void CommitSnap(aura::Window* window, SnapDirection snap) = 0;
+  virtual void CommitSnap(
+      aura::Window* window,
+      SnapDirection snap,
+      SnapRatio snap_ratio = SnapRatio::kDefaultSnapRatio) = 0;
 
  protected:
   SnapController();
diff --git a/chromeos/ui/frame/multitask_menu/multitask_menu.cc b/chromeos/ui/frame/multitask_menu/multitask_menu.cc
index d2d17ef..fcba573 100644
--- a/chromeos/ui/frame/multitask_menu/multitask_menu.cc
+++ b/chromeos/ui/frame/multitask_menu/multitask_menu.cc
@@ -132,7 +132,8 @@
 }
 
 void MultitaskMenu::PartialButtonPressed(SnapDirection snap) {
-  // TODO(shidi/sophiewen): Link Partial Split function here.
+  SnapController::Get()->CommitSnap(parent_window(), snap,
+                                    chromeos::SnapRatio::kTwoThirdSnapRatio);
   HideBubble();
 }
 
diff --git a/components/BUILD.gn b/components/BUILD.gn
index 0956911..d0283bd1 100644
--- a/components/BUILD.gn
+++ b/components/BUILD.gn
@@ -193,6 +193,7 @@
     "//components/reputation/core:unit_tests",
     "//components/safe_browsing/core/browser:safe_browsing_metrics_collector_unittest",
     "//components/safe_search_api:unit_tests",
+    "//components/saved_tab_groups:unit_tests",
     "//components/scheduling_metrics:unit_tests",
     "//components/search:unit_tests",
     "//components/search_engines:unit_tests",
diff --git a/components/android_autofill/browser/java/src/org/chromium/components/autofill/AutofillActionModeCallback.java b/components/android_autofill/browser/java/src/org/chromium/components/autofill/AutofillActionModeCallback.java
index 6921fca..c3b51e5 100644
--- a/components/android_autofill/browser/java/src/org/chromium/components/autofill/AutofillActionModeCallback.java
+++ b/components/android_autofill/browser/java/src/org/chromium/components/autofill/AutofillActionModeCallback.java
@@ -19,6 +19,8 @@
     private final int mAutofillMenuItemTitle;
     private final int mAutofillMenuItem;
 
+    // using getIdentifier to work around not-exposed framework resource ID
+    @SuppressWarnings("DiscouragedApi")
     public AutofillActionModeCallback(Context context, AutofillProvider autofillProvider) {
         mContext = context;
         mAutofillProvider = autofillProvider;
diff --git a/components/autofill/core/browser/BUILD.gn b/components/autofill/core/browser/BUILD.gn
index 2f2ed19..6c1e879 100644
--- a/components/autofill/core/browser/BUILD.gn
+++ b/components/autofill/core/browser/BUILD.gn
@@ -188,6 +188,8 @@
     "form_parsing/field_candidates.h",
     "form_parsing/form_field.cc",
     "form_parsing/form_field.h",
+    "form_parsing/iban_field.cc",
+    "form_parsing/iban_field.h",
     "form_parsing/merchant_promo_code_field.cc",
     "form_parsing/merchant_promo_code_field.h",
     "form_parsing/name_field.cc",
@@ -817,6 +819,7 @@
     "form_parsing/credit_card_field_unittest.cc",
     "form_parsing/field_candidates_unittest.cc",
     "form_parsing/form_field_unittest.cc",
+    "form_parsing/iban_field_unittest.cc",
     "form_parsing/merchant_promo_code_field_unittest.cc",
     "form_parsing/name_field_unittest.cc",
     "form_parsing/parsing_test_utils.cc",
diff --git a/components/autofill/core/browser/autofill_regex_constants.cc b/components/autofill/core/browser/autofill_regex_constants.cc
index b09c8608..62db1f71 100644
--- a/components/autofill/core/browser/autofill_regex_constants.cc
+++ b/components/autofill/core/browser/autofill_regex_constants.cc
@@ -576,7 +576,7 @@
     u"yesbankltd"
     u")$";
 
-const char16_t kInternationalBankAccountNumberRe[] =
+const char16_t kInternationalBankAccountNumberValueRe[] =
     u"^[a-zA-Z]{2}[0-9]{2}[a-zA-Z0-9]{4}[0-9]{7}([a-zA-Z0-9]?){0,16}$";
 
 // Matches all 3 and 4 digit numbers.
@@ -616,4 +616,10 @@
 const char16_t kPhoneValueRe[] = u"^[0-9()+-]{6,25}$";
 const char16_t kUsernameLikeValueRe[] = u"[A-Za-z0-9_\\-.]{7,30}";
 
+/////////////////////////////////////////////////////////////////////////////
+// iban_field.cc
+/////////////////////////////////////////////////////////////////////////////
+const char16_t kIbanRe[] =
+    u"(\\biban(\\b|_)|international bank account number)";
+
 }  // namespace autofill
diff --git a/components/autofill/core/browser/autofill_regex_constants.h b/components/autofill/core/browser/autofill_regex_constants.h
index 639a768..8458a20 100644
--- a/components/autofill/core/browser/autofill_regex_constants.h
+++ b/components/autofill/core/browser/autofill_regex_constants.h
@@ -81,18 +81,22 @@
 extern const char16_t kPhoneValueRe[];
 extern const char16_t kUsernameLikeValueRe[];
 
+// Used to match the HTML name and label for International Bank Account Number
+// (IBAN).
+extern const char16_t kIbanRe[];
+
 // Used to match field data that might be a UPI Virtual Payment Address.
 // See:
 //   - http://crbug.com/702220
 //   - https://upipayments.co.in/virtual-payment-address-vpa/
 extern const char16_t kUPIVirtualPaymentAddressRe[];
 
-// Used to match field data that might be an International Bank Account Number.
+// Used to match field value that might be an International Bank Account Number.
 // TODO(crbug.com/977377): The regex doesn't match IBANs for Saint Lucia (LC),
 // Kazakhstan (KZ) and Romania (RO). Consider replace the regex with something
 // like "(?:IT|SM)\d{2}[A-Z]\d{22}|CY\d{2}[A-Z]\d{23}...". For reference:
 //    - https://www.swift.com/resource/iban-registry-pdf
-extern const char16_t kInternationalBankAccountNumberRe[];
+extern const char16_t kInternationalBankAccountNumberValueRe[];
 
 // Match the path values for form actions that look like generic search:
 //  e.g. /search
diff --git a/components/autofill/core/browser/field_types.cc b/components/autofill/core/browser/field_types.cc
index 20ee50f8e..b480089 100644
--- a/components/autofill/core/browser/field_types.cc
+++ b/components/autofill/core/browser/field_types.cc
@@ -101,9 +101,8 @@
     case UPI_VPA:
       return base::FeatureList::IsEnabled(features::kAutofillSaveAndFillVPA);
 
-    // TODO(crbug/1335549) to return true when the flag is enabled.
     case IBAN_VALUE:
-      return false;
+      return base::FeatureList::IsEnabled(features::kAutofillParseIbanFields);
 
     case COMPANY_NAME:
       return true;
diff --git a/components/autofill/core/browser/field_types.h b/components/autofill/core/browser/field_types.h
index b68b3ef..ecdfd82 100644
--- a/components/autofill/core/browser/field_types.h
+++ b/components/autofill/core/browser/field_types.h
@@ -238,7 +238,9 @@
   PHONE_HOME_NUMBER_PREFIX = 123,
   PHONE_HOME_NUMBER_SUFFIX = 124,
 
-  // IBAN data.
+  // International Bank Account Number (IBAN) details are usually entered on
+  // banking and merchant websites used to make international transactions.
+  // See [ https://en.wikipedia.org/wiki/International_Bank_Account_Number ].
   IBAN_VALUE = 125,
   // No new types can be added without a corresponding change to the Autofill
   // server.
diff --git a/components/autofill/core/browser/form_parsing/form_field.cc b/components/autofill/core/browser/form_parsing/form_field.cc
index 903b72c..07f20fa5c 100644
--- a/components/autofill/core/browser/form_parsing/form_field.cc
+++ b/components/autofill/core/browser/form_parsing/form_field.cc
@@ -25,6 +25,7 @@
 #include "components/autofill/core/browser/form_parsing/birthdate_field.h"
 #include "components/autofill/core/browser/form_parsing/credit_card_field.h"
 #include "components/autofill/core/browser/form_parsing/email_field.h"
+#include "components/autofill/core/browser/form_parsing/iban_field.h"
 #include "components/autofill/core/browser/form_parsing/merchant_promo_code_field.h"
 #include "components/autofill/core/browser/form_parsing/name_field.h"
 #include "components/autofill/core/browser/form_parsing/phone_field.h"
@@ -182,6 +183,12 @@
                         field_candidates, page_language, pattern_source,
                         log_manager);
   }
+
+  // IBAN pass.
+  if (base::FeatureList::IsEnabled(features::kAutofillParseIbanFields)) {
+    ParseFormFieldsPass(IbanField::Parse, processed_fields, field_candidates,
+                        page_language, pattern_source, log_manager);
+  }
 }
 
 // static
@@ -490,7 +497,7 @@
 
 // static
 bool FormField::IsSingleFieldParseableType(ServerFieldType field_type) {
-  return field_type == MERCHANT_PROMO_CODE;
+  return (field_type == MERCHANT_PROMO_CODE || field_type == IBAN_VALUE);
 }
 
 }  // namespace autofill
diff --git a/components/autofill/core/browser/form_parsing/form_field.h b/components/autofill/core/browser/form_parsing/form_field.h
index fcd90f4..2985d65 100644
--- a/components/autofill/core/browser/form_parsing/form_field.h
+++ b/components/autofill/core/browser/form_parsing/form_field.h
@@ -92,13 +92,14 @@
   // Initial values assigned to FieldCandidates by their corresponding parsers.
   // There's an implicit precedence determined by the values assigned here.
   // Email is currently the most important followed by Phone, Travel, Address,
-  // Birthdate, Credit Card, Price, Name, Merchant promo code, and Search.
+  // Birthdate, Credit Card, IBAN, Price, Name, Merchant promo code, and Search.
   static constexpr float kBaseEmailParserScore = 1.4f;
   static constexpr float kBasePhoneParserScore = 1.3f;
   static constexpr float kBaseTravelParserScore = 1.2f;
   static constexpr float kBaseAddressParserScore = 1.1f;
   static constexpr float kBaseBirthdateParserScore = 1.05f;
   static constexpr float kBaseCreditCardParserScore = 1.0f;
+  static constexpr float kBaseIbanParserScore = 0.975f;
   static constexpr float kBasePriceParserScore = 0.95f;
   static constexpr float kBaseNameParserScore = 0.9f;
   static constexpr float kBaseMerchantPromoCodeParserScore = 0.85f;
diff --git a/components/autofill/core/browser/form_parsing/form_field_unittest.cc b/components/autofill/core/browser/form_parsing/form_field_unittest.cc
index 3c5e8e45..785d809 100644
--- a/components/autofill/core/browser/form_parsing/form_field_unittest.cc
+++ b/components/autofill/core/browser/form_parsing/form_field_unittest.cc
@@ -196,7 +196,7 @@
 }
 
 // Test that `ParseSingleFieldForms` parses single field promo codes.
-TEST_P(FormFieldTest, ParseSingleFieldFormsPromoCode) {
+TEST_P(FormFieldTest, ParseFormFieldsForSingleFieldPromoCode) {
   base::test::ScopedFeatureList scoped_feature;
   scoped_feature.InitAndEnableFeature(
       features::kAutofillParseMerchantPromoCodeFields);
@@ -214,6 +214,24 @@
   TestClassificationExpectations();
 }
 
+// Test that `ParseSingleFieldForms` parses single field IBAN.
+TEST_P(FormFieldTest, ParseFormFieldsForSingleFieldIban) {
+  base::test::ScopedFeatureList scoped_feature;
+  scoped_feature.InitAndEnableFeature(features::kAutofillParseIbanFields);
+
+  // Parse single field IBAN.
+  AddTextFormFieldData("", "IBAN", IBAN_VALUE);
+  EXPECT_EQ(1, ParseSingleFieldForms());
+  TestClassificationExpectations();
+
+  // Don't parse other fields.
+  // UNKNOWN_TYPE is used as the expected type, which prevents it from being
+  // part of the expectations in `TestClassificationExpectations()`.
+  AddTextFormFieldData("", "Address line 1", UNKNOWN_TYPE);
+  EXPECT_EQ(1, ParseSingleFieldForms());
+  TestClassificationExpectations();
+}
+
 struct ParseInAnyOrderTestcase {
   // An nxn matrix, describing that field i is matched by parser j.
   std::vector<std::vector<bool>> field_matches_parser;
diff --git a/components/autofill/core/browser/form_parsing/iban_field.cc b/components/autofill/core/browser/form_parsing/iban_field.cc
new file mode 100644
index 0000000..510b5aa
--- /dev/null
+++ b/components/autofill/core/browser/form_parsing/iban_field.cc
@@ -0,0 +1,43 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/autofill/core/browser/form_parsing/iban_field.h"
+
+#include "components/autofill/core/browser/autofill_field.h"
+#include "components/autofill/core/browser/autofill_regex_constants.h"
+#include "components/autofill/core/browser/form_parsing/autofill_scanner.h"
+#include "components/autofill/core/common/autofill_payments_features.h"
+
+namespace autofill {
+
+// static
+std::unique_ptr<FormField> IbanField::Parse(AutofillScanner* scanner,
+                                            const LanguageCode& page_language,
+                                            PatternSource pattern_source,
+                                            LogManager* log_manager) {
+  if (!base::FeatureList::IsEnabled(features::kAutofillParseIbanFields)) {
+    return nullptr;
+  }
+
+  AutofillField* field;
+  base::span<const MatchPatternRef> iban_patterns =
+      GetMatchPatterns("IBAN", page_language, pattern_source);
+
+  if (ParseFieldSpecifics(scanner, kIbanRe,
+                          kDefaultMatchParamsWith<MatchFieldType::kNumber,
+                                                  MatchFieldType::kTextArea>,
+                          iban_patterns, &field, {log_manager, "kIbanRe"})) {
+    return std::make_unique<IbanField>(field);
+  }
+
+  return nullptr;
+}
+
+IbanField::IbanField(const AutofillField* field) : field_(field) {}
+
+void IbanField::AddClassifications(FieldCandidatesMap* field_candidates) const {
+  AddClassification(field_, IBAN_VALUE, kBaseIbanParserScore, field_candidates);
+}
+
+}  // namespace autofill
diff --git a/components/autofill/core/browser/form_parsing/iban_field.h b/components/autofill/core/browser/form_parsing/iban_field.h
new file mode 100644
index 0000000..9719230
--- /dev/null
+++ b/components/autofill/core/browser/form_parsing/iban_field.h
@@ -0,0 +1,41 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_FORM_PARSING_IBAN_FIELD_H_
+#define COMPONENTS_AUTOFILL_CORE_BROWSER_FORM_PARSING_IBAN_FIELD_H_
+
+#include <memory>
+
+#include "base/memory/raw_ptr.h"
+#include "components/autofill/core/browser/form_parsing/form_field.h"
+#include "components/autofill/core/common/language_code.h"
+
+namespace autofill {
+
+class AutofillField;
+class AutofillScanner;
+class LogManager;
+
+// A form field that accepts International Bank Account Number (IBAN).
+class IbanField : public FormField {
+ public:
+  static std::unique_ptr<FormField> Parse(AutofillScanner* scanner,
+                                          const LanguageCode& page_language,
+                                          PatternSource pattern_source,
+                                          LogManager* log_manager);
+  explicit IbanField(const AutofillField* field);
+
+  IbanField(const IbanField&) = delete;
+  IbanField& operator=(const IbanField&) = delete;
+
+ protected:
+  void AddClassifications(FieldCandidatesMap* field_candidates) const override;
+
+ private:
+  raw_ptr<const AutofillField> field_;
+};
+
+}  // namespace autofill
+
+#endif  // COMPONENTS_AUTOFILL_CORE_BROWSER_FORM_PARSING_IBAN_FIELD_H_
diff --git a/components/autofill/core/browser/form_parsing/iban_field_unittest.cc b/components/autofill/core/browser/form_parsing/iban_field_unittest.cc
new file mode 100644
index 0000000..cc1bb87
--- /dev/null
+++ b/components/autofill/core/browser/form_parsing/iban_field_unittest.cc
@@ -0,0 +1,70 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/autofill/core/browser/form_parsing/iban_field.h"
+
+#include "base/test/scoped_feature_list.h"
+#include "components/autofill/core/browser/form_parsing/parsing_test_utils.h"
+#include "components/autofill/core/common/autofill_payments_features.h"
+
+namespace autofill {
+
+class IbanFieldTest
+    : public FormFieldTestBase,
+      public testing::TestWithParam<PatternProviderFeatureState> {
+ public:
+  IbanFieldTest() : FormFieldTestBase(GetParam()) {}
+  IbanFieldTest(const IbanFieldTest&) = delete;
+  IbanFieldTest& operator=(const IbanFieldTest&) = delete;
+
+  void SetUp() override {
+    scoped_feature_list_.InitAndEnableFeature(
+        features::kAutofillParseIbanFields);
+  }
+
+ protected:
+  std::unique_ptr<FormField> Parse(
+      AutofillScanner* scanner,
+      const LanguageCode& page_language = LanguageCode("en")) override {
+    return IbanField::Parse(scanner, page_language, GetActivePatternSource(),
+                            /*log_manager=*/nullptr);
+  }
+
+  base::test::ScopedFeatureList scoped_feature_list_;
+};
+
+INSTANTIATE_TEST_SUITE_P(
+    IbanFieldTest,
+    IbanFieldTest,
+    ::testing::ValuesIn(PatternProviderFeatureState::All()));
+
+// Match IBAN
+TEST_P(IbanFieldTest, ParseIban) {
+  AddTextFormFieldData("iban-field", "Enter account number", IBAN_VALUE);
+
+  ClassifyAndVerify(ParseResult::PARSED);
+}
+
+// Match IBAN on banks
+TEST_P(IbanFieldTest, ParseIbanBanks) {
+  AddTextFormFieldData("accountNumber", "IBAN*", IBAN_VALUE);
+
+  ClassifyAndVerify(ParseResult::PARSED);
+}
+
+TEST_P(IbanFieldTest, ParseNonIban) {
+  AddTextFormFieldData("other-field", "Field for Account Number", UNKNOWN_TYPE);
+
+  ClassifyAndVerify(ParseResult::NOT_PARSED);
+}
+
+TEST_P(IbanFieldTest, ParseIbanFlagOff) {
+  base::test::ScopedFeatureList scoped_feature_list;
+  scoped_feature_list.InitAndDisableFeature(features::kAutofillParseIbanFields);
+  AddTextFormFieldData("iban-field", "Enter IBAN here", IBAN_VALUE);
+
+  ClassifyAndVerify(ParseResult::NOT_PARSED);
+}
+
+}  // namespace autofill
diff --git a/components/autofill/core/browser/form_parsing/resources/legacy_regex_patterns.json b/components/autofill/core/browser/form_parsing/resources/legacy_regex_patterns.json
index a4217b5a..8f1d4068 100644
--- a/components/autofill/core/browser/form_parsing/resources/legacy_regex_patterns.json
+++ b/components/autofill/core/browser/form_parsing/resources/legacy_regex_patterns.json
@@ -3315,5 +3315,17 @@
         "match_field_input_types": [0]
       }
     ]
+  },
+    "IBAN": {
+    "en": [
+      {
+        "pattern_identifier": "en_iban_preserving",
+        "positive_pattern": "(\\biban(\\b|_)|international bank account number)",
+        "positive_score": 0.975,
+        "negative_pattern": null,
+        "match_field_attributes": [0, 1],
+        "match_field_input_types": [0]
+      }
+    ]
   }
 }
diff --git a/components/autofill/core/browser/validation.cc b/components/autofill/core/browser/validation.cc
index 7477247b..a0dce14 100644
--- a/components/autofill/core/browser/validation.cc
+++ b/components/autofill/core/browser/validation.cc
@@ -350,7 +350,7 @@
   std::u16string no_spaces;
   base::RemoveChars(value, u" ", &no_spaces);
   return MatchesPatternInMainThread(no_spaces,
-                                    kInternationalBankAccountNumberRe);
+                                    kInternationalBankAccountNumberValueRe);
 }
 
 bool IsPlausibleCreditCardCVCNumber(const std::u16string& value) {
diff --git a/components/autofill_assistant/android/java/src/org/chromium/components/autofill_assistant/generic_ui/AssistantColor.java b/components/autofill_assistant/android/java/src/org/chromium/components/autofill_assistant/generic_ui/AssistantColor.java
index 0bb2c31..5fa39bc 100644
--- a/components/autofill_assistant/android/java/src/org/chromium/components/autofill_assistant/generic_ui/AssistantColor.java
+++ b/components/autofill_assistant/android/java/src/org/chromium/components/autofill_assistant/generic_ui/AssistantColor.java
@@ -33,6 +33,7 @@
     }
 
     @CalledByNative
+    @SuppressWarnings("DiscouragedApi")
     public static boolean isValidResourceIdentifier(Context context, String resourceIdentifier) {
         int colorId = context.getResources().getIdentifier(
                 resourceIdentifier, "color", context.getPackageName());
@@ -64,6 +65,7 @@
     @Nullable
     @ColorInt
     @CalledByNative
+    @SuppressWarnings("DiscouragedApi")
     public static Integer createFromResource(Context context, String resourceIdentifier) {
         int colorId = context.getResources().getIdentifier(
                 resourceIdentifier, "color", context.getPackageName());
diff --git a/components/autofill_assistant/android/java/src/org/chromium/components/autofill_assistant/generic_ui/AssistantDrawable.java b/components/autofill_assistant/android/java/src/org/chromium/components/autofill_assistant/generic_ui/AssistantDrawable.java
index 775713f..74d7e2e 100644
--- a/components/autofill_assistant/android/java/src/org/chromium/components/autofill_assistant/generic_ui/AssistantDrawable.java
+++ b/components/autofill_assistant/android/java/src/org/chromium/components/autofill_assistant/generic_ui/AssistantDrawable.java
@@ -57,6 +57,7 @@
 
     /** Returns whether {@code resourceId} is a valid resource identifier. */
     @CalledByNative
+    @SuppressWarnings("DiscouragedApi")
     public static boolean isValidDrawableResource(Context context, String resourceId) {
         int drawableId = context.getResources().getIdentifier(
                 resourceId, "drawable", context.getPackageName());
@@ -167,6 +168,7 @@
         }
 
         @Override
+        @SuppressWarnings("DiscouragedApi")
         public void getDrawable(Context context, Callback<Drawable> callback) {
             int drawableId = context.getResources().getIdentifier(
                     mResourceId, "drawable", context.getPackageName());
diff --git a/components/autofill_assistant/guided_browsing/android/java/src/org/chromium/components/autofill_assistant/guided_browsing/qr_code/permission/AssistantQrCodePermissionView.java b/components/autofill_assistant/guided_browsing/android/java/src/org/chromium/components/autofill_assistant/guided_browsing/qr_code/permission/AssistantQrCodePermissionView.java
index 0c3fd926..b707243c 100644
--- a/components/autofill_assistant/guided_browsing/android/java/src/org/chromium/components/autofill_assistant/guided_browsing/qr_code/permission/AssistantQrCodePermissionView.java
+++ b/components/autofill_assistant/guided_browsing/android/java/src/org/chromium/components/autofill_assistant/guided_browsing/qr_code/permission/AssistantQrCodePermissionView.java
@@ -42,6 +42,7 @@
     /**
      * The AssistantQrCodePermissionView constructor.
      */
+    @SuppressWarnings("DiscouragedApi")
     public AssistantQrCodePermissionView(Context context, AssistantQrCodePermissionType permission,
             AssistantQrCodePermissionView.Delegate delegate,
             AssistantQrCodePermissionCallback permissionCallback) {
diff --git a/components/browser_ui/strings/android/browser_ui_strings.grd b/components/browser_ui/strings/android/browser_ui_strings.grd
index aaea654..6182dfd7 100644
--- a/components/browser_ui/strings/android/browser_ui_strings.grd
+++ b/components/browser_ui/strings/android/browser_ui_strings.grd
@@ -946,6 +946,12 @@
       <message name="IDS_SEARCH_RESUMPTION_MODULE_TITLE" desc="Title of the search resumption module on NTP or Start surface.">
         Suggested searches based on your last tab
       </message>
+      <message name="IDS_SEARCH_RESUMPTION_MODULE_TITLE_SHORT" desc="Title of the search resumption module on NTP or Start surface (short version).">
+        Suggested searches
+      </message>
+      <message name="IDS_SEARCH_RESUMPTION_MODULE_SUBTITLE" desc="Subtitle of the search resumption module on NTP or Start surface.">
+        Based on your last tab
+      </message>
     </messages>
   </release>
 </grit>
diff --git a/components/browser_ui/strings/android/browser_ui_strings_grd/IDS_SEARCH_RESUMPTION_MODULE_SUBTITLE.png.sha1 b/components/browser_ui/strings/android/browser_ui_strings_grd/IDS_SEARCH_RESUMPTION_MODULE_SUBTITLE.png.sha1
new file mode 100644
index 0000000..404912e
--- /dev/null
+++ b/components/browser_ui/strings/android/browser_ui_strings_grd/IDS_SEARCH_RESUMPTION_MODULE_SUBTITLE.png.sha1
@@ -0,0 +1 @@
+0d7c695cfeb55049dda42a15f3f0e3da5c6edc56
\ No newline at end of file
diff --git a/components/browser_ui/strings/android/browser_ui_strings_grd/IDS_SEARCH_RESUMPTION_MODULE_TITLE_SHORT.png.sha1 b/components/browser_ui/strings/android/browser_ui_strings_grd/IDS_SEARCH_RESUMPTION_MODULE_TITLE_SHORT.png.sha1
new file mode 100644
index 0000000..404912e
--- /dev/null
+++ b/components/browser_ui/strings/android/browser_ui_strings_grd/IDS_SEARCH_RESUMPTION_MODULE_TITLE_SHORT.png.sha1
@@ -0,0 +1 @@
+0d7c695cfeb55049dda42a15f3f0e3da5c6edc56
\ No newline at end of file
diff --git a/components/cronet/android/api/src/org/chromium/net/CronetProvider.java b/components/cronet/android/api/src/org/chromium/net/CronetProvider.java
index c302e64..37a0512 100644
--- a/components/cronet/android/api/src/org/chromium/net/CronetProvider.java
+++ b/components/cronet/android/api/src/org/chromium/net/CronetProvider.java
@@ -215,6 +215,8 @@
      *         {@link #RES_KEY_CRONET_IMPL_CLASS} key.
      * @throws RuntimeException if the provider cannot be found or instantiated.
      */
+    // looking up resources from other apps requires the use of getIdentifier()
+    @SuppressWarnings("DiscouragedApi")
     private static boolean addCronetProviderFromResourceFile(
             Context context, Set<CronetProvider> providers) {
         int resId = context.getResources().getIdentifier(
diff --git a/components/cronet/android/test/smoketests/src/org/chromium/net/smoke/CronetSmokeTestRule.java b/components/cronet/android/test/smoketests/src/org/chromium/net/smoke/CronetSmokeTestRule.java
index a00ada0d..9fe4441f 100644
--- a/components/cronet/android/test/smoketests/src/org/chromium/net/smoke/CronetSmokeTestRule.java
+++ b/components/cronet/android/test/smoketests/src/org/chromium/net/smoke/CronetSmokeTestRule.java
@@ -107,6 +107,7 @@
      *
      * @throws Exception if the class cannot be instantiated.
      */
+    @SuppressWarnings("DiscouragedApi")
     private void initTestSupport() throws Exception {
         Context ctx = InstrumentationRegistry.getTargetContext();
         String packageName = ctx.getPackageName();
diff --git a/components/external_intents/android/java/src/org/chromium/components/external_intents/ExternalNavigationHandler.java b/components/external_intents/android/java/src/org/chromium/components/external_intents/ExternalNavigationHandler.java
index d31a731b..3356643 100644
--- a/components/external_intents/android/java/src/org/chromium/components/external_intents/ExternalNavigationHandler.java
+++ b/components/external_intents/android/java/src/org/chromium/components/external_intents/ExternalNavigationHandler.java
@@ -2133,7 +2133,8 @@
         return OverrideUrlLoadingResult.forExternalIntent();
     }
 
-    @SuppressWarnings("UseCompatLoadingForDrawables")
+    // looking up resources from other apps requires the use of getIdentifier()
+    @SuppressWarnings({"UseCompatLoadingForDrawables", "DiscouragedApi"})
     private OverrideUrlLoadingResult startActivityWithChooser(final Intent intent,
             QueryIntentActivitiesSupplier resolvingInfos, ResolveActivitySupplier resolveActivity,
             GURL browserFallbackUrl, GURL intentDataUrl, GURL referrerUrl, Context context,
diff --git a/components/history/core/browser/sync/visit_id_remapper.cc b/components/history/core/browser/sync/visit_id_remapper.cc
index 2aa7814..d79afae 100644
--- a/components/history/core/browser/sync/visit_id_remapper.cc
+++ b/components/history/core/browser/sync/visit_id_remapper.cc
@@ -30,51 +30,57 @@
   if (originator_visit_id == 0) {
     return;
   }
-  visits_by_originator_id_[originator_cache_guid][originator_visit_id] = {
-      local_visit_id, originator_referring_visit_id,
-      originator_opener_visit_id};
+  visits_[originator_cache_guid].emplace_back(
+      originator_visit_id,
+      VisitInfo{local_visit_id, originator_referring_visit_id,
+                originator_opener_visit_id});
 }
 
 void VisitIDRemapper::RemapIDs() {
   // For each originator:
-  for (const auto& [originator_cache_guid, originator_visit_id_to_visit] :
-       visits_by_originator_id_) {
+  for (auto& [originator_cache_guid, originator_visit_ids_and_visits] :
+       visits_) {
+    // Build a lookup table of this originator's visits, indexed by originator
+    // visit ID. (Thankfully, they're already stored in the right format to
+    // create a flat_map in-place!)
+    base::flat_map<VisitID, VisitInfo> visits_by_originator_id(
+        std::move(originator_visit_ids_and_visits));
     // For each visit from this originator:
-    for (const auto& [originator_visit_id, visit] :
-         originator_visit_id_to_visit) {
+    for (const auto& [originator_visit_id, visit] : visits_by_originator_id) {
       // Find the local referrer/opener IDs (if any).
-      VisitID local_referrer_id = FindLocalVisitID(
-          originator_cache_guid, visit.originator_referring_visit_id);
-      VisitID local_opener_id = FindLocalVisitID(
-          originator_cache_guid, visit.originator_opener_visit_id);
+      VisitID local_referrer_id =
+          FindLocalVisitID(originator_cache_guid, visits_by_originator_id,
+                           visit.originator_referring_visit_id);
+      VisitID local_opener_id =
+          FindLocalVisitID(originator_cache_guid, visits_by_originator_id,
+                           visit.originator_opener_visit_id);
       // If either of the local IDs were found, write them to the DB.
       if (local_referrer_id != 0 || local_opener_id != 0) {
         history_backend_->UpdateVisitReferrerOpenerIDs(
             visit.local_visit_id, local_referrer_id, local_opener_id);
       }
-      // TODO(crbug.com/1335055): Also do the remapping the other way around -
-      // remap existing visits' originator_referring|opener_visit_ids if they
-      // refer to the newly-added visit.
+      // Note: Theoretically, the remapping might need to be done the other way
+      // around too - an existing visit's originator_referring|opener_visit_id
+      // might link to the just-added visit. In practice, that should be
+      // extremely rare though, so don't bother addressing that case here. (See
+      // also History.ForeignVisits* histograms.)
     }
   }
+  // Data has been moved out of `visits_`, so clear it just for consistency.
+  visits_.clear();
 }
 
 VisitID VisitIDRemapper::FindLocalVisitID(
     const std::string& originator_cache_guid,
+    const base::flat_map<VisitID, VisitInfo>& visits_by_originator_id,
     VisitID originator_visit_id) {
   if (originator_visit_id == 0) {
     return 0;
   }
 
-  // Get all the in-memory visits for this originator.
-  auto originator_it = visits_by_originator_id_.find(originator_cache_guid);
-  DCHECK(originator_it != visits_by_originator_id_.end());
-
-  std::map<VisitID, VisitInfo> originator_visits = originator_it->second;
-
   // Try to find the matching visit in the in-memory cache.
-  auto it = originator_visits.find(originator_visit_id);
-  if (it != originator_visits.end()) {
+  auto it = visits_by_originator_id.find(originator_visit_id);
+  if (it != visits_by_originator_id.end()) {
     // Found it!
     const VisitInfo& visit = it->second;
     return visit.local_visit_id;
diff --git a/components/history/core/browser/sync/visit_id_remapper.h b/components/history/core/browser/sync/visit_id_remapper.h
index 1fff302..ff661c5 100644
--- a/components/history/core/browser/sync/visit_id_remapper.h
+++ b/components/history/core/browser/sync/visit_id_remapper.h
@@ -8,6 +8,7 @@
 #include <map>
 #include <string>
 
+#include "base/containers/flat_map.h"
 #include "components/history/core/browser/history_types.h"
 
 namespace history {
@@ -52,16 +53,16 @@
     VisitID originator_opener_visit_id;
   };
 
-  VisitID FindLocalVisitID(const std::string& originator_cache_guid,
-                           VisitID originator_visit_id);
+  VisitID FindLocalVisitID(
+      const std::string& originator_cache_guid,
+      const base::flat_map<VisitID, VisitInfo>& visits_by_originator_id,
+      VisitID originator_visit_id);
 
   const raw_ptr<HistoryBackendForSync> history_backend_;
 
-  // All of the visits with to-be-remapped IDs, indexed first by originator
-  // cache guid, then originator visit ID.
-  // TODO(crbug.com/1335055): Consider whether using flat_maps would be more
-  // efficient.
-  std::map<std::string, std::map<VisitID, VisitInfo>> visits_by_originator_id_;
+  // All of the visits with to-be-remapped IDs, indexed by originator cache
+  // guid, and paired with their originator visit ID.
+  std::map<std::string, std::vector<std::pair<VisitID, VisitInfo>>> visits_;
 };
 
 }  // namespace history
diff --git a/components/payments/content/autofill_payment_app.cc b/components/payments/content/autofill_payment_app.cc
index debf5ed..49beae9f 100644
--- a/components/payments/content/autofill_payment_app.cc
+++ b/components/payments/content/autofill_payment_app.cc
@@ -213,10 +213,10 @@
   DCHECK(!is_waiting_for_card_unmask_);
 
   if (delegate_) {
-    base::Value response_value =
+    base::Value::Dict response_value =
         payments::data_util::GetBasicCardResponseFromAutofillCreditCard(
             credit_card_, cvc_, billing_address_, app_locale_)
-            ->ToValue();
+            ->ToValueDict();
     std::string stringified_details;
     base::JSONWriter::Write(response_value, &stringified_details);
     delegate_->OnInstrumentDetailsReady(method_name_, stringified_details,
diff --git a/components/payments/core/basic_card_response.cc b/components/payments/core/basic_card_response.cc
index 083fddf2..84ff012 100644
--- a/components/payments/core/basic_card_response.cc
+++ b/components/payments/core/basic_card_response.cc
@@ -39,14 +39,14 @@
   return !(*this == other);
 }
 
-base::Value BasicCardResponse::ToValue() const {
-  base::Value result(base::Value::Type::DICTIONARY);
-  result.SetStringKey(kCardCardholderName, cardholder_name);
-  result.SetStringKey(kCardCardNumber, card_number);
-  result.SetStringKey(kCardExpiryMonth, expiry_month);
-  result.SetStringKey(kCardExpiryYear, expiry_year);
-  result.SetStringKey(kCardCardSecurityCode, card_security_code);
-  result.SetKey(kCardBillingAddress, PaymentAddressToValue(*billing_address));
+base::Value::Dict BasicCardResponse::ToValueDict() const {
+  base::Value::Dict result;
+  result.Set(kCardCardholderName, cardholder_name);
+  result.Set(kCardCardNumber, card_number);
+  result.Set(kCardExpiryMonth, expiry_month);
+  result.Set(kCardExpiryYear, expiry_year);
+  result.Set(kCardCardSecurityCode, card_security_code);
+  result.Set(kCardBillingAddress, PaymentAddressToValueDict(*billing_address));
 
   return result;
 }
diff --git a/components/payments/core/basic_card_response.h b/components/payments/core/basic_card_response.h
index 9c350621..446ad47 100644
--- a/components/payments/core/basic_card_response.h
+++ b/components/payments/core/basic_card_response.h
@@ -26,8 +26,8 @@
   bool operator==(const BasicCardResponse& other) const;
   bool operator!=(const BasicCardResponse& other) const;
 
-  // Populates |value| with the properties of this BasicCardResponse.
-  base::Value ToValue() const;
+  // Returns a Value::Dict with the properties of this BasicCardResponse.
+  base::Value::Dict ToValueDict() const;
 
   // The cardholder's name as it appears on the card.
   std::u16string cardholder_name;
diff --git a/components/payments/core/payment_address.cc b/components/payments/core/payment_address.cc
index dc249b1..4aea152a 100644
--- a/components/payments/core/payment_address.cc
+++ b/components/payments/core/payment_address.cc
@@ -25,23 +25,24 @@
 
 }  // namespace
 
-base::Value PaymentAddressToValue(const mojom::PaymentAddress& address) {
-  base::Value result(base::Value::Type::DICTIONARY);
-  result.SetStringKey(kAddressCountry, address.country);
+base::Value::Dict PaymentAddressToValueDict(
+    const mojom::PaymentAddress& address) {
+  base::Value::Dict result;
+  result.Set(kAddressCountry, address.country);
   base::Value address_line_list(base::Value::Type::LIST);
   for (const std::string& address_line_string : address.address_line) {
     if (!address_line_string.empty())
       address_line_list.Append(address_line_string);
   }
-  result.SetKey(kAddressAddressLine, std::move(address_line_list));
-  result.SetStringKey(kAddressRegion, address.region);
-  result.SetStringKey(kAddressCity, address.city);
-  result.SetStringKey(kAddressDependentLocality, address.dependent_locality);
-  result.SetStringKey(kAddressPostalCode, address.postal_code);
-  result.SetStringKey(kAddressSortingCode, address.sorting_code);
-  result.SetStringKey(kAddressOrganization, address.organization);
-  result.SetStringKey(kAddressRecipient, address.recipient);
-  result.SetStringKey(kAddressPhone, address.phone);
+  result.Set(kAddressAddressLine, std::move(address_line_list));
+  result.Set(kAddressRegion, address.region);
+  result.Set(kAddressCity, address.city);
+  result.Set(kAddressDependentLocality, address.dependent_locality);
+  result.Set(kAddressPostalCode, address.postal_code);
+  result.Set(kAddressSortingCode, address.sorting_code);
+  result.Set(kAddressOrganization, address.organization);
+  result.Set(kAddressRecipient, address.recipient);
+  result.Set(kAddressPhone, address.phone);
 
   return result;
 }
diff --git a/components/payments/core/payment_address.h b/components/payments/core/payment_address.h
index 0ca0205..fd7f1e5 100644
--- a/components/payments/core/payment_address.h
+++ b/components/payments/core/payment_address.h
@@ -5,6 +5,7 @@
 #ifndef COMPONENTS_PAYMENTS_CORE_PAYMENT_ADDRESS_H_
 #define COMPONENTS_PAYMENTS_CORE_PAYMENT_ADDRESS_H_
 
+#include "base/values.h"
 #include "components/payments/mojom/payment_request_data.mojom.h"
 
 // C++ bindings for the PaymentRequest API PaymentAddress. Conforms to the
@@ -17,8 +18,9 @@
 
 namespace payments {
 
-// Populates |value| with the properties of this PaymentAddress.
-base::Value PaymentAddressToValue(const mojom::PaymentAddress& address);
+// Returns a Value::Dict with the properties of this PaymentAddress.
+base::Value::Dict PaymentAddressToValueDict(
+    const mojom::PaymentAddress& address);
 
 }  // namespace payments
 
diff --git a/components/payments/core/payment_currency_amount.cc b/components/payments/core/payment_currency_amount.cc
index 97a51a7c..c4d1bd9 100644
--- a/components/payments/core/payment_currency_amount.cc
+++ b/components/payments/core/payment_currency_amount.cc
@@ -17,20 +17,18 @@
 
 }  // namespace
 
-bool PaymentCurrencyAmountFromValue(const base::Value& dictionary_value,
-                                    mojom::PaymentCurrencyAmount* amount) {
-  if (!dictionary_value.is_dict())
-    return false;
-
+bool PaymentCurrencyAmountFromValueDict(
+    const base::Value::Dict& dictionary_value,
+    mojom::PaymentCurrencyAmount* amount) {
   const std::string* currency =
-      dictionary_value.FindStringKey(kPaymentCurrencyAmountCurrency);
+      dictionary_value.FindString(kPaymentCurrencyAmountCurrency);
   if (!currency) {
     return false;
   }
   amount->currency = *currency;
 
   const std::string* value =
-      dictionary_value.FindStringKey(kPaymentCurrencyAmountValue);
+      dictionary_value.FindString(kPaymentCurrencyAmountValue);
   if (!value) {
     return false;
   }
@@ -39,11 +37,11 @@
   return true;
 }
 
-base::Value PaymentCurrencyAmountToValue(
+base::Value::Dict PaymentCurrencyAmountToValueDict(
     const mojom::PaymentCurrencyAmount& amount) {
-  base::Value result(base::Value::Type::DICTIONARY);
-  result.SetStringKey(kPaymentCurrencyAmountCurrency, amount.currency);
-  result.SetStringKey(kPaymentCurrencyAmountValue, amount.value);
+  base::Value::Dict result;
+  result.Set(kPaymentCurrencyAmountCurrency, amount.currency);
+  result.Set(kPaymentCurrencyAmountValue, amount.value);
 
   return result;
 }
diff --git a/components/payments/core/payment_currency_amount.h b/components/payments/core/payment_currency_amount.h
index 042c8c22..283b136 100644
--- a/components/payments/core/payment_currency_amount.h
+++ b/components/payments/core/payment_currency_amount.h
@@ -5,6 +5,7 @@
 #ifndef COMPONENTS_PAYMENTS_CORE_PAYMENT_CURRENCY_AMOUNT_H_
 #define COMPONENTS_PAYMENTS_CORE_PAYMENT_CURRENCY_AMOUNT_H_
 
+#include "base/values.h"
 #include "components/payments/mojom/payment_request_data.mojom.h"
 
 // C++ bindings for the PaymentRequest API PaymentCurrencyAmount. Conforms to
@@ -17,14 +18,15 @@
 
 namespace payments {
 
-// Populates the properties of |amount| from |value|. Returns true if the
-// required values are present.
-bool PaymentCurrencyAmountFromValue(const base::Value& dictionary_value,
-                                    mojom::PaymentCurrencyAmount* amount);
+// Populates the properties of |amount| from |dictionary_value|.
+// Returns true if the required values are present.
+bool PaymentCurrencyAmountFromValueDict(
+    const base::Value::Dict& dictionary_value,
+    mojom::PaymentCurrencyAmount* amount);
 
-// Creates a base::Value dictionary with the properties of the given
+// Creates a base::Value::Dict with the properties of the given
 // PaymentCurrencyAmount.
-base::Value PaymentCurrencyAmountToValue(
+base::Value::Dict PaymentCurrencyAmountToValueDict(
     const mojom::PaymentCurrencyAmount& amount);
 
 }  // namespace payments
diff --git a/components/payments/core/payment_currency_amount_unittest.cc b/components/payments/core/payment_currency_amount_unittest.cc
index 328387e1..c8b345e 100644
--- a/components/payments/core/payment_currency_amount_unittest.cc
+++ b/components/payments/core/payment_currency_amount_unittest.cc
@@ -11,44 +11,41 @@
 
 // Tests the success case when populating a PaymentCurrencyAmount from a
 // dictionary.
-TEST(PaymentRequestTest, PaymentCurrencyAmountFromValueSuccess) {
+TEST(PaymentRequestTest, PaymentCurrencyAmountFromValueDictSuccess) {
   mojom::PaymentCurrencyAmount expected;
   expected.currency = "AUD";
   expected.value = "-438.23";
 
-  base::Value amount_dict(base::Value::Type::DICTIONARY);
-  amount_dict.SetStringKey("currency", "AUD");
-  amount_dict.SetStringKey("value", "-438.23");
+  base::Value::Dict amount_dict;
+  amount_dict.Set("currency", "AUD");
+  amount_dict.Set("value", "-438.23");
 
   mojom::PaymentCurrencyAmount actual;
-  EXPECT_TRUE(PaymentCurrencyAmountFromValue(amount_dict, &actual));
+  EXPECT_TRUE(PaymentCurrencyAmountFromValueDict(amount_dict, &actual));
 
   EXPECT_TRUE(expected.Equals(actual));
 
-  EXPECT_TRUE(PaymentCurrencyAmountFromValue(amount_dict, &actual));
+  EXPECT_TRUE(PaymentCurrencyAmountFromValueDict(amount_dict, &actual));
   EXPECT_TRUE(expected.Equals(actual));
 }
 
 // Tests the failure case when populating a PaymentCurrencyAmount from a
 // dictionary.
-TEST(PaymentRequestTest, PaymentCurrencyAmountFromValueFailure) {
+TEST(PaymentRequestTest, PaymentCurrencyAmountFromValueDictFailure) {
   mojom::PaymentCurrencyAmount actual;
 
-  // Test non-dictionary input.
-  EXPECT_FALSE(PaymentCurrencyAmountFromValue(base::Value("hello"), &actual));
-
   // Both a currency and a value are required.
-  base::Value amount_dict(base::Value::Type::DICTIONARY);
-  EXPECT_FALSE(PaymentCurrencyAmountFromValue(amount_dict, &actual));
+  base::Value::Dict amount_dict;
+  EXPECT_FALSE(PaymentCurrencyAmountFromValueDict(amount_dict, &actual));
 
   // Both values must be strings.
-  amount_dict.SetIntKey("currency", 842);
-  amount_dict.SetStringKey("value", "-438.23");
-  EXPECT_FALSE(PaymentCurrencyAmountFromValue(amount_dict, &actual));
+  amount_dict.Set("currency", 842);
+  amount_dict.Set("value", "-438.23");
+  EXPECT_FALSE(PaymentCurrencyAmountFromValueDict(amount_dict, &actual));
 
-  amount_dict.SetStringKey("currency", "NZD");
-  amount_dict.SetDoubleKey("value", -438.23);
-  EXPECT_FALSE(PaymentCurrencyAmountFromValue(amount_dict, &actual));
+  amount_dict.Set("currency", "NZD");
+  amount_dict.Set("value", -438.23);
+  EXPECT_FALSE(PaymentCurrencyAmountFromValueDict(amount_dict, &actual));
 }
 
 // Tests that two currency amount objects are not equal if their property values
@@ -76,30 +73,30 @@
 // Tests that serializing a default PaymentCurrencyAmount yields the expected
 // result.
 TEST(PaymentRequestTest, EmptyPaymentCurrencyAmountDictionary) {
-  base::Value expected_value(base::Value::Type::DICTIONARY);
+  base::Value::Dict expected_value;
 
-  expected_value.SetStringKey("currency", "");
-  expected_value.SetStringKey("value", "");
+  expected_value.Set("currency", "");
+  expected_value.Set("value", "");
 
   mojom::PaymentCurrencyAmount payment_currency_amount;
   EXPECT_EQ(expected_value,
-            PaymentCurrencyAmountToValue(payment_currency_amount));
+            PaymentCurrencyAmountToValueDict(payment_currency_amount));
 }
 
 // Tests that serializing a populated PaymentCurrencyAmount yields the expected
 // result.
 TEST(PaymentRequestTest, PopulatedCurrencyAmountDictionary) {
-  base::Value expected_value(base::Value::Type::DICTIONARY);
+  base::Value::Dict expected_value;
 
-  expected_value.SetStringKey("currency", "AUD");
-  expected_value.SetStringKey("value", "-438.23");
+  expected_value.Set("currency", "AUD");
+  expected_value.Set("value", "-438.23");
 
   mojom::PaymentCurrencyAmount payment_currency_amount;
   payment_currency_amount.currency = "AUD";
   payment_currency_amount.value = "-438.23";
 
   EXPECT_EQ(expected_value,
-            PaymentCurrencyAmountToValue(payment_currency_amount));
+            PaymentCurrencyAmountToValueDict(payment_currency_amount));
 }
 
 }  // namespace payments
diff --git a/components/payments/core/payment_details.cc b/components/payments/core/payment_details.cc
index 15a51e1..535346a 100644
--- a/components/payments/core/payment_details.cc
+++ b/components/payments/core/payment_details.cc
@@ -7,7 +7,6 @@
 #include <algorithm>
 
 #include "base/memory/values_equivalent.h"
-#include "base/values.h"
 
 namespace payments {
 
@@ -62,82 +61,85 @@
   return !(*this == other);
 }
 
-bool PaymentDetails::FromValue(const base::Value& value, bool requires_total) {
+bool PaymentDetails::FromValueDict(const base::Value::Dict& dict,
+                                   bool requires_total) {
   display_items.clear();
   shipping_options.clear();
   modifiers.clear();
 
-  if (!value.is_dict()) {
-    return false;
-  }
-
   // ID is optional.
-  const std::string* specified_id = value.FindStringKey(kPaymentDetailsId);
+  const std::string* specified_id = dict.FindString(kPaymentDetailsId);
   if (specified_id)
     id = *specified_id;
 
-  const base::Value* total_dict = value.FindDictKey(kPaymentDetailsTotal);
+  const base::Value::Dict* total_dict = dict.FindDict(kPaymentDetailsTotal);
   if (!total_dict && requires_total) {
     return false;
   }
 
   if (total_dict) {
     total = std::make_unique<PaymentItem>();
-    if (!total->FromValue(*total_dict)) {
+    if (!total->FromValueDict(*total_dict)) {
       return false;
     }
   }
 
-  const base::Value* display_items_list =
-      value.FindListKey(kPaymentDetailsDisplayItems);
+  const base::Value::List* display_items_list =
+      dict.FindList(kPaymentDetailsDisplayItems);
   if (display_items_list) {
-    for (const base::Value& payment_item_dict :
-         display_items_list->GetListDeprecated()) {
+    for (const base::Value& payment_item_list_entry : *display_items_list) {
       PaymentItem payment_item;
-      if (!payment_item.FromValue(payment_item_dict)) {
+      if (!payment_item_list_entry.is_dict() ||
+          !payment_item.FromValueDict(payment_item_list_entry.GetDict())) {
         return false;
       }
       display_items.push_back(payment_item);
     }
   }
 
-  const base::Value* shipping_options_list =
-      value.FindListKey(kPaymentDetailsShippingOptions);
+  const base::Value::List* shipping_options_list =
+      dict.FindList(kPaymentDetailsShippingOptions);
   if (shipping_options_list) {
-    for (const base::Value& shipping_option_dict :
-         shipping_options_list->GetListDeprecated()) {
+    for (const base::Value& shipping_option_list_entry :
+         *shipping_options_list) {
       PaymentShippingOption shipping_option;
-      if (!shipping_option.FromValue(shipping_option_dict)) {
+      if (!shipping_option_list_entry.is_dict() ||
+          !shipping_option.FromValueDict(
+              shipping_option_list_entry.GetDict())) {
         return false;
       }
       shipping_options.push_back(shipping_option);
     }
   }
 
-  const base::Value* modifiers_list =
-      value.FindListKey(kPaymentDetailsModifiers);
+  const base::Value::List* modifiers_list =
+      dict.FindList(kPaymentDetailsModifiers);
   if (modifiers_list) {
-    for (const base::Value& modifier_dict :
-         modifiers_list->GetListDeprecated()) {
+    for (const base::Value& modifiers_list_element : *modifiers_list) {
+      if (!modifiers_list_element.is_dict())
+        return false;
+      const base::Value::Dict& modifier_dict = modifiers_list_element.GetDict();
       PaymentDetailsModifier modifier;
-      if (!modifier.method_data.FromValue(modifier_dict)) {
+      if (!modifier.method_data.FromValueDict(modifier_dict)) {
         return false;
       }
-      const base::Value* modifier_total_dict =
-          modifier_dict.FindDictKey(kPaymentDetailsTotal);
+      const base::Value::Dict* modifier_total_dict =
+          modifier_dict.FindDict(kPaymentDetailsTotal);
       if (modifier_total_dict) {
         modifier.total = std::make_unique<PaymentItem>();
-        if (!modifier.total->FromValue(*modifier_total_dict))
+        if (!modifier.total->FromValueDict(*modifier_total_dict))
           return false;
       }
-      const base::Value* additional_display_items_list =
-          modifier_dict.FindListKey(kPaymentDetailsAdditionalDisplayItems);
+      const base::Value::List* additional_display_items_list =
+          modifier_dict.FindList(kPaymentDetailsAdditionalDisplayItems);
       if (additional_display_items_list) {
-        for (const base::Value& additional_display_item_dict :
-             additional_display_items_list->GetListDeprecated()) {
+        for (const base::Value& additional_display_items_list_elem :
+             *additional_display_items_list) {
+          if (!additional_display_items_list_elem.is_dict())
+            return false;
           PaymentItem additional_display_item;
-          if (!additional_display_item.FromValue(
-                  additional_display_item_dict)) {
+          if (!additional_display_item.FromValueDict(
+                  additional_display_items_list_elem.GetDict())) {
             return false;
           }
           modifier.additional_display_items.push_back(additional_display_item);
@@ -148,8 +150,7 @@
   }
 
   // Error is optional.
-  const std::string* specified_error =
-      value.FindStringKey(kPaymentDetailsError);
+  const std::string* specified_error = dict.FindString(kPaymentDetailsError);
   if (specified_error)
     error = *specified_error;
 
diff --git a/components/payments/core/payment_details.h b/components/payments/core/payment_details.h
index ef35d68..613e0c4 100644
--- a/components/payments/core/payment_details.h
+++ b/components/payments/core/payment_details.h
@@ -9,6 +9,7 @@
 #include <string>
 #include <vector>
 
+#include "base/values.h"
 #include "components/payments/core/payment_details_modifier.h"
 #include "components/payments/core/payment_item.h"
 #include "components/payments/core/payment_shipping_option.h"
@@ -17,10 +18,6 @@
 // following spec:
 // https://w3c.github.io/payment-request/#payment-details-dictionaries
 
-namespace base {
-class Value;
-}
-
 namespace payments {
 
 // Details about the requested transaction.
@@ -34,10 +31,10 @@
   bool operator==(const PaymentDetails& other) const;
   bool operator!=(const PaymentDetails& other) const;
 
-  // Populates the properties of this PaymentDetails from |value|. Returns true
+  // Populates the properties of this PaymentDetails from |dict|. Returns true
   // if the required values are present. If |requires_total| is true, the total
   // property has to be present.
-  bool FromValue(const base::Value& value, bool requires_total);
+  bool FromValueDict(const base::Value::Dict& dict, bool requires_total);
 
   // The unique free-form identifier for this payment request.
   std::string id;
diff --git a/components/payments/core/payment_details_modifier.cc b/components/payments/core/payment_details_modifier.cc
index e7527a06..9f35981 100644
--- a/components/payments/core/payment_details_modifier.cc
+++ b/components/payments/core/payment_details_modifier.cc
@@ -54,13 +54,13 @@
   return !(*this == other);
 }
 
-base::Value PaymentDetailsModifier::ToValue() const {
-  base::Value result(base::Value::Type::DICTIONARY);
-  result.SetStringKey(kPaymentDetailsModifierSupportedMethods,
-                      method_data.supported_method);
-  result.SetStringKey(kPaymentDetailsModifierData, method_data.data);
+base::Value::Dict PaymentDetailsModifier::ToValueDict() const {
+  base::Value::Dict result;
+  result.Set(kPaymentDetailsModifierSupportedMethods,
+             method_data.supported_method);
+  result.Set(kPaymentDetailsModifierData, method_data.data);
   if (total) {
-    result.SetKey(kPaymentDetailsModifierTotal, total->ToValue());
+    result.Set(kPaymentDetailsModifierTotal, total->ToValueDict());
   }
 
   return result;
diff --git a/components/payments/core/payment_details_modifier.h b/components/payments/core/payment_details_modifier.h
index 6d76212..276e2ac 100644
--- a/components/payments/core/payment_details_modifier.h
+++ b/components/payments/core/payment_details_modifier.h
@@ -8,6 +8,7 @@
 #include <memory>
 #include <vector>
 
+#include "base/values.h"
 #include "components/payments/core/payment_item.h"
 #include "components/payments/core/payment_method_data.h"
 
@@ -15,10 +16,6 @@
 // the following spec:
 // https://w3c.github.io/payment-request/#dom-paymentdetailsmodifier
 
-namespace base {
-class Value;
-}
-
 namespace payments {
 
 // Details that modify the PaymentDetails based on the payment method
@@ -35,7 +32,7 @@
 
   // Creates a dictionary base::Value with the properties of this
   // PaymentDetailsModifier.
-  base::Value ToValue() const;
+  base::Value::Dict ToValueDict() const;
 
   // A payment method identifier and any associated payment method specific
   // data. The remaining fields in the PaymentDetailsModifier apply only if the
diff --git a/components/payments/core/payment_details_modifier_unittest.cc b/components/payments/core/payment_details_modifier_unittest.cc
index 86b3f62..ec5394e 100644
--- a/components/payments/core/payment_details_modifier_unittest.cc
+++ b/components/payments/core/payment_details_modifier_unittest.cc
@@ -13,31 +13,31 @@
 // Tests that serializing a default PaymentDetailsModifier yields the expected
 // result.
 TEST(PaymentRequestTest, EmptyPaymentDetailsModifierDictionary) {
-  base::Value expected_value(base::Value::Type::DICTIONARY);
+  base::Value::Dict expected_value;
 
-  expected_value.SetStringKey("supportedMethods", "");
-  expected_value.SetStringKey("data", "");
+  expected_value.Set("supportedMethods", "");
+  expected_value.Set("data", "");
 
   PaymentDetailsModifier payment_details_modifier;
-  EXPECT_EQ(expected_value, payment_details_modifier.ToValue());
+  EXPECT_EQ(expected_value, payment_details_modifier.ToValueDict());
 }
 
 // Tests that serializing a populated PaymentDetailsModifier yields the expected
 // result.
 TEST(PaymentRequestTest, PopulatedDetailsModifierDictionary) {
-  base::Value expected_value(base::Value::Type::DICTIONARY);
+  base::Value::Dict expected_value;
 
-  expected_value.SetStringKey("supportedMethods", "basic-card");
-  expected_value.SetStringKey(
-      "data", "{\"supportedNetworks\":[\"visa\",\"mastercard\"]}");
-  base::Value item_dict(base::Value::Type::DICTIONARY);
-  item_dict.SetStringKey("label", "Gratuity");
-  base::Value amount_dict(base::Value::Type::DICTIONARY);
-  amount_dict.SetStringKey("currency", "USD");
-  amount_dict.SetStringKey("value", "139.99");
-  item_dict.SetKey("amount", std::move(amount_dict));
-  item_dict.SetBoolKey("pending", false);
-  expected_value.SetKey("total", std::move(item_dict));
+  expected_value.Set("supportedMethods", "basic-card");
+  expected_value.Set("data",
+                     "{\"supportedNetworks\":[\"visa\",\"mastercard\"]}");
+  base::Value::Dict item_dict;
+  item_dict.Set("label", "Gratuity");
+  base::Value::Dict amount_dict;
+  amount_dict.Set("currency", "USD");
+  amount_dict.Set("value", "139.99");
+  item_dict.Set("amount", std::move(amount_dict));
+  item_dict.Set("pending", false);
+  expected_value.Set("total", std::move(item_dict));
 
   PaymentDetailsModifier payment_details_modifier;
   payment_details_modifier.method_data.supported_method = "basic-card";
@@ -48,7 +48,7 @@
   payment_details_modifier.total->amount->currency = "USD";
   payment_details_modifier.total->amount->value = "139.99";
 
-  EXPECT_EQ(expected_value, payment_details_modifier.ToValue());
+  EXPECT_EQ(expected_value, payment_details_modifier.ToValueDict());
 }
 
 // Tests that two details modifier objects are not equal if their property
diff --git a/components/payments/core/payment_details_unittest.cc b/components/payments/core/payment_details_unittest.cc
index 3398c81..aafb7599 100644
--- a/components/payments/core/payment_details_unittest.cc
+++ b/components/payments/core/payment_details_unittest.cc
@@ -10,14 +10,14 @@
 namespace payments {
 
 // Tests the success case when populating a PaymentDetails from a dictionary.
-TEST(PaymentRequestTest, PaymentDetailsFromValueSuccess) {
+TEST(PaymentRequestTest, PaymentDetailsFromValueSuccessDict) {
   PaymentDetails expected;
   expected.error = "Error in details";
 
-  base::Value details_dict(base::Value::Type::DICTIONARY);
-  details_dict.SetStringKey("error", "Error in details");
+  base::Value::Dict details_dict;
+  details_dict.Set("error", "Error in details");
   PaymentDetails actual;
-  EXPECT_TRUE(actual.FromValue(details_dict, /*requires_total=*/false));
+  EXPECT_TRUE(actual.FromValueDict(details_dict, /*requires_total=*/false));
   EXPECT_EQ(expected, actual);
 
   expected.total = std::make_unique<PaymentItem>();
@@ -25,13 +25,13 @@
   expected.total->amount->currency = "GBP";
   expected.total->amount->value = "6.66";
 
-  base::Value total_dict(base::Value::Type::DICTIONARY);
-  total_dict.SetStringKey("label", "TOTAL");
-  base::Value amount_dict(base::Value::Type::DICTIONARY);
-  amount_dict.SetStringKey("currency", "GBP");
-  amount_dict.SetStringKey("value", "6.66");
-  total_dict.SetKey("amount", std::move(amount_dict));
-  details_dict.SetKey("total", std::move(total_dict));
+  base::Value::Dict total_dict;
+  total_dict.Set("label", "TOTAL");
+  base::Value::Dict amount_dict;
+  amount_dict.Set("currency", "GBP");
+  amount_dict.Set("value", "6.66");
+  total_dict.Set("amount", std::move(amount_dict));
+  details_dict.Set("total", std::move(total_dict));
 
   PaymentItem display1;
   display1.label = "Handling";
@@ -40,9 +40,9 @@
   display1.pending = true;
   expected.display_items.push_back(display1);
 
-  base::Value display_items_list(base::Value::Type::LIST);
-  display_items_list.Append(display1.ToValue());
-  details_dict.SetKey("displayItems", std::move(display_items_list));
+  base::Value::List display_items_list;
+  display_items_list.Append(display1.ToValueDict());
+  details_dict.Set("displayItems", std::move(display_items_list));
 
   PaymentShippingOption expect_shipping_option;
   expect_shipping_option.id = "Post office";
@@ -52,27 +52,27 @@
   expect_shipping_option.amount->value = "5.0";
   expected.shipping_options.push_back(std::move(expect_shipping_option));
 
-  base::Value shipping_options_list(base::Value::Type::LIST);
-  base::Value shipping_option(base::Value::Type::DICTIONARY);
-  shipping_option.SetStringKey("id", "Post office");
-  shipping_option.SetStringKey("label", "Post office, one-week ground");
-  base::Value shipping_amount(base::Value::Type::DICTIONARY);
-  shipping_amount.SetStringKey("currency", "USD");
-  shipping_amount.SetStringKey("value", "5.0");
-  shipping_option.SetKey("amount", std::move(shipping_amount));
+  base::Value::List shipping_options_list;
+  base::Value::Dict shipping_option;
+  shipping_option.Set("id", "Post office");
+  shipping_option.Set("label", "Post office, one-week ground");
+  base::Value::Dict shipping_amount;
+  shipping_amount.Set("currency", "USD");
+  shipping_amount.Set("value", "5.0");
+  shipping_option.Set("amount", std::move(shipping_amount));
   shipping_options_list.Append(std::move(shipping_option));
-  details_dict.SetKey("shippingOptions", std::move(shipping_options_list));
+  details_dict.Set("shippingOptions", std::move(shipping_options_list));
 
-  EXPECT_TRUE(actual.FromValue(details_dict, /*requires_total=*/false));
+  EXPECT_TRUE(actual.FromValueDict(details_dict, /*requires_total=*/false));
   EXPECT_EQ(expected, actual);
 
-  EXPECT_TRUE(actual.FromValue(details_dict, /*requires_total=*/true));
+  EXPECT_TRUE(actual.FromValueDict(details_dict, /*requires_total=*/true));
   EXPECT_EQ(expected, actual);
 
   // Test specifying ID.
-  details_dict.SetStringKey("id", "1234");
+  details_dict.Set("id", "1234");
   expected.id = "1234";
-  EXPECT_TRUE(actual.FromValue(details_dict, /*requires_total=*/false));
+  EXPECT_TRUE(actual.FromValueDict(details_dict, /*requires_total=*/false));
   EXPECT_EQ(expected, actual);
 
   // Test without total when not requiring it.
@@ -80,67 +80,64 @@
     PaymentDetails actual2;
     expected.total.reset();
 
-    details_dict.RemoveKey("total");
-    EXPECT_TRUE(actual2.FromValue(details_dict, /*requires_total=*/false));
+    details_dict.Remove("total");
+    EXPECT_TRUE(actual2.FromValueDict(details_dict, /*requires_total=*/false));
     EXPECT_EQ(expected, actual2);
   }
 }
 
 // Tests the failure case when populating a PaymentDetails from a dictionary.
-TEST(PaymentRequestTest, PaymentDetailsFromValueFailure) {
-  base::Value details_dict(base::Value::Type::DICTIONARY);
-  details_dict.SetStringKey("error", "Error in details");
+TEST(PaymentRequestTest, PaymentDetailsFromValueFailureDict) {
+  base::Value::Dict details_dict;
+  details_dict.Set("error", "Error in details");
 
   PaymentDetails actual;
-  EXPECT_FALSE(actual.FromValue(details_dict, /*requires_total=*/true));
+  EXPECT_FALSE(actual.FromValueDict(details_dict, /*requires_total=*/true));
 
   // Invalid total.
-  base::Value total_dict(base::Value::Type::DICTIONARY);
-  details_dict.SetKey("total", std::move(total_dict));
-  EXPECT_FALSE(actual.FromValue(details_dict, /*requires_total=*/false));
-  details_dict.RemoveKey("total");
+  base::Value::Dict total_dict;
+  details_dict.Set("total", std::move(total_dict));
+  EXPECT_FALSE(actual.FromValueDict(details_dict, /*requires_total=*/false));
+  details_dict.Remove("total");
 
   // Invalid display item.
-  base::Value display_items_list(base::Value::Type::LIST);
+  base::Value::List display_items_list;
   display_items_list.Append("huh");
-  details_dict.SetKey("displayItems", std::move(display_items_list));
-  EXPECT_FALSE(actual.FromValue(details_dict, /*requires_total=*/false));
-  details_dict.RemoveKey("displayItems");
+  details_dict.Set("displayItems", std::move(display_items_list));
+  EXPECT_FALSE(actual.FromValueDict(details_dict, /*requires_total=*/false));
+  details_dict.Remove("displayItems");
 
   // Invalid shipping option.
-  base::Value shipping_options_list(base::Value::Type::LIST);
+  base::Value::List shipping_options_list;
   shipping_options_list.Append("nonsense");
-  details_dict.SetKey("shippingOptions", std::move(shipping_options_list));
-  EXPECT_FALSE(actual.FromValue(details_dict, /*requires_total=*/false));
-  details_dict.RemoveKey("shippingOptions");
+  details_dict.Set("shippingOptions", std::move(shipping_options_list));
+  EXPECT_FALSE(actual.FromValueDict(details_dict, /*requires_total=*/false));
+  details_dict.Remove("shippingOptions");
 
   // Invalid modifiers.
-  base::Value modifiers_list(base::Value::Type::LIST);
+  base::Value::List modifiers_list;
   modifiers_list.Append("not a payment method dict");
-  details_dict.SetKey("modifiers", std::move(modifiers_list));
-  EXPECT_FALSE(actual.FromValue(details_dict, /*requires_total=*/false));
+  details_dict.Set("modifiers", std::move(modifiers_list));
+  EXPECT_FALSE(actual.FromValueDict(details_dict, /*requires_total=*/false));
 
   // Invalid modifier total.
-  details_dict.FindKey("modifiers")->ClearList();
-  base::Value payment_method(base::Value::Type::DICTIONARY);
-  payment_method.SetStringKey("supportedMethods", "MuenterCard");
-  base::Value invalid_total_dict(base::Value::Type::DICTIONARY);
-  payment_method.SetKey("total", std::move(invalid_total_dict));
-  details_dict.FindKey("modifiers")->Append(std::move(payment_method));
-  EXPECT_FALSE(actual.FromValue(details_dict, /*requires_total=*/false));
-  details_dict.FindKey("modifiers")->GetListDeprecated()[0].RemoveKey("total");
+  details_dict.FindList("modifiers")->clear();
+  base::Value::Dict payment_method;
+  payment_method.Set("supportedMethods", "MuenterCard");
+  base::Value::Dict invalid_total_dict;
+  payment_method.Set("total", std::move(invalid_total_dict));
+  details_dict.FindList("modifiers")->Append(std::move(payment_method));
+  EXPECT_FALSE(actual.FromValueDict(details_dict, /*requires_total=*/false));
+  details_dict.FindList("modifiers")->front().GetDict().Remove("total");
 
   // Invalid additional_display_item in modifiers.
-  base::Value additional_display_items_list(base::Value::Type::LIST);
+  base::Value::List additional_display_items_list;
   additional_display_items_list.Append("not a payment item");
-  details_dict.FindKey("modifiers")
-      ->GetListDeprecated()[0]
-      .SetKey("additionalDisplayItems",
-              std::move(additional_display_items_list));
-  EXPECT_FALSE(actual.FromValue(details_dict, /*requires_total=*/false));
-
-  // Check error-handling of non-dictionary input value.
-  EXPECT_FALSE(actual.FromValue(base::Value("hi"), /*requires_total=*/false));
+  details_dict.FindList("modifiers")
+      ->front()
+      .GetDict()
+      .Set("additionalDisplayItems", std::move(additional_display_items_list));
+  EXPECT_FALSE(actual.FromValueDict(details_dict, /*requires_total=*/false));
 }
 
 // Tests that two payment details objects are not equal if their property values
diff --git a/components/payments/core/payment_details_validation_unittest.cc b/components/payments/core/payment_details_validation_unittest.cc
index 39875d7..cdb3838 100644
--- a/components/payments/core/payment_details_validation_unittest.cc
+++ b/components/payments/core/payment_details_validation_unittest.cc
@@ -49,19 +49,13 @@
   ASSERT_TRUE(value.has_value()) << "Should be in JSON format";
   ASSERT_TRUE(value->is_dict());
   PaymentDetails details;
-  ASSERT_TRUE(details.FromValue(*value, GetParam().require_total));
+  ASSERT_TRUE(
+      details.FromValueDict(value->GetDict(), GetParam().require_total));
   std::string unused;
 
   EXPECT_EQ(GetParam().expect_valid, ValidatePaymentDetails(details, &unused));
 }
 
-TEST(PaymentDetailsValidationTest, TestNonDict) {
-  // Make sure that FromValue on a non-dict doesn't crash.
-  PaymentDetails details;
-  EXPECT_FALSE(details.FromValue(base::Value("hello"),
-                                 /*requires_total=*/false));
-}
-
 INSTANTIATE_TEST_SUITE_P(
     TestCases,
     PaymentDetailsValidationTest,
diff --git a/components/payments/core/payment_item.cc b/components/payments/core/payment_item.cc
index 7a23c0c..04fdfa8 100644
--- a/components/payments/core/payment_item.cc
+++ b/components/payments/core/payment_item.cc
@@ -47,36 +47,33 @@
   return *this;
 }
 
-bool PaymentItem::FromValue(const base::Value& value) {
-  if (!value.is_dict())
-    return false;
-
-  const std::string* label_val = value.FindStringKey(kPaymentItemLabel);
+bool PaymentItem::FromValueDict(const base::Value::Dict& dict) {
+  const std::string* label_val = dict.FindString(kPaymentItemLabel);
   if (!label_val) {
     return false;
   }
   label = *label_val;
 
-  const base::Value* amount_dict = value.FindDictKey(kPaymentItemAmount);
+  const base::Value::Dict* amount_dict = dict.FindDict(kPaymentItemAmount);
   if (!amount_dict) {
     return false;
   }
   amount = mojom::PaymentCurrencyAmount::New();
-  if (!PaymentCurrencyAmountFromValue(*amount_dict, amount.get())) {
+  if (!PaymentCurrencyAmountFromValueDict(*amount_dict, amount.get())) {
     return false;
   }
 
   // Pending is optional.
-  pending = value.FindBoolKey(kPaymentItemPending).value_or(pending);
+  pending = dict.FindBool(kPaymentItemPending).value_or(pending);
 
   return true;
 }
 
-base::Value PaymentItem::ToValue() const {
-  base::Value result(base::Value::Type::DICTIONARY);
-  result.SetStringKey(kPaymentItemLabel, label);
-  result.SetKey(kPaymentItemAmount, PaymentCurrencyAmountToValue(*amount));
-  result.SetBoolKey(kPaymentItemPending, pending);
+base::Value::Dict PaymentItem::ToValueDict() const {
+  base::Value::Dict result;
+  result.Set(kPaymentItemLabel, label);
+  result.Set(kPaymentItemAmount, PaymentCurrencyAmountToValueDict(*amount));
+  result.Set(kPaymentItemPending, pending);
 
   return result;
 }
diff --git a/components/payments/core/payment_item.h b/components/payments/core/payment_item.h
index 7ed7f4b..bea127c 100644
--- a/components/payments/core/payment_item.h
+++ b/components/payments/core/payment_item.h
@@ -33,12 +33,12 @@
   bool operator!=(const PaymentItem& other) const;
   PaymentItem& operator=(const PaymentItem& other);
 
-  // Populates the properties of this PaymentItem from |value|. Returns true if
+  // Populates the properties of this PaymentItem from |dict|. Returns true if
   // the required values are present.
-  bool FromValue(const base::Value& value);
+  bool FromValueDict(const base::Value::Dict& dict);
 
-  // Creates a dictionary base::Value with the properties of this PaymentItem.
-  base::Value ToValue() const;
+  // Creates a base::Value::Dict with the properties of this PaymentItem.
+  base::Value::Dict ToValueDict() const;
 
   // A human-readable description of the item.
   std::string label;
diff --git a/components/payments/core/payment_item_unittest.cc b/components/payments/core/payment_item_unittest.cc
index 87038e67..3f20ce40 100644
--- a/components/payments/core/payment_item_unittest.cc
+++ b/components/payments/core/payment_item_unittest.cc
@@ -11,51 +11,48 @@
 namespace payments {
 
 // Tests the success case when populating a PaymentItem from a dictionary.
-TEST(PaymentRequestTest, PaymentItemFromValueSuccess) {
+TEST(PaymentRequestTest, PaymentItemFromValueDictSuccess) {
   PaymentItem expected;
   expected.label = "Payment Total";
   expected.amount->currency = "NZD";
   expected.amount->value = "2,242,093.00";
 
-  base::Value item_dict(base::Value::Type::DICTIONARY);
-  item_dict.SetStringKey("label", "Payment Total");
-  base::Value amount_dict(base::Value::Type::DICTIONARY);
-  amount_dict.SetStringKey("currency", "NZD");
-  amount_dict.SetStringKey("value", "2,242,093.00");
-  item_dict.SetKey("amount", std::move(amount_dict));
+  base::Value::Dict item_dict;
+  item_dict.Set("label", "Payment Total");
+  base::Value::Dict amount_dict;
+  amount_dict.Set("currency", "NZD");
+  amount_dict.Set("value", "2,242,093.00");
+  item_dict.Set("amount", std::move(amount_dict));
 
   PaymentItem actual;
-  EXPECT_TRUE(actual.FromValue(item_dict));
+  EXPECT_TRUE(actual.FromValueDict(item_dict));
 
   EXPECT_EQ(expected, actual);
 }
 
 // Tests the failure case when populating a PaymentItem from a dictionary.
-TEST(PaymentRequestTest, PaymentItemFromValueFailure) {
+TEST(PaymentRequestTest, PaymentItemFromValueDictFailure) {
   PaymentItem actual;
 
-  // Non-dictionary input fails cleanly.
-  EXPECT_FALSE(actual.FromValue(base::Value("hi")));
-
   // Both a label and an amount are required.
-  base::Value item_dict(base::Value::Type::DICTIONARY);
-  EXPECT_FALSE(actual.FromValue(item_dict));
+  base::Value::Dict item_dict;
+  EXPECT_FALSE(actual.FromValueDict(item_dict));
 
-  item_dict.SetStringKey("label", "Payment Total");
-  EXPECT_FALSE(actual.FromValue(item_dict));
+  item_dict.Set("label", "Payment Total");
+  EXPECT_FALSE(actual.FromValueDict(item_dict));
 
   // Even with both present, the label must be a string.
-  base::Value amount_dict(base::Value::Type::DICTIONARY);
-  amount_dict.SetStringKey("currency", "NZD");
-  amount_dict.SetStringKey("value", "2,242,093.00");
-  item_dict.SetKey("amount", std::move(amount_dict));
-  item_dict.SetIntKey("label", 42);
-  EXPECT_FALSE(actual.FromValue(item_dict));
+  base::Value::Dict amount_dict;
+  amount_dict.Set("currency", "NZD");
+  amount_dict.Set("value", "2,242,093.00");
+  item_dict.Set("amount", std::move(amount_dict));
+  item_dict.Set("label", 42);
+  EXPECT_FALSE(actual.FromValueDict(item_dict));
 
   // Test with invalid mount.
-  item_dict.SetStringKey("label", "Some label");
-  item_dict.FindKey("amount")->RemoveKey("currency");
-  EXPECT_FALSE(actual.FromValue(item_dict));
+  item_dict.Set("label", "Some label");
+  item_dict.FindDict("amount")->Remove("currency");
+  EXPECT_FALSE(actual.FromValueDict(item_dict));
 }
 
 // Tests that two payment item objects are not equal if their property values
@@ -89,29 +86,29 @@
 
 // Tests that serializing a default PaymentItem yields the expected result.
 TEST(PaymentRequestTest, EmptyPaymentItemDictionary) {
-  base::Value expected_value(base::Value::Type::DICTIONARY);
+  base::Value::Dict expected_value;
 
-  expected_value.SetStringKey("label", "");
-  base::Value amount_dict(base::Value::Type::DICTIONARY);
-  amount_dict.SetStringKey("currency", "");
-  amount_dict.SetStringKey("value", "");
-  expected_value.SetKey("amount", std::move(amount_dict));
-  expected_value.SetBoolKey("pending", false);
+  expected_value.Set("label", "");
+  base::Value::Dict amount_dict;
+  amount_dict.Set("currency", "");
+  amount_dict.Set("value", "");
+  expected_value.Set("amount", std::move(amount_dict));
+  expected_value.Set("pending", false);
 
   PaymentItem payment_item;
-  EXPECT_EQ(expected_value, payment_item.ToValue());
+  EXPECT_EQ(expected_value, payment_item.ToValueDict());
 }
 
 // Tests that serializing a populated PaymentItem yields the expected result.
 TEST(PaymentRequestTest, PopulatedPaymentItemDictionary) {
-  base::Value expected_value(base::Value::Type::DICTIONARY);
+  base::Value::Dict expected_value;
 
-  expected_value.SetStringKey("label", "Payment Total");
-  base::Value amount_dict(base::Value::Type::DICTIONARY);
-  amount_dict.SetStringKey("currency", "NZD");
-  amount_dict.SetStringKey("value", "2,242,093.00");
-  expected_value.SetKey("amount", std::move(amount_dict));
-  expected_value.SetBoolKey("pending", true);
+  expected_value.Set("label", "Payment Total");
+  base::Value::Dict amount_dict;
+  amount_dict.Set("currency", "NZD");
+  amount_dict.Set("value", "2,242,093.00");
+  expected_value.Set("amount", std::move(amount_dict));
+  expected_value.Set("pending", true);
 
   PaymentItem payment_item;
   payment_item.label = "Payment Total";
@@ -119,7 +116,7 @@
   payment_item.amount->value = "2,242,093.00";
   payment_item.pending = true;
 
-  EXPECT_EQ(expected_value, payment_item.ToValue());
+  EXPECT_EQ(expected_value, payment_item.ToValueDict());
 }
 
 }  // namespace payments
diff --git a/components/payments/core/payment_method_data.cc b/components/payments/core/payment_method_data.cc
index efb777f..56559f4 100644
--- a/components/payments/core/payment_method_data.cc
+++ b/components/payments/core/payment_method_data.cc
@@ -6,7 +6,6 @@
 
 #include "base/json/json_writer.h"
 #include "base/strings/string_util.h"
-#include "base/values.h"
 
 namespace payments {
 
@@ -33,16 +32,11 @@
   return !(*this == other);
 }
 
-bool PaymentMethodData::FromValue(const base::Value& value) {
-  if (!value.is_dict()) {
-    return false;
-  }
-
+bool PaymentMethodData::FromValueDict(const base::Value::Dict& dict) {
   supported_networks.clear();
 
   // The value of supportedMethods should be a string.
-  const std::string* supported_method_in =
-      value.FindStringKey(kSupportedMethods);
+  const std::string* supported_method_in = dict.FindString(kSupportedMethods);
   if (!supported_method_in || !base::IsStringASCII(*supported_method_in) ||
       supported_method_in->empty()) {
     return false;
@@ -51,16 +45,15 @@
 
   // Data is optional, but if a dictionary is present, save a stringified
   // version and attempt to parse supportedNetworks.
-  const base::Value* data_dict = value.FindDictKey(kMethodDataData);
+  const base::Value::Dict* data_dict = dict.FindDict(kMethodDataData);
   if (data_dict) {
     std::string json_data;
     base::JSONWriter::Write(*data_dict, &json_data);
     data = json_data;
-    const base::Value* supported_networks_list =
-        data_dict->FindListKey(kSupportedNetworks);
+    const base::Value::List* supported_networks_list =
+        data_dict->FindList(kSupportedNetworks);
     if (supported_networks_list) {
-      for (const base::Value& supported_network :
-           supported_networks_list->GetListDeprecated()) {
+      for (const base::Value& supported_network : *supported_networks_list) {
         if (!supported_network.is_string() ||
             !base::IsStringASCII(supported_network.GetString())) {
           return false;
diff --git a/components/payments/core/payment_method_data.h b/components/payments/core/payment_method_data.h
index bd9c9d0..c917529c 100644
--- a/components/payments/core/payment_method_data.h
+++ b/components/payments/core/payment_method_data.h
@@ -10,6 +10,7 @@
 #include <string>
 #include <vector>
 
+#include "base/values.h"
 #include "components/autofill/core/browser/data_model/credit_card.h"
 
 namespace base {
@@ -29,9 +30,9 @@
   bool operator==(const PaymentMethodData& other) const;
   bool operator!=(const PaymentMethodData& other) const;
 
-  // Populates the properties of this PaymentMethodData from |value|. Returns
+  // Populates the properties of this PaymentMethodData from |dict|. Returns
   // true if the required values are present.
-  bool FromValue(const base::Value& value);
+  bool FromValueDict(const base::Value::Dict& dict);
 
   // Payment method identifier for payment method that the merchant web site
   // accepts.
diff --git a/components/payments/core/payment_method_data_unittest.cc b/components/payments/core/payment_method_data_unittest.cc
index 399c5329..dd91749c 100644
--- a/components/payments/core/payment_method_data_unittest.cc
+++ b/components/payments/core/payment_method_data_unittest.cc
@@ -17,16 +17,16 @@
   expected.data = "{\"supportedNetworks\":[\"mastercard\"]}";
   expected.supported_networks.push_back("mastercard");
 
-  base::Value method_data_dict(base::Value::Type::DICTIONARY);
-  method_data_dict.SetStringKey("supportedMethods", "basic-card");
-  base::Value data_dict(base::Value::Type::DICTIONARY);
+  base::Value::Dict method_data_dict;
+  method_data_dict.Set("supportedMethods", "basic-card");
+  base::Value::Dict data_dict;
   base::Value supported_networks_list(base::Value::Type::LIST);
   supported_networks_list.Append("mastercard");
-  data_dict.SetKey("supportedNetworks", std::move(supported_networks_list));
-  method_data_dict.SetKey("data", std::move(data_dict));
+  data_dict.Set("supportedNetworks", std::move(supported_networks_list));
+  method_data_dict.Set("data", std::move(data_dict));
 
   PaymentMethodData actual;
-  EXPECT_TRUE(actual.FromValue(method_data_dict));
+  EXPECT_TRUE(actual.FromValueDict(method_data_dict));
 
   EXPECT_EQ(expected, actual);
 }
@@ -36,49 +36,42 @@
 TEST(PaymentMethodData, FromValueFailure) {
   PaymentMethodData actual;
 
-  // Non-dictionary input fails.
-  EXPECT_FALSE(actual.FromValue(base::Value("hello")));
-
   // At least one supported method is required.
-  base::Value method_data_dict(base::Value::Type::DICTIONARY);
-  EXPECT_FALSE(actual.FromValue(method_data_dict));
+  base::Value::Dict method_data_dict;
+  EXPECT_FALSE(actual.FromValueDict(method_data_dict));
 
   // The value in the supported methods list must be a string.
   base::Value supported_methods_list1(base::Value::Type::LIST);
   supported_methods_list1.Append(13);
-  method_data_dict.SetKey("supportedMethods",
-                          std::move(supported_methods_list1));
-  EXPECT_FALSE(actual.FromValue(method_data_dict));
+  method_data_dict.Set("supportedMethods", std::move(supported_methods_list1));
+  EXPECT_FALSE(actual.FromValueDict(method_data_dict));
 
   // The value in the supported methods list must be a non-empty string.
   base::Value supported_methods_list2(base::Value::Type::LIST);
   supported_methods_list2.Append("");
-  method_data_dict.SetKey("supportedMethods",
-                          std::move(supported_methods_list2));
-  EXPECT_FALSE(actual.FromValue(method_data_dict));
+  method_data_dict.Set("supportedMethods", std::move(supported_methods_list2));
+  EXPECT_FALSE(actual.FromValueDict(method_data_dict));
 
   // The value in the supported methods must be a string.
-  method_data_dict.SetIntKey("supportedMethods", 13);
-  EXPECT_FALSE(actual.FromValue(method_data_dict));
+  method_data_dict.Set("supportedMethods", 13);
+  EXPECT_FALSE(actual.FromValueDict(method_data_dict));
 
   // The value in the supported methods must be a non-empty string.
-  method_data_dict.SetStringKey("supportedMethods", "");
-  EXPECT_FALSE(actual.FromValue(method_data_dict));
+  method_data_dict.Set("supportedMethods", "");
+  EXPECT_FALSE(actual.FromValueDict(method_data_dict));
 
   // Supported network list must include ASCII strings.
-  method_data_dict.SetStringKey("supportedMethods", "some finance thing");
-  base::Value data_dict(base::Value::Type::DICTIONARY);
+  method_data_dict.Set("supportedMethods", "some finance thing");
+  base::Value::Dict data_dict;
   base::Value supported_networks_list(base::Value::Type::LIST);
   supported_networks_list.Append(123456);
-  data_dict.SetKey("supportedNetworks", std::move(supported_networks_list));
-  method_data_dict.SetKey("data", std::move(data_dict));
-  EXPECT_FALSE(actual.FromValue(method_data_dict));
+  data_dict.Set("supportedNetworks", std::move(supported_networks_list));
+  method_data_dict.Set("data", std::move(data_dict));
+  EXPECT_FALSE(actual.FromValueDict(method_data_dict));
 
-  method_data_dict.FindKey("data")
-      ->FindKey("supportedNetworks")
-      ->GetListDeprecated()[0] =
+  method_data_dict.FindDict("data")->FindList("supportedNetworks")->front() =
       base::Value("\xD0\xA2\xD0\xB5\xD1\x81\xD1\x82");
-  EXPECT_FALSE(actual.FromValue(method_data_dict));
+  EXPECT_FALSE(actual.FromValueDict(method_data_dict));
 }
 
 // Tests that two method data objects are not equal if their property values
diff --git a/components/payments/core/payment_request_data_util_unittest.cc b/components/payments/core/payment_request_data_util_unittest.cc
index d86240fc..a71e0fc 100644
--- a/components/payments/core/payment_request_data_util_unittest.cc
+++ b/components/payments/core/payment_request_data_util_unittest.cc
@@ -40,7 +40,7 @@
 // PaymentAddress spec.
 TEST(PaymentRequestDataUtilTest, GetPaymentAddressFromAutofillProfile) {
   autofill::AutofillProfile address = autofill::test::GetFullProfile();
-  base::Value address_value = payments::PaymentAddressToValue(
+  base::Value::Dict address_value = payments::PaymentAddressToValueDict(
       *payments::data_util::GetPaymentAddressFromAutofillProfile(address,
                                                                  "en-US"));
   std::string json_address;
@@ -65,10 +65,10 @@
   autofill::AutofillProfile address = autofill::test::GetFullProfile();
   autofill::CreditCard card = autofill::test::GetCreditCard();
   card.set_billing_address_id(address.guid());
-  base::Value response_value =
+  base::Value::Dict response_value =
       payments::data_util::GetBasicCardResponseFromAutofillCreditCard(
           card, u"123", address, "en-US")
-          ->ToValue();
+          ->ToValueDict();
   std::string json_response;
   base::JSONWriter::Write(response_value, &json_response);
   EXPECT_EQ(base::StringPrintf(
diff --git a/components/payments/core/payment_shipping_option.cc b/components/payments/core/payment_shipping_option.cc
index f3435575..6356e88 100644
--- a/components/payments/core/payment_shipping_option.cc
+++ b/components/payments/core/payment_shipping_option.cc
@@ -54,37 +54,31 @@
   return *this;
 }
 
-bool PaymentShippingOption::FromValue(const base::Value& value) {
-  if (!value.is_dict()) {
-    return false;
-  }
-
-  const std::string* id_in = value.FindStringKey(kPaymentShippingOptionId);
+bool PaymentShippingOption::FromValueDict(const base::Value::Dict& dict) {
+  const std::string* id_in = dict.FindString(kPaymentShippingOptionId);
   if (!id_in) {
     return false;
   }
   id = *id_in;
 
-  const std::string* label_in =
-      value.FindStringKey(kPaymentShippingOptionLabel);
+  const std::string* label_in = dict.FindString(kPaymentShippingOptionLabel);
   if (!label_in) {
     return false;
   }
   label = *label_in;
 
-  const base::Value* amount_dict =
-      value.FindDictKey(kPaymentShippingOptionAmount);
+  const base::Value::Dict* amount_dict =
+      dict.FindDict(kPaymentShippingOptionAmount);
   if (!amount_dict) {
     return false;
   }
   amount = mojom::PaymentCurrencyAmount::New();
-  if (!PaymentCurrencyAmountFromValue(*amount_dict, amount.get())) {
+  if (!PaymentCurrencyAmountFromValueDict(*amount_dict, amount.get())) {
     return false;
   }
 
   // Selected is optional.
-  selected =
-      value.FindBoolKey(kPaymentShippingOptionSelected).value_or(selected);
+  selected = dict.FindBool(kPaymentShippingOptionSelected).value_or(selected);
 
   return true;
 }
diff --git a/components/payments/core/payment_shipping_option.h b/components/payments/core/payment_shipping_option.h
index 5f6bf14..393d4fdaf 100644
--- a/components/payments/core/payment_shipping_option.h
+++ b/components/payments/core/payment_shipping_option.h
@@ -30,9 +30,9 @@
   bool operator!=(const PaymentShippingOption& other) const;
   PaymentShippingOption& operator=(const PaymentShippingOption& other);
 
-  // Populates the properties of this PaymentShippingOption from |value|.
+  // Populates the properties of this PaymentShippingOption from |dict|.
   // Returns true if the required values are present.
-  bool FromValue(const base::Value& value);
+  bool FromValueDict(const base::Value::Dict& dict);
 
   // An identifier used to reference this PaymentShippingOption. It is unique
   // for a given PaymentRequest.
diff --git a/components/payments/core/payment_shipping_option_unittest.cc b/components/payments/core/payment_shipping_option_unittest.cc
index fbe7d0950..739beb1 100644
--- a/components/payments/core/payment_shipping_option_unittest.cc
+++ b/components/payments/core/payment_shipping_option_unittest.cc
@@ -13,7 +13,7 @@
 
 // Tests the success case when populating a PaymentShippingOption from a
 // dictionary.
-TEST(PaymentRequestTest, PaymentShippingOptionFromValueSuccess) {
+TEST(PaymentRequestTest, PaymentShippingOptionFromValueDictSuccess) {
   PaymentShippingOption expected;
   expected.id = "123";
   expected.label = "Ground Shipping";
@@ -21,24 +21,24 @@
   expected.amount->value = "4,000.32";
   expected.selected = true;
 
-  base::Value shipping_option_dict(base::Value::Type::DICTIONARY);
-  shipping_option_dict.SetStringKey("id", "123");
-  shipping_option_dict.SetStringKey("label", "Ground Shipping");
-  base::Value amount_dict(base::Value::Type::DICTIONARY);
-  amount_dict.SetStringKey("currency", "BRL");
-  amount_dict.SetStringKey("value", "4,000.32");
-  shipping_option_dict.SetKey("amount", std::move(amount_dict));
-  shipping_option_dict.SetBoolKey("selected", true);
+  base::Value::Dict shipping_option_dict;
+  shipping_option_dict.Set("id", "123");
+  shipping_option_dict.Set("label", "Ground Shipping");
+  base::Value::Dict amount_dict;
+  amount_dict.Set("currency", "BRL");
+  amount_dict.Set("value", "4,000.32");
+  shipping_option_dict.Set("amount", std::move(amount_dict));
+  shipping_option_dict.Set("selected", true);
 
   PaymentShippingOption actual;
-  EXPECT_TRUE(actual.FromValue(shipping_option_dict));
+  EXPECT_TRUE(actual.FromValueDict(shipping_option_dict));
 
   EXPECT_EQ(expected, actual);
 }
 
 // Tests the failure case when populating a PaymentShippingOption from a
 // dictionary.
-TEST(PaymentRequestTest, PaymentShippingOptionFromValueFailure) {
+TEST(PaymentRequestTest, PaymentShippingOptionFromValueDictFailure) {
   PaymentShippingOption expected;
   expected.id = "123";
   expected.label = "Ground Shipping";
@@ -48,39 +48,36 @@
 
   PaymentShippingOption actual;
 
-  // Make sure non-dictionary input values are handled correctly.
-  EXPECT_FALSE(actual.FromValue(base::Value("hi")));
-
-  base::Value shipping_option_dict(base::Value::Type::DICTIONARY);
+  base::Value::Dict shipping_option_dict;
 
   // Id, Label, and amount are required.
-  shipping_option_dict.SetStringKey("id", "123");
-  EXPECT_FALSE(actual.FromValue(shipping_option_dict));
+  shipping_option_dict.Set("id", "123");
+  EXPECT_FALSE(actual.FromValueDict(shipping_option_dict));
 
-  shipping_option_dict.SetStringKey("label", "Ground Shipping");
-  EXPECT_FALSE(actual.FromValue(shipping_option_dict));
+  shipping_option_dict.Set("label", "Ground Shipping");
+  EXPECT_FALSE(actual.FromValueDict(shipping_option_dict));
 
   // Id must be a string.
-  base::Value amount_dict(base::Value::Type::DICTIONARY);
-  amount_dict.SetStringKey("currency", "BRL");
-  amount_dict.SetStringKey("value", "4,000.32");
-  shipping_option_dict.SetKey("amount", std::move(amount_dict));
-  shipping_option_dict.SetIntKey("id", 123);
-  EXPECT_FALSE(actual.FromValue(shipping_option_dict));
+  base::Value::Dict amount_dict;
+  amount_dict.Set("currency", "BRL");
+  amount_dict.Set("value", "4,000.32");
+  shipping_option_dict.Set("amount", std::move(amount_dict));
+  shipping_option_dict.Set("id", 123);
+  EXPECT_FALSE(actual.FromValueDict(shipping_option_dict));
 
   // Label must be a string.
-  shipping_option_dict.SetStringKey("id", "123");
-  shipping_option_dict.SetIntKey("label", 123);
-  EXPECT_FALSE(actual.FromValue(shipping_option_dict));
+  shipping_option_dict.Set("id", "123");
+  shipping_option_dict.Set("label", 123);
+  EXPECT_FALSE(actual.FromValueDict(shipping_option_dict));
 
   // Check for trouble with amount.
-  shipping_option_dict.SetStringKey("label", "123");
-  shipping_option_dict.SetStringKey("amount", "123.49 USD");
-  EXPECT_FALSE(actual.FromValue(shipping_option_dict));
+  shipping_option_dict.Set("label", "123");
+  shipping_option_dict.Set("amount", "123.49 USD");
+  EXPECT_FALSE(actual.FromValueDict(shipping_option_dict));
 
-  base::Value bad_amount_dict(base::Value::Type::DICTIONARY);
-  shipping_option_dict.SetKey("amount", std::move(bad_amount_dict));
-  EXPECT_FALSE(actual.FromValue(shipping_option_dict));
+  base::Value::Dict bad_amount_dict;
+  shipping_option_dict.Set("amount", std::move(bad_amount_dict));
+  EXPECT_FALSE(actual.FromValueDict(shipping_option_dict));
 }
 
 // Tests that two shipping option objects are not equal if their property values
diff --git a/components/policy/resources/policy_templates.json b/components/policy/resources/policy_templates.json
index 16abb65..d0cbe20d 100644
--- a/components/policy/resources/policy_templates.json
+++ b/components/policy/resources/policy_templates.json
@@ -16573,13 +16573,13 @@
       'id': 997,
       'caption': '''Autofill username on SAML IdP page''',
       'tags': ['website-sharing', 'local-data-access'],
-      'desc': '''<ph name="PRODUCT_OS_NAME">$2<ex>Google ChromeOS</ex></ph> can try to autofill username field on SAML IdP page during online authentication on the sign-in screen and the lock screen.
+      'desc': '''Specifies a url parameter name which will be used on the SAML IdP login page to autofill the username field.
 
-      It will use user's email assosiated with their <ph name="PRODUCT_OS_NAME">$2<ex>Google ChromeOS</ex></ph> profile, so this setting should be disabled if users are expected to use different emails on SAML IdP page.
+      User's email assosiated with their <ph name="PRODUCT_OS_NAME">$2<ex>Google ChromeOS</ex></ph> profile will be used as a value for the url parameter. So this setting should be disabled if users are expected to use different emails with SAML IdP.
 
-      The string recieved through this policy will be used as a url parameter name on IdP page with user's email as a value.
+      If this setting is unset, users will need to manually enter their username on the SAML IdP login page.
 
-      Server side is expected to be responsible for the mapping between Identity providers and url parameters which they support.''',
+      This policy affects online authentication on sign-in and lock screens.''',
       'arc_support': 'This policy has no effect on Android apps.',
     },
     {
diff --git a/components/policy/resources/policy_templates_de.xtb b/components/policy/resources/policy_templates_de.xtb
index 08eca27..61664d3f 100644
--- a/components/policy/resources/policy_templates_de.xtb
+++ b/components/policy/resources/policy_templates_de.xtb
@@ -13,6 +13,7 @@
       Ist der Wert der Richtlinie keine gültige Domain, dann wird die Richtlinie nicht angewendet.</translation>
 <translation id="1004590217607585595">Einstellungen zur Verwaltung der Web-App</translation>
 <translation id="1006218396155867129">Nicht zulassen, dass Nutzer mit Remote-Zugriff Dateien auf den und vom Remote-Host übertragen können</translation>
+<translation id="1007149936182752368">Bearbeitung von Lesezeichen deaktivieren</translation>
 <translation id="1010151305531217567">Rechte Maustaste als primäre Maustaste festlegen</translation>
 <translation id="1011266755572744012">Gibt die maximal zulässige Anzahl an Blättern an, die der Nutzer während eines einzelnen Druckauftrags drucken kann.
 
@@ -75,6 +76,7 @@
       Unter https://support.google.com/chrome/a?p=Supported_directory_variables findest du eine Liste mit Variablen, aus denen du wählen kannst.
 
       Sollte diese Richtlinie nicht konfiguriert sein, kommt das Standardprofilverzeichnis zum Einsatz.</translation>
+<translation id="1059069692400941670">Import der Standardsuchmaschine bei der ersten Ausführung deaktivieren</translation>
 <translation id="1062011392452772310">Remote-Bescheinigung (Remote Attestation) für das Gerät aktivieren</translation>
 <translation id="1062407476771304334">Ersetzen</translation>
 <translation id="1069489575852947981">Wenn die Richtlinie aktiviert oder nicht konfiguriert ist, wird ein lokales Gerätekonto für die verzögerungsfreie automatische Anmeldung eingerichtet. <ph name="PRODUCT_OS_NAME" /> verwendet die Tastenkombination Strg + Alt + S, um die automatische Anmeldung zu umgehen und stattdessen den Anmeldebildschirm aufzurufen.
@@ -93,6 +95,7 @@
 <translation id="1082802595100075771">Zulassen, dass Nutzer einen anonymen Google-Dienst verwenden, um automatische Beschreibungen für unbeschriftete Bilder zu erhalten</translation>
 <translation id="1087437665304381368">Mit dieser Richtlinie wird nur der <ph name="PRODUCT_OS_NAME" />-Entwicklermodus gesteuert. Wenn du den Zugriff auf Android-Entwickleroptionen verhindern möchtest, musst du die Richtlinie "<ph name="DEVELOPER_TOOLS_DISABLED_POLICY_NAME" />" konfigurieren.</translation>
 <translation id="1087707496788636333">Die Adresse der Chrome Enterprise-Richtlinienliste wird geändert. Bitte ändere sie in deinen Lesezeichen zu <ph name="POLICY_DOCUMENTATION_URL" />.</translation>
+<translation id="1089150222292592899">Nutzername auf der SAML-IdP-Seite automatisch ausfüllen</translation>
 <translation id="1091765729282771296">Websites dürfen den Nutzer um Zugriff auf HID-Geräte bitten</translation>
 <translation id="1095209545735032039">Serial API auf diesen Websites blockieren</translation>
 <translation id="1096105751829466145">Standardsuchmaschine</translation>
@@ -1875,6 +1878,7 @@
 
       Wenn sie auf „Deaktiviert“ gesetzt ist, werden die Komponenten nicht aktualisiert. Für einige Komponenten gelten jedoch Ausnahmen: Updates von Komponenten, die keinen ausführbaren Code enthalten und wesentlich für die Sicherheit des Browsers sind, werden nicht deaktiviert.
       Beispiele für solche Komponenten sind Zertifikatssperrlisten und Unterressourcenfilter.</translation>
+<translation id="2939335382784544151">Import des Browserverlaufs bei der ersten Ausführung aktivieren</translation>
 <translation id="2940127076681735544">Ist für die Richtlinie eine gültige URL angegeben, lädt <ph name="PRODUCT_NAME" /> die Websiteliste von dieser URL herunter und wendet die Regeln so an, als wären sie mit der Richtlinie "<ph name="SITELIST_POLICY_NAME" />" konfiguriert worden.
 
       Wenn die Richtlinie nicht konfiguriert oder keine gültige URL angegeben ist, wird sie von <ph name="PRODUCT_NAME" /> nicht als Regelquelle für den Browserwechsel verwendet.
@@ -2311,6 +2315,7 @@
 
       Ist die Richtlinie nicht konfiguriert, können Nutzer das Hintergrundbild für den Desktop und den Anmeldebildschirm selbst auswählen.</translation>
 <translation id="3315324240256767419">Funktion für ghost-Dialogfelder aktivieren.</translation>
+<translation id="3323819750604111729">Import von Lesezeichen bei der ersten Ausführung aktivieren</translation>
 <translation id="332771718998993005">Hiermit wird der Name von <ph name="PRODUCT_NAME" />-Zielen festgelegt.
 
           Wird für diese Richtlinie ein nicht-leerer String definiert, dann wird dieser als Name für das <ph name="PRODUCT_NAME" />-Ziel verwendet. Andernfalls wird der Gerätename als Zielname verwendet. Ist diese Richtlinie nicht definiert, wird der Gerätename als Zielname verwendet und der Geräteeigentümer oder ein Nutzer der Domain, von der das Gerät verwaltet wird, hat die Möglichkeit, den Namen zu ändern. Der Name darf maximal 24 Zeichen enthalten.</translation>
@@ -2788,6 +2793,7 @@
       Ist die Richtlinie auf 2 gesetzt, wird Werbung auf Websites mit aufdringlichen Werbeanzeigen blockiert.</translation>
 <translation id="3877517141460819966">Integrierter Zwei-Faktor-Authentifizierungsmodus</translation>
 <translation id="3879208481373875102">Liste der Web-Apps konfigurieren, deren Installation erzwungen wurde</translation>
+<translation id="3879700444818346084">Import von gespeicherten Passwörtern bei der ersten Ausführung deaktivieren</translation>
 <translation id="388237772682176890">Da SPDY/3.1 nicht mehr unterstützt wird, wurde diese Richtlinie in M53 eingestellt und in M54 entfernt.
 
       Sie verhindert die Verwendung des SPDY-Protokolls in <ph name="PRODUCT_NAME" />.
@@ -3056,6 +3062,7 @@
       In Kiosksitzungen gibt es keine Frist und keine Benachrichtigungen zum Neustart.
 </translation>
 <translation id="4187576366596772431">WebHID API auf diesen Websites blockieren</translation>
+<translation id="4190316993598857632">Bearbeitung von Lesezeichen aktivieren</translation>
 <translation id="4192388905594723944">URL zur Überprüfung des Client-Authentifizierungs-Tokens für den Remotezugriff</translation>
 <translation id="4203055629055264833">Wenn die Richtlinie aktiviert oder nicht konfiguriert ist, können Nutzer ihre neuesten Ergebnisse der Standardsuchmaschine in einer Seitenleiste anzeigen, indem sie ein Symbol in der Symbolleiste ein- oder ausschalten.
 
@@ -3749,6 +3756,7 @@
 <translation id="5105313908130842249">Verzögerung für die Bildschirmsperre im Akkubetrieb</translation>
 <translation id="5108031557082757679">Deaktivierte, an Geräte gebundene Unternehmensdrucker</translation>
 <translation id="5109383437323376357">Die Verfügbarkeit von Variationen bestimmen</translation>
+<translation id="5120168808610189805">Import der Startseite bei der ersten Ausführung aktivieren</translation>
 <translation id="5124368997194894978">Starten bei anliegender Netzspannung aktivieren</translation>
 <translation id="5130213897914754028">Websites die Nutzung von „SharedArrayBuffers“ nicht erlauben</translation>
 <translation id="5130935469849337738">Übersetzung immer anbieten</translation>
@@ -4421,6 +4429,7 @@
       Dieses Verhalten wird nicht ausgelöst, wenn Safe Browsing durch eine Richtlinie oder den Nutzer deaktiviert wurde. Wenn du die Aktivierung von Safe Browsing erzwingen möchtest, verwende die Richtlinie „<ph name="SAFE_BROWSING_ENABLED_POLICY_NAME" />“ oder „<ph name="SAFE_BROWSING_PROTETION_LEVEL_POLICY_NAME" />“.</translation>
 <translation id="5835312413892670446">Einstellungen für die Bildschirmaufnahme</translation>
 <translation id="5836064773277134605">Vom Host für den Remotezugriff verwendeten UDP-Portbereich einschränken</translation>
+<translation id="583627479140113555">Import von gespeicherten Passwörtern bei der ersten Ausführung aktivieren</translation>
 <translation id="5837898601525273156">Wenn „<ph name="DEVICE_ADVANCED_BATTERY_CHARGE_MODE_DAY_CONFIG_POLICY_NAME" />“ konfiguriert und „<ph name="DEVICE_ADVANCED_BATTERY_CHARGE_MODE_ENABLED_POLICY_NAME" />“ aktiviert ist, ist der intelligente Akkulademodus immer aktiviert, sofern diese Funktion vom Gerät unterstützt wird. Dieser Modus verwendet außerhalb der Arbeitszeit den Standardladealgorithmus und weitere Verfahren, um die Lebensdauer des Akkus zu maximieren. Während der Arbeitszeit wird dagegen das Schnellladen verwendet. Für jeden Tag wird die Zeit, in der das System am intensivsten genutzt wird, durch einen Startzeitpunkt und eine Dauer angegeben.
 
       Wenn die Richtlinie deaktiviert oder nicht konfiguriert ist, ist der intelligente Akkulademodus immer deaktiviert.
@@ -4734,6 +4743,13 @@
       Chrome-Apps werden mit ihrer ID angegeben, z. B. "pjkljhegncpnkpknbcohdijeoejaedia", Android-Apps mit ihrem Paketnamen, z. B. "com.google.android.gm", und Web-Apps mit ihrer URL aus <ph name="WEB_APP_INSTALL_FORCE_LIST_POLICY_NAME" />, z. B. "https://google.com/maps".
 
       Ist diese Richtlinie nicht konfiguriert, können Nutzer die im Launcher angepinnten Apps ändern.</translation>
+<translation id="6183409603139321084"><ph name="PRODUCT_OS_NAME" /> kann versuchen, bei der Onlineauthentifizierung auf dem Anmeldebildschirm und dem Sperrbildschirm das Feld für den Nutzernamen auf der SAML-IdP-Seite automatisch auszufüllen.
+
+      Dabei wird die E-Mail-Adresse des Nutzers verwendet, die mit seinem <ph name="PRODUCT_OS_NAME" />-Profil verknüpft ist. Wenn der Nutzer auf der SAML-IdP-Seite möglicherweise eine andere E-Mail-Adresse verwendet, sollte diese Einstellung also deaktiviert werden.
+
+      Der String, der durch diese Richtlinie empfangen wird, wird als URL-Parametername auf der IdP-Seite verwendet. Die E-Mail-Adresse des Nutzers wird dabei als Wert verwendet.
+
+      Serverseitige Lösungen sind dafür verantwortlich, den Identitätsanbietern die von ihnen unterstützten URL-Parameter zuzuweisen.</translation>
 <translation id="6190367314942602985">Personenbezogene Daten erfassen</translation>
 <translation id="6191963383731098056">Mit dieser Richtlinie können Administratoren die Farbe des Designs von <ph name="PRODUCT_NAME" /> konfigurieren. Der Eingabestring muss ein gültiger Hex-Farbcode mit dem Format „#RRGGBB“ sein.
 
@@ -5262,6 +5278,7 @@
       Gib einen <ph name="SUBJECT_PUBLIC_KEY_INFO" />-Hash an, indem du Folgendes verkettest: den Hash-Algorithmusnamen, das Zeichen "/" sowie die Base64-Codierung dieses Hash-Algorithmus, die auf das DER-codierte <ph name="SUBJECT_PUBLIC_KEY_INFO" /> des angegebenen Zertifikats angewendet wird. Die Base64-Codierung hat dasselbe Format wie ein SPKI-Fingerabdruck. Der einzige erkannte Hash-Algorithmus ist "sha256". Alle anderen werden ignoriert.
 
       Wenn die Richtlinie nicht konfiguriert ist, werden alle Zertifikate, für die eine Certificate Transparency-Offenlegung erforderlich ist und die nicht offengelegt werden, von <ph name="PRODUCT_NAME" /> als nicht vertrauenswürdig behandelt.</translation>
+<translation id="6703381779632216549">Import der Standardsuchmaschine bei der ersten Ausführung aktivieren</translation>
 <translation id="6704445641918520643">Laden von Lazy Login WebUI aktivieren.</translation>
 <translation id="6704515759227307131">Diese Richtlinie ist veraltet und wurde durch "AdvancedProtectionAllowed" ersetzt.
 
@@ -6203,15 +6220,6 @@
 <translation id="7687943045976362719">Wenn diese Richtlinie konfiguriert ist, wird für alle angegebenen Inhaltstypen <ph name="PRODUCT_FRAME_NAME" /> verwendet.
 
           Ist die Richtlinie nicht konfiguriert, kommt der Standardrenderer für alle Websites zum Einsatz. Anhand der Richtlinie "<ph name="CHROME_FRAME_RENDERER_SETTINGS_POLICY_NAME" />" kann der Standardrenderer konfiguriert werden.</translation>
-<translation id="7694807474048279351">Hiermit wird ein automatischer Neustart nach einem Update von <ph name="PRODUCT_OS_NAME" /> geplant.
-
-      Ist diese Richtlinie auf "true" gesetzt, ist ein automatischer Neustart geplant, nachdem <ph name="PRODUCT_OS_NAME" /> aktualisiert wurde und ein Neustart erforderlich ist, um den Updatevorgang abzuschließen. Die Ausführung des Neustarts ist sofort geplant, kann aber bis zu 24 Stunden auf dem Gerät verzögert werden, wenn das Gerät gerade von einem Nutzer verwendet wird.
-
-      Ist diese Richtlinie auf "false" gesetzt, ist nach einem Update von <ph name="PRODUCT_OS_NAME" /> kein automatischer Neustart geplant. Der Updatevorgang wird abgeschlossen, sobald der Nutzer das Gerät das nächste Mal neu startet.
-
-      Wenn du diese Richtlinie konfigurierst, können die Nutzer sie nicht ändern oder außer Kraft setzen.
-
-      Hinweis: Automatische Neustarts sind derzeit nur aktiviert, wenn die Anmeldeseite angezeigt wird oder eine Kiosk-App-Sitzung läuft. Dies wird zukünftig geändert, sodass die Richtlinie immer gilt, unabhängig davon, ob und welche Sitzung aktiv ist.</translation>
 <translation id="7696412993033202071">Starten von externen Authentifizierungs-Apps bei Aufruf von URLs</translation>
 <translation id="7701341006446125684">Cache-Größe für Apps und Erweiterungen in Byte festlegen</translation>
 <translation id="770339941914297201">Neues Verhalten: Kiosk-Chrome-Apps werden nur anhand der von der Richtlinie stammenden Update-URL aktualisiert</translation>
@@ -6252,6 +6260,7 @@
 <translation id="77379430721695807">Wenn du diese Richtlinie konfigurierst, gibst du eine Liste von URLs an, deren Muster mit dem SecurityOrigin-Objekt der anfragenden URL abgeglichen werden. Bei einer Übereinstimmung wird ohne Nachfrage Zugriff auf Videoaufnahmegeräte gewährt.
 
       Genaue Informationen zu gültigen <ph name="URL_LABEL" />-Mustern findest du unter https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.</translation>
+<translation id="7740644123648617252">Import von Daten zum automatischen Ausfüllen von Formularen bei der ersten Ausführung aktivieren</translation>
 <translation id="7744253761377202223">Bildschirmhelligkeit im Netzbetrieb in Prozent</translation>
 <translation id="7747447585227954402">Geräten erlauben, <ph name="PLUGIN_VM_NAME" /> auf <ph name="PRODUCT_OS_NAME" /> zu verwenden</translation>
 <translation id="7749024457938190837">Erweiterungen, die den Bestätigungsdialog beim Senden von Druckaufträgen über "chrome.printing API" überspringen dürfen</translation>
@@ -6409,6 +6418,7 @@
 <translation id="7925224837072026018">Ist die Richtlinie konfiguriert, wird Erweiterungen oder Android-Apps Zugriff auf Schlüssel für die geschäftliche Nutzung gewährt. Schlüssel sind ausschließlich für die geschäftliche Nutzung bestimmt, wenn sie über die chrome.enterprise.platformKeys API eines verwalteten Kontos generiert wurden. Nutzer können den Zugriff auf Schlüssel zur geschäftlichen Nutzung für Erweiterungen oder Android-Apps weder erteilen noch verweigern.
 
       Eine Erweiterung oder Android-App kann Schlüssel, die für die geschäftliche Nutzung bestimmt sind, standardmäßig nicht verwenden. Dies entspricht der Festlegung von „False“ für „allowCorporateKeyUsage“ bei der entsprechenden Erweiterung oder Android-App. Nur wenn „allowCorporateKeyUsage“ für eine Erweiterung oder Android-App auf „True“ gesetzt ist, kann sie alle Plattformschlüssel nutzen, die für die geschäftliche Nutzung bestimmt sind, um beliebige Daten zu signieren. Diese Berechtigung sollte nur dann gewährt werden, wenn der Zugriff auf den Schlüssel durch die Erweiterung oder Android-App sicher vor Angreifern schützt wird.</translation>
+<translation id="793188693675675950">Import der Startseite bei der ersten Ausführung deaktivieren</translation>
 <translation id="7933141401888114454">Erstellung von betreuten Nutzern aktivieren</translation>
 <translation id="793473937901685727">Verfügbarkeit von Zertifikaten für ARC-Apps festlegen</translation>
 <translation id="7936302526928951356">Im User-Agent-String wird die Hauptversion nicht festgeschrieben.</translation>
@@ -7075,6 +7085,7 @@
       Ab Version 92 von <ph name="PRODUCT_NAME" /> wird diese Richtlinie auch im monitorlosen Modus unterstützt.
 
       Hinweis: Wenn interne „chrome://*“-URLs blockiert werden, können unerwartete Fehler auftreten.</translation>
+<translation id="8619748440665904084">Import von Daten zum automatischen Ausfüllen von Formularen bei der ersten Ausführung deaktivieren</translation>
 <translation id="8623672932476443039">Wenn die Richtlinie aktiviert ist, können Nutzer den Entwicklermodus für isolierte Apps nutzen.
       Ist sie deaktiviert, können Nutzer diese Funktion nicht nutzen.
       Wenn die Richtlinie nicht konfiguriert ist, kann die Funktion nicht standardmäßig von durch Unternehmen verwalteten Nutzern unter Chrome OS verwendet werden – für alle anderen Nutzer und Betriebssysteme ist sie jedoch verfügbar.</translation>
@@ -7121,6 +7132,7 @@
       Ist diese Richtlinie deaktiviert oder nicht konfiguriert, kann der Host für den Remotezugriff mit jedem lokalen Nutzer verknüpft sein.</translation>
 <translation id="867708016260789630">Auf YouTube mindestens den eingeschränkten Modus „Moderat“ erzwingen</translation>
 <translation id="8677853537025397834">WebHID API auf diesen Websites erlauben</translation>
+<translation id="8685018726115727387">Import des Browserverlaufs bei der ersten Ausführung deaktivieren</translation>
 <translation id="8685024486845674965">Die Passwortschutzwarnung wird durch die Wiederverwendung eines Passworts ausgelöst</translation>
 <translation id="8685680544554917389">Wenn die Richtlinie auf "True" gesetzt ist, kann <ph name="PRODUCT_NAME" /> Medien automatisch abspielen. Wenn die Richtlinie auf "False" gesetzt ist, kann <ph name="PRODUCT_NAME" /> Medien nicht mehr automatisch abspielen.
 
@@ -7492,6 +7504,7 @@
 
       Ist die Richtlinie deaktiviert, werden die Zeiten von registrierten Geräten weder aufgezeichnet noch gemeldet.</translation>
 <translation id="9077227880520270584">Timer für automatische Anmeldung in lokalem Gerätekonto</translation>
+<translation id="9079531125758468956">Import von Lesezeichen bei der ersten Ausführung deaktivieren</translation>
 <translation id="9084985621503260744">Angaben zum Einfluss von Videoaktivitäten auf den Energiesparmodus</translation>
 <translation id="9087434639296483430">Anmelde-/Abmeldeereignisse auf angemeldeten Geräten melden, darunter fehlgeschlagene Anmeldeversuche.
 
diff --git a/components/policy/resources/policy_templates_es-419.xtb b/components/policy/resources/policy_templates_es-419.xtb
index d1215b1..22a13c5f 100644
--- a/components/policy/resources/policy_templates_es-419.xtb
+++ b/components/policy/resources/policy_templates_es-419.xtb
@@ -6300,15 +6300,6 @@
 <translation id="7687943045976362719">Si se configura esta política, <ph name="PRODUCT_FRAME_NAME" /> determinará los tipos de contenido especificados.
 
           Si no se configura esta política, se usará el procesador determinado en todos los sitios. (Se puede usar la política <ph name="CHROME_FRAME_RENDERER_SETTINGS_POLICY_NAME" /> para configurar este procesador).</translation>
-<translation id="7694807474048279351">Programa un reinicio automático después de aplicar una actualización de <ph name="PRODUCT_OS_NAME" />.
-
-      Si esta política se establece como verdadera, se programa un reinicio automático cuando se aplica una actualización de <ph name="PRODUCT_OS_NAME" /> y se requiere un reinicio para completar el proceso de actualización. El reinicio se programa de inmediato, pero puede demorarse en el dispositivo hasta 24 horas si un usuario está usando el dispositivo en ese momento.
-
-      Si esta política se establece como falsa, no se programa un reinicio automático después de aplicar una actualización de <ph name="PRODUCT_OS_NAME" />. El proceso de actualización se completa cuando el usuario reinicia el dispositivo.
-
-      Si estableces esta política, los usuarios no podrán modificarla ni anularla.
-
-      Nota: Actualmente, los reinicios automáticos solo se habilitan cuando se muestra la pantalla de acceso o cuando hay una sesión de la aplicación de kiosco en curso. Esta restricción se modificará en el futuro, y la política se aplicará en todo momento, sin importar si hay alguna sesión en curso.</translation>
 <translation id="7696412993033202071">URLs de inicio de apps de autenticador externas</translation>
 <translation id="7701341006446125684">Establecer tamaño de caché de apps y extensiones (en bytes)</translation>
 <translation id="770339941914297201">Nuevo comportamiento: Las apps de Chrome para kiosco solo se actualizarán con la URL de actualización que se encuentra en la política</translation>
diff --git a/components/policy/resources/policy_templates_es.xtb b/components/policy/resources/policy_templates_es.xtb
index 1545922..309f3bc5 100644
--- a/components/policy/resources/policy_templates_es.xtb
+++ b/components/policy/resources/policy_templates_es.xtb
@@ -6297,15 +6297,6 @@
 <translation id="7687943045976362719">Si se asigna un valor a esta política, <ph name="PRODUCT_FRAME_NAME" /> gestiona los tipos de contenido especificados.
 
           Si no se asigna ningún valor a esta política, se usará el procesador predeterminado para todos los sitios web. Se puede usar la política <ph name="CHROME_FRAME_RENDERER_SETTINGS_POLICY_NAME" /> para configurar el procesador predeterminado.</translation>
-<translation id="7694807474048279351">Programa un reinicio automático después de haberse aplicado una actualización de <ph name="PRODUCT_OS_NAME" />.
-
-      Si el valor de esta política se establece en True, se programará un reinicio automático cuando se haya aplicado una actualización de <ph name="PRODUCT_OS_NAME" /> y sea necesario reiniciar para que se complete el proceso de actualización. El reinicio se programa para que se realice en el dispositivo de forma inmediata, pero se puede retrasar hasta 24 horas si un usuario está utilizando el dispositivo en ese momento.
-
-      Si el valor de esta política se establece en False, no se programará un reinicio automático después de aplicar una actualización de <ph name="PRODUCT_OS_NAME" />. El proceso de actualización se completa cuando el usuario vuelve a reiniciar el dispositivo.
-
-      Si estableces esta política, los usuarios no podrán modificarla ni anularla.
-
-      Nota: En este momento, los reinicios automáticos solo se habilitan cuando se muestra la pantalla de inicio de sesión o está en curso una sesión de una aplicación de kiosco. Esta restricción se modificará en el futuro, y la política se aplicará en todo momento, independientemente de si un determinado tipo de sesión está o no en curso.</translation>
 <translation id="7696412993033202071">URLs externas de lanzamiento de aplicación de autenticación</translation>
 <translation id="7701341006446125684">Establecer el tamaño de caché de aplicaciones y extensiones (en bytes)</translation>
 <translation id="770339941914297201">Comportamiento nuevo: las aplicaciones de kiosco de Chrome solo se actualizarán con la URL de actualización de la política</translation>
diff --git a/components/policy/resources/policy_templates_fr.xtb b/components/policy/resources/policy_templates_fr.xtb
index c2c37f2..1256d374 100644
--- a/components/policy/resources/policy_templates_fr.xtb
+++ b/components/policy/resources/policy_templates_fr.xtb
@@ -6240,16 +6240,6 @@
 
 
 Dans le cas contraire, le moteur de rendu par défaut sera utilisé pour tous les sites. (La règle <ph name="CHROME_FRAME_RENDERER_SETTINGS_POLICY_NAME" /> peut être utilisée pour configurer le moteur de rendu par défaut.)</translation>
-<translation id="7694807474048279351">Planifie un démarrage automatique après une mise à jour de <ph name="PRODUCT_OS_NAME" />.
-
-      Si vous définissez cette règle sur "True", un démarrage automatique est planifié après la mise à jour de <ph name="PRODUCT_OS_NAME" /> et le redémarrage de l'appareil. Le redémarrage est planifié immédiatement, mais peut être reporté de 24 heures
-au maximum si un utilisateur se sert de l'appareil.
-
-      Si vous définissez cette règle sur "False", aucun redémarrage automatique n'est planifié après la mise à jour de <ph name="PRODUCT_OS_NAME" />. La mise à jour est terminée lorsque l'utilisateur redémarre l'appareil.
-
-      Si vous définissez cette règle, les utilisateurs ne peuvent pas la modifier ni l'ignorer.
-
-      Remarque : Pour le moment, les redémarrages automatiques ne sont activés que lorsque l'écran de connexion est affiché ou qu'une session d'application kiosque est en cours. Ce fonctionnement va changer prochainement : la règle s'appliquera toujours, qu'une session de n'importe quel type soit en cours ou non.</translation>
 <translation id="7696412993033202071">URL de lancement de l'appli d'authentification externe</translation>
 <translation id="7701341006446125684">Régler la taille du cache pour les applications et les extensions (en octets)</translation>
 <translation id="770339941914297201">Nouveau comportement : les applis Chrome Kiosk ne seront mises à jour qu'avec l'URL de mise à jour fournie par la règle</translation>
diff --git a/components/policy/resources/policy_templates_id.xtb b/components/policy/resources/policy_templates_id.xtb
index 91bf308..219c5349 100644
--- a/components/policy/resources/policy_templates_id.xtb
+++ b/components/policy/resources/policy_templates_id.xtb
@@ -6310,15 +6310,6 @@
 <translation id="7687943045976362719">Jika kebijakan ini ditetapkan, jenis konten yang ditentukan akan ditangani oleh <ph name="PRODUCT_FRAME_NAME" />.
 
           Jika kebijakan ini tidak ditetapkan, perender default akan digunakan untuk semua situs. (Kebijakan <ph name="CHROME_FRAME_RENDERER_SETTINGS_POLICY_NAME" /> dapat digunakan untuk mengonfigurasi perender default.)</translation>
-<translation id="7694807474048279351">Menjadwalkan mulai ulang otomatis setelah pembaruan <ph name="PRODUCT_OS_NAME" /> diterapkan.
-
-      Saat kebijakan ini disetel ke true, mulai ulang otomatis akan dijadwalkan saat pembaruan <ph name="PRODUCT_OS_NAME" /> diterapkan dan diperlukan mulai ulang untuk menyelesaikan proses pembaruan. Mulai ulang dijadwalkan langsung namun mungkin ditunda di perangkat hingga 24 jam jika pengguna sedang menggunakan perangkat.
-
-      Saat kebijakan ini disetel ke false, mulai ulang otomatis tidak akan dijadwalkan setelah menerapkan pembaruan <ph name="PRODUCT_OS_NAME" />. Proses pembaruan diselesaikan saat pengguna memulai ulang perangkat lagi.
-
-      Jika Anda menyetel kebijakan ini, pengguna tidak dapat mengubah atau menimpanya.
-
-      Catatan: Saat ini, mulai ulang otomatis hanya diaktifkan saat layar masuk ditampilkan atau sesi aplikasi kios sedang berjalan. Hal ini akan berubah di masa mendatang dan kebijakan akan terus diterapkan, terlepas dari apakah sesi dari jenis tertentu apa pun sedang dijalankan atau tidak.</translation>
 <translation id="7696412993033202071">URL peluncuran aplikasi autentikasi eksternal</translation>
 <translation id="7701341006446125684">Menyetel ukuran cache Ekstensi dan Aplikasi (dalam byte)</translation>
 <translation id="770339941914297201">Perilaku baru: Aplikasi Kiosk Chrome hanya akan diupdate menggunakan URL update dari kebijakan</translation>
diff --git a/components/policy/resources/policy_templates_it.xtb b/components/policy/resources/policy_templates_it.xtb
index 35221169..9372276c 100644
--- a/components/policy/resources/policy_templates_it.xtb
+++ b/components/policy/resources/policy_templates_it.xtb
@@ -6268,16 +6268,6 @@
 <translation id="7687943045976362719">Se questa norma viene impostata, i tipi di contenuto specificati vengono gestiti da <ph name="PRODUCT_FRAME_NAME" />.
 
           Se la norma non viene impostata, verrà utilizzato per tutti i siti il renderer predefinito. (È possibile utilizzare la norma <ph name="CHROME_FRAME_RENDERER_SETTINGS_POLICY_NAME" /> per configurare il renderer predefinito).</translation>
-<translation id="7694807474048279351">Consente di pianificare un riavvio automatico in seguito all'applicazione di un aggiornamento di <ph name="PRODUCT_OS_NAME" />.
-
-Se questa norma viene impostata su true, viene pianificato un riavvio automatico in seguito all'applicazione di un aggiornamento di <ph name="PRODUCT_OS_NAME" /> e quando è necessario un riavvio per completare la procedura di aggiornamento. Il riavvio viene programmato subito ma potrebbe essere ritardato sul dispositivo di massimo 24 ore se un utente sta utilizzando il dispositivo.
-
-
-Se la norma viene impostata su false, non vengono programmati riavvii automatici in seguito all'applicazione di un aggiornamento di <ph name="PRODUCT_OS_NAME" />. La procedura di aggiornamento viene completata al successivo riavvio del dispositivo.
-
-Se la norma viene impostata gli utenti non potranno modificarla o ignorarla.
-
-Nota. Attualmente i riavvii automatici vengono attivati soltanto durante la visualizzazione della schermata di accesso o durante una sessione di un'app kiosk. Questo comportamento cambierà in futuro e la norma sarà sempre valida, a prescindere dal fatto che sia in corso o meno una sessione di tipo specifico.</translation>
 <translation id="7696412993033202071">URL lancio app di autenticazione esterne</translation>
 <translation id="7701341006446125684">Imposta le dimensioni della cache di app ed estensioni (in byte)</translation>
 <translation id="770339941914297201">Nuovo comportamento: le app di Chrome Kiosk verranno aggiornate solo utilizzando l'URL di aggiornamento dal criterio</translation>
diff --git a/components/policy/resources/policy_templates_ja.xtb b/components/policy/resources/policy_templates_ja.xtb
index 32a2750e..28dc94f5 100644
--- a/components/policy/resources/policy_templates_ja.xtb
+++ b/components/policy/resources/policy_templates_ja.xtb
@@ -5927,15 +5927,6 @@
 <translation id="7687943045976362719">このポリシーが設定されている場合、指定されたコンテンツ タイプは <ph name="PRODUCT_FRAME_NAME" /> で処理されます。
 
           このポリシーが未設定の場合、デフォルトのレンダラがすべてのサイトで使用されます(<ph name="CHROME_FRAME_RENDERER_SETTINGS_POLICY_NAME" /> ポリシーを使用してデフォルトのレンダラを設定することもできます)。</translation>
-<translation id="7694807474048279351"><ph name="PRODUCT_OS_NAME" /> のアップデート適用後に自動的に再起動するように設定します。
-
-      このポリシーを true に設定すると、<ph name="PRODUCT_OS_NAME" /> のアップデートが適用されてアップデート プロセスを完了するために再起動が必要な場合に、自動再起動が行われます。再起動はすぐに行うようにスケジュール設定されますが、その時間にユーザーがデバイスを使用していた場合、自動再起動の実行は最大 24 時間延期されます。
-
-      このポリシーを false に設定すると、<ph name="PRODUCT_OS_NAME" /> のアップデート適用後に自動再起動は行われません。ユーザーが次回デバイスを再起動したときにアップデート プロセスが完了します。
-
-      管理者がこのポリシーを設定した場合は、ユーザーがその設定を変更したり、別の優先する設定を指定したりすることはできません。
-
-      注: 現時点では、自動再起動が有効化されるのはログイン画面が表示されている間、またはキオスク アプリ セッションが進行中であるときに限られます。これは将来変更される予定であり、進行中のセッションの種類にかかわらず、ポリシーは常に適用されるようになります。</translation>
 <translation id="7696412993033202071">外部認証アプリの起動用 URL</translation>
 <translation id="7701341006446125684">アプリと拡張機能のキャッシュ サイズを設定する(バイト単位)</translation>
 <translation id="770339941914297201">新しい動作: キオスク Chrome アプリで、ポリシーの更新 URL を使用した更新のみ行う</translation>
diff --git a/components/policy/resources/policy_templates_ko.xtb b/components/policy/resources/policy_templates_ko.xtb
index d011b4d..37cd7693 100644
--- a/components/policy/resources/policy_templates_ko.xtb
+++ b/components/policy/resources/policy_templates_ko.xtb
@@ -6293,15 +6293,6 @@
 <translation id="7687943045976362719">이 정책이 설정되면 특정 콘텐츠 유형은 <ph name="PRODUCT_FRAME_NAME" />에서 처리됩니다.
 
           이 정책이 설정되지 않으면 모든 사이트에서 기본 렌더기가 사용됩니다. 기본 렌더기 설정 시 <ph name="CHROME_FRAME_RENDERER_SETTINGS_POLICY_NAME" /> 정책이 사용됩니다.</translation>
-<translation id="7694807474048279351"><ph name="PRODUCT_OS_NAME" /> 업데이트가 적용된 후 자동 재부팅을 예약합니다.
-
-      이 정책이 true로 설정된 경우 <ph name="PRODUCT_OS_NAME" /> 업데이트가 적용된 상태일 때 자동 재부팅이 예약되며, 업데이트 프로세스를 완료하기 위한 재부팅이 필요합니다. 재부팅은 즉시 예약되지만 현재 사용자가 기기를 사용 중인 경우 기기에서 최대 24시간까지 지연될 수 있습니다.
-
-      이 정책이 false로 설정된 경우 <ph name="PRODUCT_OS_NAME" /> 업데이트가 적용된 상태이더라도 자동 재부팅이 예약되지 않습니다. 사용자가 다음번에 기기를 재부팅할 때 업데이트 프로세스가 완료됩니다.
-
-      이 정책을 설정하는 경우 사용자가 정책을 변경하거나 무시할 수 없습니다.
-
-      참고: 현재 로그인 화면이 표시되고 있거나 키오스크 앱 세션이 진행 중인 경우에 한해 자동 재부팅을 사용하도록 설정됩니다. 이후에는 이 내용이 변경되어 특정 유형의 세션이 진행 중인지 여부와 관계 없이 정책이 항상 적용됩니다.</translation>
 <translation id="7696412993033202071">외부 인증 앱 실행 URL</translation>
 <translation id="7701341006446125684">앱 및 확장 프로그램 캐시 크기 설정(단위: 바이트)</translation>
 <translation id="770339941914297201">새 동작: 키오스크 Chrome 앱이 정책의 업데이트 URL만 사용하여 업데이트됨</translation>
diff --git a/components/policy/resources/policy_templates_nl.xtb b/components/policy/resources/policy_templates_nl.xtb
index 8f743c59..f99cc22 100644
--- a/components/policy/resources/policy_templates_nl.xtb
+++ b/components/policy/resources/policy_templates_nl.xtb
@@ -6197,15 +6197,6 @@
 <translation id="7687943045976362719">Als dit beleid is ingesteld, worden de opgegeven contenttypen verwerkt door <ph name="PRODUCT_FRAME_NAME" />.
 
           Als dit beleid niet is ingesteld, wordt het standaard weergaveprogramma gebruikt voor alle sites. (Het beleid <ph name="CHROME_FRAME_RENDERER_SETTINGS_POLICY_NAME" /> kan worden gebruikt om het standaard weergaveprogramma te configureren.)</translation>
-<translation id="7694807474048279351">Plan dat het apparaat automatisch opnieuw opstart nadat een update van <ph name="PRODUCT_OS_NAME" /> is uitgevoerd.
-
-      Als dit beleid is ingesteld op True, start het apparaat automatisch opnieuw op wanneer een update van <ph name="PRODUCT_OS_NAME" /> is uitgevoerd en opnieuw opstarten vereist is om het updateproces te voltooien. Het opnieuw opstarten is onmiddellijk gepland maar kan op het apparaat tot 24 uur worden uitgesteld als een gebruiker het apparaat op dat moment gebruikt.
-
-      Als dit beleid is ingesteld op False, start het apparaat niet automatisch opnieuw op nadat een update van <ph name="PRODUCT_OS_NAME" /> is uitgevoerd. Het updateproces wordt voltooid wanneer de gebruiker het apparaat opnieuw opstart.
-
-      Als je dit beleid instelt, kunnen gebruikers het niet wijzigen of negeren.
-
-      Opmerking: momenteel is automatisch opnieuw opstarten alleen mogelijk als het inlogscherm wordt getoond of een kiosk-appsessie wordt verwerkt. Dit zal in de toekomst veranderen en het beleid zal altijd worden toegepast, ongeacht of er een sessie van een bepaald type in verwerking is.</translation>
 <translation id="7696412993033202071">Externe authenticator-app lanceert URL's</translation>
 <translation id="7701341006446125684">Formaat van cache voor apps en extensies instellen (in bytes)</translation>
 <translation id="770339941914297201">Nieuw gedrag: Chrome-kiosk-apps worden alleen geüpdatet via de update-URL uit het beleid</translation>
diff --git a/components/policy/resources/policy_templates_pt-BR.xtb b/components/policy/resources/policy_templates_pt-BR.xtb
index 585a1a3..7cd0592c 100644
--- a/components/policy/resources/policy_templates_pt-BR.xtb
+++ b/components/policy/resources/policy_templates_pt-BR.xtb
@@ -13,6 +13,7 @@
       Se o valor da política não for um domínio válido, a política não será aplicada.</translation>
 <translation id="1004590217607585595">Configurações de gerenciamento de apps da Web</translation>
 <translation id="1006218396155867129">Impedir que usuários de acesso remoto transfiram arquivos do host remoto e para ele</translation>
+<translation id="1007149936182752368">Desativar a edição de favoritos</translation>
 <translation id="1010151305531217567">Usar o botão direito do mouse como o principal</translation>
 <translation id="1011266755572744012">Especifica o número máximo de páginas que o usuário pode imprimir para um único trabalho de impressão.
 
@@ -75,6 +76,7 @@
       Acesse https://support.google.com/chrome/a?p=Supported_directory_variables para ver uma lista das variáveis que podem ser usadas.
 
       Se a política não for definida, o diretório padrão do perfil será utilizado.</translation>
+<translation id="1059069692400941670">Desativar a importação do mecanismo de pesquisa padrão na primeira execução</translation>
 <translation id="1062011392452772310">Ativar declaração remota para o dispositivo</translation>
 <translation id="1062407476771304334">Substituir</translation>
 <translation id="1069489575852947981">Definir a política como "Ativada" ou deixá-la sem definição faz com que uma conta local do dispositivo seja configurada para login automático sem atraso. O <ph name="PRODUCT_OS_NAME" /> aplica o atalho de teclado Ctrl+Alt+S para ignorar o login automático e mostrar a tela de login.
@@ -93,6 +95,7 @@
 <translation id="1082802595100075771">Permitir que os usuários escolham usar um Serviço do Google anônimo para oferecer descrições automáticas para imagens que não têm um texto alternativo</translation>
 <translation id="1087437665304381368">Essa política controla apenas o modo de desenvolvedor do <ph name="PRODUCT_OS_NAME" />. Se quiser impedir o acesso às Opções do desenvolvedor do Android, configure a política <ph name="DEVELOPER_TOOLS_DISABLED_POLICY_NAME" />.</translation>
 <translation id="1087707496788636333">A lista de políticas do Chrome Enterprise está de mudança. Atualize seus favoritos para <ph name="POLICY_DOCUMENTATION_URL" />.</translation>
+<translation id="1089150222292592899">Preencher automaticamente o nome de usuário na página do IdP SAML</translation>
 <translation id="1091765729282771296">Permitir que sites peçam ao usuário para conceder acesso ao dispositivo HID</translation>
 <translation id="1095209545735032039">Bloquear a API Serial nesses sites</translation>
 <translation id="1096105751829466145">Provedor de pesquisa padrão</translation>
@@ -1895,6 +1898,7 @@
 
       Se a política for desativada, as atualizações dos componentes também serão desativadas. No entanto, alguns componentes estarão isentos desta política: as atualizações de componentes que não contenham código executável e sejam essenciais para a segurança do navegador não serão desativadas.
       Entre os exemplos desses componentes estão as listas de revogação de certificados e os filtros de recursos secundários.</translation>
+<translation id="2939335382784544151">Ativar a importação do histórico de navegação na primeira execução</translation>
 <translation id="2940127076681735544">Se a política for definida como um URL válido, o <ph name="PRODUCT_NAME" /> fará o download da lista de sites desse URL e aplicará as regras como se tivessem sido configuradas com a política <ph name="SITELIST_POLICY_NAME" />.
 
       Se ela não for definida ou for definida como um URL inválido, o <ph name="PRODUCT_NAME" /> não a usará como fonte de regras para uma troca de navegador.
@@ -2328,6 +2332,7 @@
 
       Se a política não for definida, os usuários escolherão a imagem de plano de fundo da área de trabalho e da tela de login.</translation>
 <translation id="3315324240256767419">Ativar o recurso de janela fantasma.</translation>
+<translation id="3323819750604111729">Ativar a importação de favoritos na primeira execução</translation>
 <translation id="332771718998993005">Determina o nome anunciado como um destino do <ph name="PRODUCT_NAME" />.
 
           Se essa política for definida como uma string não vazia, essa string será usada como o nome do destino do <ph name="PRODUCT_NAME" />. Caso contrário, o nome do destino será o nome do dispositivo. Se essa política não for definida, o nome do destino será o nome do dispositivo, e o proprietário do dispositivo (ou um usuário do domínio que está gerenciando o dispositivo) poderá alterá-lo. O nome é limitado a 24 caracteres.</translation>
@@ -2804,6 +2809,7 @@
       Se a política for definida como 2, os anúncios serão bloqueados em sites com anúncios invasivos.</translation>
 <translation id="3877517141460819966">Modo de autenticação de segundo fator integrado</translation>
 <translation id="3879208481373875102">Configurar a lista de apps da Web de instalação forçada</translation>
+<translation id="3879700444818346084">Desativar a importação de senhas salvas na primeira execução</translation>
 <translation id="388237772682176890">O uso dessa política foi suspenso no M53 e removido no M54, porque a compatibilidade com o SPDY/3.1 foi removida.
 
       Desativa o uso do protocolo SPDY no <ph name="PRODUCT_NAME" />.
@@ -3084,6 +3090,7 @@
       Nas sessões de quiosque, não há um período de carência nem notificações sobre a reinicialização.
 </translation>
 <translation id="4187576366596772431">Bloquear a API WebHID nesses sites</translation>
+<translation id="4190316993598857632">Ativar a edição de favoritos</translation>
 <translation id="4192388905594723944">URL para validação do token de autenticação do cliente de acesso remoto</translation>
 <translation id="4203055629055264833">Se a política for definida como "Ativada" ou for deixada sem definição, os usuários vão poder ver a página de resultados mais recente do mecanismo de pesquisa padrão em um painel lateral ao ativar um ícone na barra de ferramentas.
 
@@ -3779,6 +3786,7 @@
 <translation id="5105313908130842249">Intervalo de bloqueio da tela no funcionamento com energia da bateria</translation>
 <translation id="5108031557082757679">Impressoras empresariais desativadas</translation>
 <translation id="5109383437323376357">Determinar a disponibilidade de variações</translation>
+<translation id="5120168808610189805">Ativar a importação da página inicial na primeira execução</translation>
 <translation id="5124368997194894978">Ativar inicialização em CA (corrente alternada)</translation>
 <translation id="5130213897914754028">Evitar que os sites usem o SharedArrayBuffers</translation>
 <translation id="5130935469849337738">Sempre oferecer tradução</translation>
@@ -4459,6 +4467,7 @@
       Esse comportamento não será acionado se o Navegação segura estiver desativado, seja por uma política ou pelo usuário. Para forçar o uso do Navegação segura, use a política <ph name="SAFE_BROWSING_ENABLED_POLICY_NAME" /> ou a <ph name="SAFE_BROWSING_PROTETION_LEVEL_POLICY_NAME" />.</translation>
 <translation id="5835312413892670446">Configurações de captura de tela</translation>
 <translation id="5836064773277134605">Restringir o intervalo de portas UDP usado pelo host de acesso remoto</translation>
+<translation id="583627479140113555">Ativar a importação de senhas salvas na primeira execução</translation>
 <translation id="5837898601525273156">Se <ph name="DEVICE_ADVANCED_BATTERY_CHARGE_MODE_DAY_CONFIG_POLICY_NAME" /> estiver definida, a definição de <ph name="DEVICE_ADVANCED_BATTERY_CHARGE_MODE_ENABLED_POLICY_NAME" /> como "Ativada" manterá a política avançada de gerenciamento de energia para o modo de carregamento da bateria ativada, se ela for compatível com o dispositivo. Esse modo permite que os usuários maximizem a integridade da bateria ao usar um algoritmo de carregamento padrão e outras técnicas fora do horário de trabalho. Durante o horário de trabalho, o sistema usa um carregamento expresso, que permite que a bateria carregue mais rapidamente. Para cada dia, especifique o período em que o sistema será mais utilizado pelo horário de início e a duração.
 
       Se a política for definida como "Desativada" ou não for definida, o modo avançado de carregamento da bateria ficará desativado.
@@ -4782,6 +4791,13 @@
       Especifique apps do Chrome pelos IDs deles (como pjkljhegncpnkpknbcohdijeoejaedia), apps Android pelos nomes de pacote deles (como com.google.android.gm) e apps da Web pelo URL usado em <ph name="WEB_APP_INSTALL_FORCE_LIST_POLICY_NAME" /> (como https://google.com/maps).
 
       Se a política não for definida, os usuários poderão mudar a lista de apps fixados no acesso rápido.</translation>
+<translation id="6183409603139321084">O <ph name="PRODUCT_OS_NAME" /> pode tentar preencher automaticamente o campo de nome de usuário na página do IdP SAML durante a autenticação on-line na tela de login e na tela de bloqueio.
+
+      Ele vai usar o e-mail do usuário associado ao perfil do <ph name="PRODUCT_OS_NAME" />. Por isso, essa configuração precisará ser desativada se os usuários tiverem que usar e-mails diferentes na página do IdP SAML.
+
+      A string recebida por essa política vai ser usada como o nome de um parâmetro de URL na página do IdP, com o e-mail do usuário como um valor.
+
+      O esperado é que o lado do servidor seja responsável pelo mapeamento entre os provedores de identidade e os parâmetros de URL com suporte.</translation>
 <translation id="6190367314942602985">Reportar informações de identificação do usuário</translation>
 <translation id="6191963383731098056">Esta política permite que os administradores configurem a cor do tema do <ph name="PRODUCT_NAME" />. Para isso, a string de entrada precisa ser de uma cor hexadecimal válida compatível com o formato "#RRGGBB".
 
@@ -5324,6 +5340,7 @@
       Especifique um hash <ph name="SUBJECT_PUBLIC_KEY_INFO" /> vinculando o nome do algoritmo dele, uma barra e a codificação Base64 desse algoritmo de hash aplicado ao <ph name="SUBJECT_PUBLIC_KEY_INFO" /> codificado por DER do certificado especificado. O formato de codificação Base64 corresponde ao de uma impressão digital SPKI. O único algoritmo de hash reconhecido é sha256, enquanto os outros são ignorados.
 
       Deixar esta política sem definição significa que se os certificados que precisam ser divulgados via Transparência dos certificados não o forem, o <ph name="PRODUCT_NAME" /> não confiará nesses certificados.</translation>
+<translation id="6703381779632216549">Ativar a importação do mecanismo de pesquisa padrão na primeira execução</translation>
 <translation id="6704445641918520643">Ativar o carregamento de Lazy Login WebUI.</translation>
 <translation id="6704515759227307131">Esta política está obsoleta e foi substituída pela AdvancedProtectionAllowed.
 
@@ -6267,15 +6284,6 @@
 <translation id="7687943045976362719">Se esta política for definida, os tipos de conteúdo especificados serão processados pelo <ph name="PRODUCT_FRAME_NAME" />.
 
 Se esta política não for definida, o renderizador padrão será usado para todos os sites. A política <ph name="CHROME_FRAME_RENDERER_SETTINGS_POLICY_NAME" /> pode ser usada para configurar o renderizador padrão.</translation>
-<translation id="7694807474048279351">Agendar uma reinicialização automática após a aplicação de uma atualização do <ph name="PRODUCT_OS_NAME" /> 
-
-      Quando esta política está definida como "verdadeira", uma reinicialização automática é agendada quando uma atualização do <ph name="PRODUCT_OS_NAME" /> é aplicada e uma reinicialização é obrigatória para concluir o processo. A reinicialização é agendada imediatamente, mas pode ser adiada pelo dispositivo em até 24 horas se um usuário o estiver usando no momento.
-
-      Quando esta política está definida como "falsa", nenhuma reinicialização automática é agendada após a aplicação da atualização do <ph name="PRODUCT_OS_NAME" />. O processo de atualização é concluído na próxima vez que o usuário reinicia o dispositivo.
-
-      Se você definir esta política, os usuários não poderão alterá-la ou substituí-la.
-
-      Observação: atualmente, as reinicializações automáticas ficam ativadas apenas enquanto a tela de login é exibida ou uma sessão de aplicativo de quiosque está em andamento. Isso mudará no futuro, quando a política será sempre aplicada, independentemente de qualquer tipo específico de sessão estar ou não em andamento.</translation>
 <translation id="7696412993033202071">URLs de inicialização de apps para autenticação externa</translation>
 <translation id="7701341006446125684">Definir o tamanho do cache de aplicativos e extensões (em bytes)</translation>
 <translation id="770339941914297201">Novo comportamento: apps do Chrome para quiosque só serão atualizados usando o URL definido na política</translation>
@@ -6316,6 +6324,7 @@
 <translation id="77379430721695807">Se a política for definida, você especificará a lista de URLs cujos padrões devem corresponder à origem de segurança do URL solicitante. Quando houver correspondência de padrão, o acesso a dispositivos de captura de vídeo será permitido sem o envio de uma solicitação ao usuário.
 
       Para informações detalhadas sobre os padrões de <ph name="URL_LABEL" /> válidos, acesse https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns (link em inglês).</translation>
+<translation id="7740644123648617252">Ativar a importação de dados de preenchimento automático de formulários na primeira execução</translation>
 <translation id="7744253761377202223">Porcentagem de brilho da tela quando em funcionamento com energia CA.</translation>
 <translation id="7747447585227954402">Permite que dispositivos usem um <ph name="PLUGIN_VM_NAME" /> no <ph name="PRODUCT_OS_NAME" /></translation>
 <translation id="7749024457938190837">Extensões com permissão para pular a caixa de diálogo de confirmação ao enviar trabalhos de impressão por meio da API chrome.printing</translation>
@@ -6473,6 +6482,7 @@
 <translation id="7925224837072026018">Se a política for definida, as extensões ou os apps Android terão acesso a chaves corporativas. Apenas chaves geradas usando a API chrome.enterprise.platformKeys em uma conta gerenciada são designadas para uso corporativo. O usuário não poderá conceder ou revogar o acesso de extensões ou apps Android a chaves corporativas.
 
       Por padrão, uma extensão ou um app Android não pode usar uma chave designada como corporativa. Isso é equivalente a definir allowCorporateKeyUsage como "Falsa" para a política. Uma extensão ou um app Android só poderá usar chaves de plataforma marcadas como corporativas para assinar dados arbitrários se allowCorporateKeyUsage for definida como "Verdadeira" para eles. Conceda essa permissão apenas se você confiar que a extensão ou o app Android protegerá a chave contra o acesso de invasores.</translation>
+<translation id="793188693675675950">Desativar a importação da página inicial na primeira execução</translation>
 <translation id="7933141401888114454">Ativar a criação de usuários supervisionados</translation>
 <translation id="793473937901685727">Definir a disponibilidade do certificado para apps ARC</translation>
 <translation id="7936302526928951356">A string do user agent não vai congelar a versão principal.</translation>
@@ -7143,6 +7153,7 @@
       A partir da versão 92 do <ph name="PRODUCT_NAME" />, esta política também será compatível com o modo headless.
 
       Observação: bloquear URLs chrome://* internos pode causar erros inesperados.</translation>
+<translation id="8619748440665904084">Desativar a importação de dados de preenchimento automático de formulários na primeira execução</translation>
 <translation id="8623672932476443039">Se a política for definida como "Ativada", os usuários vão poder acessar o modo de desenvolvedor para apps isolados.
       Se a política for definida como "Desativada", os usuários não vão conseguir acessar esses recursos.
       Se esta política for deixada sem definição, o comportamento padrão vai ser bloquear o acesso de usuários gerenciados por empresas no ChromeOS a esses recursos e permitir o acesso para todos os outros usuários e sistemas operacionais.</translation>
@@ -7189,6 +7200,7 @@
       Se a política for definida como "Desativada" ou deixada sem definição, o host de acesso remoto poderá ser associado com qualquer usuário local.</translation>
 <translation id="867708016260789630">Forçar o Modo restrito do YouTube pelo menos no nível moderado</translation>
 <translation id="8677853537025397834">Autorizar o uso da API WebHID nestes sites</translation>
+<translation id="8685018726115727387">Desativar a importação do histórico de navegação na primeira execução</translation>
 <translation id="8685024486845674965">O aviso de proteção de senha é acionado pela reutilização da senha</translation>
 <translation id="8685680544554917389">Se a política for definida como verdadeira, o <ph name="PRODUCT_NAME" /> poderá tocar mídia automaticamente. Se a política for definida como falsa, o <ph name="PRODUCT_NAME" /> será impedido de tocar mídia automaticamente.
 
@@ -7557,6 +7569,7 @@
 
       Se a política for definida como "Desativada", os períodos de atividade nos dispositivos registrados não serão gravados ou informados.</translation>
 <translation id="9077227880520270584">Timer do login automático da conta local do dispositivo</translation>
+<translation id="9079531125758468956">Desativar a importação de favoritos na primeira execução</translation>
 <translation id="9084985621503260744">Especifica se a atividade de vídeo afeta o gerenciamento de energia</translation>
 <translation id="9087434639296483430">Informa eventos de login/logout de usuários em dispositivos registrados, incluindo falhas de login.
 
diff --git a/components/policy/resources/policy_templates_ru.xtb b/components/policy/resources/policy_templates_ru.xtb
index 5f32ba31..56d820d0 100644
--- a/components/policy/resources/policy_templates_ru.xtb
+++ b/components/policy/resources/policy_templates_ru.xtb
@@ -6280,15 +6280,6 @@
 <translation id="7687943045976362719">Если правило настроено, указанные типы контента обрабатываются <ph name="PRODUCT_FRAME_NAME" />.
 
           Если правило не настроено, для всех сайтов используется средство обработки по умолчанию. Средство обработки по умолчанию может быть указано с помощью правила <ph name="CHROME_FRAME_RENDERER_SETTINGS_POLICY_NAME" />.</translation>
-<translation id="7694807474048279351">Планирование автоматической перезагрузки после того, как было применено обновление <ph name="PRODUCT_OS_NAME" />.
-
-      Если для правила задано значение "true", автоматическая перезагрузка планируется на момент установки обновления <ph name="PRODUCT_OS_NAME" />; чтобы завершить процесс обновления, требуется перезагрузка. Она выполняется немедленно, но для нее можно задать время задержки до 24 часов, если, например, пользователь в настоящий момент работает на устройстве.
-
-      Если для правила задано значение "false", автоматическая перезагрузка не планируется после установки обновления <ph name="PRODUCT_OS_NAME" />. Процесс обновления будет завершен при следующей перезагрузке устройства.
-
-      Если правило задано, пользователи не могут его изменять или отменять.
-
-      Примечание. В настоящее время автоматическая перезагрузка включена в режиме показа главного экрана или в режиме киоска. Мы планируем доработать эту функцию, чтобы правило могло применяться независимо от текущего сеанса.</translation>
 <translation id="7696412993033202071">URL, для которых запускаются внешние приложения для аутентификации</translation>
 <translation id="7701341006446125684">Задать размер кеша для приложений и расширений (в байтах)</translation>
 <translation id="770339941914297201">Новое поведение: киоск-приложения Chrome будут обновляться только с помощью URL обновления, указанного в правиле</translation>
diff --git a/components/policy/resources/policy_templates_th.xtb b/components/policy/resources/policy_templates_th.xtb
index 286b4ec8..5763ff67 100644
--- a/components/policy/resources/policy_templates_th.xtb
+++ b/components/policy/resources/policy_templates_th.xtb
@@ -6202,15 +6202,6 @@
 <translation id="7687943045976362719">หากตั้งค่านโยบายนี้ <ph name="PRODUCT_FRAME_NAME" /> จะจัดการประเภทของเนื้อหาที่ระบุไว้
 
           หากไม่ได้ตั้งค่านโยบายนี้ ระบบจะใช้การแสดงผลเริ่มต้นกับทุกเว็บไซต์ (อาจมีการใช้นโยบาย <ph name="CHROME_FRAME_RENDERER_SETTINGS_POLICY_NAME" /> เพื่อกำหนดค่าการแสดงผลเริ่มต้น)</translation>
-<translation id="7694807474048279351">กำหนดเวลาการรีบูตอัตโนมัติหลังจากมีการใช้การอัปเดตของ <ph name="PRODUCT_OS_NAME" />
-
-      เมื่อนโยบายนี้ถูกตั้งค่าเป็น "จริง" การรีบูตอัตโนมัติจะถูกกำหนดเวลาเมื่อมีการใช้การอัปเดตของ <ph name="PRODUCT_OS_NAME" /> และจำเป็นต้องมีการรีบูตเพื่อดำเนินการขั้นตอนการอัปเดตให้เสร็จสมบูรณ์ การรีบูตถูกกำหนดเวลาไว้ทันที แต่อาจมีความล่าช้าบนอุปกรณ์ได้สูงสุดถึง 24 ชั่วโมงหากในขณะนั้นมีผู้ใช้ใช้อุปกรณ์อยู่
-
-........เมื่อนโยบายนี้ถูกตั้งค่าเป็น "เท็จ" จะไม่มีการกำหนดเวลาการรีบูตอัตโนมัติหลังจากใช้การอัปเดตของ <ph name="PRODUCT_OS_NAME" /> ขั้นตอนการอัปเดตจะเสร็จสมบูรณ์เมื่อผู้ใช้รีบูตอุปกรณ์ในครั้งถัดไป
-
-      หากคุณตั้งค่านโยบายนี้ ผู้ใช้จะไม่สามารถเปลี่ยนหรือลบล้างได้
-
-      หมายเหตุ: ปัจจุบันนี้ การรีบูตอัตโนมัติจะเปิดใช้งานเฉพาะในขณะที่หน้าจอการเข้าสู่ระบบกำลังแสดงหรือเซสชันแอปคีออสก์กำลังดำเนินการอยู่ ซึ่งจะมีการเปลี่ยนแปลงในอนาคต และนโยบายจะบังคับใช้อยู่เสมอ โดยไม่คำนึงว่าจะมีเซสชันประเภทใดๆ กำลังดำเนินการอยู่หรือไม่</translation>
 <translation id="7696412993033202071">URL สำหรับเปิดแอป Authenticator ภายนอก</translation>
 <translation id="7701341006446125684">ตั้งค่าขนาดแคชของแอปและส่วนขยาย (เป็นไบต์)</translation>
 <translation id="770339941914297201">ลักษณะการทำงานใหม่: แอป Chrome Kiosk จะอัปเดตโดยใช้ URL อัปเดตจากนโยบายเท่านั้น</translation>
diff --git a/components/policy/resources/policy_templates_tr.xtb b/components/policy/resources/policy_templates_tr.xtb
index b21cd68..8e9b695d 100644
--- a/components/policy/resources/policy_templates_tr.xtb
+++ b/components/policy/resources/policy_templates_tr.xtb
@@ -6241,15 +6241,6 @@
 <translation id="7687943045976362719">Bu politika ayarlanırsa, belirtilen içerik türleri <ph name="PRODUCT_FRAME_NAME" /> tarafından işlenir.
 
           Bu politika ayarlanmazsa, tüm siteler için varsayılan oluşturucu kullanılır. (<ph name="CHROME_FRAME_RENDERER_SETTINGS_POLICY_NAME" /> politikası, varsayılan oluşturucuyu yapılandırmak için kullanılabilir.)</translation>
-<translation id="7694807474048279351"><ph name="PRODUCT_OS_NAME" /> güncellemesi uygulandıktan sonra otomatik yeniden başlatma planla.
-
-      Bu politika true (doğru) olarak ayarlandığında, <ph name="PRODUCT_OS_NAME" /> güncellemesi uygulandıktan sonra güncelleme işleminin tamamlanması için otomatik yeniden başlatma gerekliyse bir otomatik yeniden başlatma planlanır. Yeniden başlatma derhal planlanır, ancak kullanıcı o an cihazı kullanıyorsa bu işlem cihaz üzerinden 24 saate kadar geciktirilebilir.
-
-      Bu politika false (yanlış) olarak ayarlandığında, <ph name="PRODUCT_OS_NAME" /> güncellemesi uygulandıktan sonra otomatik yeniden başlatma planlanmaz. Güncelleme işlemi, kullanıcı cihazı gelecek sefer yeniden başlattığında tamamlanır.
-
-      Bu politikayı ayarlarsanız, kullanıcılar politika üzerinde değişiklik yapamaz ve politikayı geçersiz kılamaz.
-
-      Not: Şu an için, otomatik yeniden başlatmalar yalnızca giriş ekranı gösteriliyorsa veya bir kiosk uygulama oturumu devam ediyorsa etkinleştirilir. Bu durum gelecekte değişecektir ve politika, herhangi bir özel türden oturumun devam edip etmediğinden bağımsız olarak her zaman uygulanacaktır.</translation>
 <translation id="7696412993033202071">Harici kimlik doğrulama uygulaması başlatma URL'leri</translation>
 <translation id="7701341006446125684">Uygulamalar ve Uzantılar için önbellek boyutunu ayarla (bayt olarak)</translation>
 <translation id="770339941914297201">Yeni davranış: Kiosk Chrome Uygulamaları yalnızca politikadaki güncelleme URL'si kullanılarak güncellenecektir</translation>
diff --git a/components/policy/resources/policy_templates_uk.xtb b/components/policy/resources/policy_templates_uk.xtb
index 659dc4b..831d099b 100644
--- a/components/policy/resources/policy_templates_uk.xtb
+++ b/components/policy/resources/policy_templates_uk.xtb
@@ -6298,15 +6298,6 @@
 <translation id="7687943045976362719">Якщо це правило налаштовано, вказані типи вмісту обробляє<ph name="PRODUCT_FRAME_NAME" />.
 
           Якщо це правило не налаштовано, для всіх сайтів використовується засіб обробки за умовчанням. (Його можна налаштувати в правилі <ph name="CHROME_FRAME_RENDERER_SETTINGS_POLICY_NAME" />.)</translation>
-<translation id="7694807474048279351">Планувати автоматичне перезавантаження, коли застосовано оновлення <ph name="PRODUCT_OS_NAME" />.
-
-      Якщо для цього правила встановлено значення "true", автоматичне перезавантаження планується, коли застосовано оновлення <ph name="PRODUCT_OS_NAME" />, і таке перезавантаження потрібне, щоб завершити процес оновлення. Перезавантаження планується як негайне, але може відкладатися на пристрої на термін до 24 годин, якщо користувач у цей момент використовує пристрій
-
-      Якщо для цього правила встановлено значення "false", автоматичне перезавантаження, коли застосовано оновлення <ph name="PRODUCT_OS_NAME" />, не планується. Процес оновлення завершується, коли користувач перезавантажує пристрій наступного разу.
-
-      Якщо встановити це правило, користувачі не можуть його змінювати або замінювати.
-
-      Примітка. Наразі автоматичне перезавантаження вмикається лише під час появи екрана входу чи під час роботи програми для термінала. У майбутньому правило буде застосовуватися завжди, незалежно від того, чи розпочато якийсь сеанс.</translation>
 <translation id="7696412993033202071">URL-адреси запуску зовнішнього додатка для автентифікації</translation>
 <translation id="7701341006446125684">Указати розмір кеш-пам’яті для додатків і розширень (у байтах)</translation>
 <translation id="770339941914297201">Нова поведінка: додатки-термінали Chrome оновлюватимуться лише через URL-адресу оновлення з цього правила</translation>
diff --git a/components/policy/resources/policy_templates_vi.xtb b/components/policy/resources/policy_templates_vi.xtb
index 157b0ee..9ebd97a5 100644
--- a/components/policy/resources/policy_templates_vi.xtb
+++ b/components/policy/resources/policy_templates_vi.xtb
@@ -6277,12 +6277,6 @@
 <translation id="7687943045976362719">Nếu bạn đặt chính sách này, <ph name="PRODUCT_FRAME_NAME" /> sẽ xử lý các loại nội dung được chỉ định.
 
           Nếu bạn không đặt chính sách này, trình kết xuất mặc định sẽ được sử dụng cho tất cả các trang web. (Chính sách <ph name="CHROME_FRAME_RENDERER_SETTINGS_POLICY_NAME" /> có thể dùng để định cấu hình trình kết xuất mặc định).</translation>
-<translation id="7694807474048279351">Lên lịch tự động khởi động lại sau khi áp dụng cập nhật <ph name="PRODUCT_OS_NAME" />.
-      Khi chính sách này được đặt thành true, tự động khởi động lại được lên lịch khi áp dụng cập nhật <ph name="PRODUCT_OS_NAME" /> và yêu cầu khởi động lại để hoàn thành quy trình cập nhật. Khởi động lại được lên lịch ngay lập tức nhưng có thể bị trễ trên thiết bị tới 24 giờ nếu người dùng hiện đang sử dụng thiết bị.
-      Khi chính sách này được đặt thành false, tự động khởi động lại không được lên lịch sau khi áp dụng cập nhật <ph name="PRODUCT_OS_NAME" />. Quy trình cập nhật hoàn thành khi người dùng khởi động lại thiết bị vào lần tiếp theo.
-      Nếu bạn đặt chính sách này, người dùng không thể thay đổi hoặc ghi đè chính sách.
-
-      Lưu ý: Hiện tại, tự động khởi động lại chỉ được bật khi màn hình đăng nhập đang được hiển thị hoặc phiên ứng dụng kiosk đang diễn ra. Điều này sẽ thay đổi trong tương lai và chính sách sẽ luôn áp dụng, bất kể phiên thuộc loại cụ thể bất kỳ có đang diễn ra hay không.</translation>
 <translation id="7696412993033202071">URL mở ứng dụng xác thực bên ngoài</translation>
 <translation id="7701341006446125684">Đặt kích thước bộ nhớ đệm của tiện ích và ứng dụng (bằng byte)</translation>
 <translation id="770339941914297201">Hành vi mới: Người dùng chỉ có thể cập nhật các ứng dụng Kiosk Chrome bằng cách sử dụng URL cập nhật trong chính sách</translation>
diff --git a/components/policy/resources/policy_templates_zh-CN.xtb b/components/policy/resources/policy_templates_zh-CN.xtb
index 57065a2..d2f412e 100644
--- a/components/policy/resources/policy_templates_zh-CN.xtb
+++ b/components/policy/resources/policy_templates_zh-CN.xtb
@@ -13,6 +13,7 @@
       如果此政策的值不是一个有效的域名,系统便不会应用此政策。</translation>
 <translation id="1004590217607585595">Web 应用管理设置</translation>
 <translation id="1006218396155867129">禁止远程访问用户将文件传输到远程主机或从远程主机传输文件</translation>
+<translation id="1007149936182752368">禁止修改书签</translation>
 <translation id="1010151305531217567">将鼠标主键切换成右键</translation>
 <translation id="1011266755572744012">用于指定用户最多可以使用多少张纸来完成单个打印任务。
 
@@ -75,6 +76,7 @@
       如需查看可用变量的列表,请访问 https://support.google.com/chrome/a?p=Supported_directory_variables。
 
       如果您未设置此政策,系统将会使用默认的个人资料目录。</translation>
+<translation id="1059069692400941670">禁止在首次运行时导入默认搜索引擎</translation>
 <translation id="1062011392452772310">为设备启用远程认证</translation>
 <translation id="1062407476771304334">替换</translation>
 <translation id="1069489575852947981">如果此政策已启用或未设置,系统将设置设备本地帐号以实现零延迟的自动登录。<ph name="PRODUCT_OS_NAME" />支持利用键盘快捷键 Ctrl + Alt + S 绕过自动登录并显示登录屏幕。
@@ -93,6 +95,7 @@
 <translation id="1082802595100075771">允许用户选择使用匿名 Google 服务为无标签图片提供自动说明</translation>
 <translation id="1087437665304381368">此政策仅用于控制 <ph name="PRODUCT_OS_NAME" />开发者模式。如果您想阻止对 Android 开发者选项的访问,则需设置 <ph name="DEVELOPER_TOOLS_DISABLED_POLICY_NAME" /> 政策。</translation>
 <translation id="1087707496788636333">Chrome 企业版政策列表迁址了!请更新您的书签以改用 <ph name="POLICY_DOCUMENTATION_URL" />。</translation>
+<translation id="1089150222292592899">在 SAML IdP 页面上自动填充用户名</translation>
 <translation id="1091765729282771296">允许网站请求用户授予对 HID 设备的访问权限</translation>
 <translation id="1095209545735032039">禁止在这些网站上使用 Serial API</translation>
 <translation id="1096105751829466145">默认搜索服务提供商</translation>
@@ -1857,6 +1860,7 @@
 
       如果此政策已停用,则无法更新组件。不过,某些组件不受此政策限制:只要相应组件不含可执行的代码,并且对浏览器的安全性至关重要,系统就不会禁止更新该组件。
       这类组件包括证书吊销列表、子资源过滤器,等等。</translation>
+<translation id="2939335382784544151">允许在首次运行时导入浏览记录</translation>
 <translation id="2940127076681735544">如果此政策设为一个有效网址,<ph name="PRODUCT_NAME" /> 就会从该网址下载网站列表,并参照 <ph name="SITELIST_POLICY_NAME" /> 政策的设定应用相应规则。
 
       如果此政策未设置(或设为一个无效网址),<ph name="PRODUCT_NAME" /> 便不会将它用作浏览器切换规则的来源。
@@ -2288,6 +2292,7 @@
 
       如果您不设置此政策,用户可以选择要在桌面和登录屏幕背景中显示的图片。</translation>
 <translation id="3315324240256767419">启用“ghost 窗口”功能。</translation>
+<translation id="3323819750604111729">允许在首次运行时导入书签</translation>
 <translation id="332771718998993005">将广告中宣传的名称确定为 <ph name="PRODUCT_NAME" /> 目标名称。
 
           如果此政策设为非空字符串,该字符串将被用作 <ph name="PRODUCT_NAME" /> 目标名称。否则,目标名称便是设备名称。如果此政策未设置,则目标名称将是设备名称,且设备所有者(或者该设备的托管网域内的用户)将能更改该名称。该名称的长度不得超过 24 个字符。</translation>
@@ -2761,6 +2766,7 @@
       如果此政策设为 2,系统会阻止含侵扰性广告的网站展示广告。</translation>
 <translation id="3877517141460819966">集成的双重身份验证模式</translation>
 <translation id="3879208481373875102">配置强制安装的 Web 应用的列表</translation>
+<translation id="3879700444818346084">禁止在首次运行时导入已保存的密码</translation>
 <translation id="388237772682176890">我们在 M53 中弃用了此政策,并在 M54 中移除了此政策(因为 SPDY/3.1 已不再受支持)。
 
       禁止在 <ph name="PRODUCT_NAME" /> 中使用 SPDY 协议。
@@ -3029,6 +3035,7 @@
       在自助服务终端会话中,没有宽限期,系统也不会发出关于重新启动设备的通知。
 </translation>
 <translation id="4187576366596772431">禁止在这些网站上使用 WebHID API</translation>
+<translation id="4190316993598857632">允许修改书签</translation>
 <translation id="4192388905594723944">验证远程访问客户端身份验证令牌时使用的网址</translation>
 <translation id="4203055629055264833">如果此政策已启用或未设置,用户便可通过切换工具栏中的图标来开启侧边栏以显示默认搜索引擎的最新搜索结果页面。
 
@@ -3722,6 +3729,7 @@
 <translation id="5105313908130842249">使用电池供电时的屏幕锁定延迟时间</translation>
 <translation id="5108031557082757679">已停用企业设备打印机</translation>
 <translation id="5109383437323376357">确定变体的可用情况</translation>
+<translation id="5120168808610189805">允许在首次运行时导入主页</translation>
 <translation id="5124368997194894978">启用“接通 AC(交流电)时启动”</translation>
 <translation id="5130213897914754028">阻止网站使用 SharedArrayBuffers</translation>
 <translation id="5130935469849337738">一律提供翻译</translation>
@@ -4393,6 +4401,7 @@
       如果“安全浏览”功能已(无论是被政策还是被用户)停用,此行为便不会触发。若要强制开启“安全浏览”功能,请使用 <ph name="SAFE_BROWSING_ENABLED_POLICY_NAME" /> 政策或 <ph name="SAFE_BROWSING_PROTETION_LEVEL_POLICY_NAME" /> 政策。</translation>
 <translation id="5835312413892670446">屏幕截取设置</translation>
 <translation id="5836064773277134605">限制远程访问主机使用的UDP端口范围</translation>
+<translation id="583627479140113555">允许在首次运行时导入已保存的密码</translation>
 <translation id="5837898601525273156">如果您设置了 <ph name="DEVICE_ADVANCED_BATTERY_CHARGE_MODE_DAY_CONFIG_POLICY_NAME" />,并且 <ph name="DEVICE_ADVANCED_BATTERY_CHARGE_MODE_ENABLED_POLICY_NAME" /> 已启用,高级电池充电模式电源管理政策会保持开启状态(如果相应设备支持的话)。在此模式下,系统可以在非工作时间使用标准充电算法和其他技术来最大限度地延长电池寿命。在工作时间,系统会使用快速充电,以加快充电速度。您应通过开始时间和持续时间指定每天系统使用量最大的时段。
 
       如果此政策已停用或未设置,高级电池充电模式会保持关闭状态。
@@ -4706,6 +4715,13 @@
       请按 ID(例如 pjkljhegncpnkpknbcohdijeoejaedia)指定 Chrome 应用,按应用包名称(例如 com.google.android.gm)指定 Android 应用,按 <ph name="WEB_APP_INSTALL_FORCE_LIST_POLICY_NAME" /> 中使用的网址(例如 https://google.com/maps)指定 Web 应用。
 
       如果您不设置此政策,用户便可以更改启动器中的固定应用列表。</translation>
+<translation id="6183409603139321084">在登录屏幕和锁定的屏幕上进行在线身份验证期间,<ph name="PRODUCT_OS_NAME" /> 可以尝试自动填充 SAML IdP 页面上的用户名字段。
+
+      它会使用与用户的 <ph name="PRODUCT_OS_NAME" /> 个人资料关联的电子邮件地址,因此,如果用户需要在 SAML IdP 页面上使用不同的电子邮件地址,此设置应被停用。
+
+      通过此政策接收的字符串将用作 IdP 页面上的网址参数名称,并会以用户的电子邮件地址为值。
+
+      服务器端应负责在身份提供方与其支持的网址参数之间进行映射。</translation>
 <translation id="6190367314942602985">报告用户标识信息</translation>
 <translation id="6191963383731098056">此政策让管理员能够配置 <ph name="PRODUCT_NAME" /> 主题的颜色。输入的字符串应是有效的十六进制颜色字符串(采用“#RRGGBB”格式)。
 
@@ -5232,6 +5248,7 @@
       您只需将以下各项连结起来即可指定 <ph name="SUBJECT_PUBLIC_KEY_INFO" /> 哈希:哈希算法名称、“/”字符,以及相应哈希算法(对所指定证书的 DER 编码 <ph name="SUBJECT_PUBLIC_KEY_INFO" /> 应用的哈希算法)的 Base64 编码。Base64 编码的格式与 SPKI 指纹的格式一致。唯一得到认可的哈希算法是 sha256,其他算法都会被忽略。
 
       如果您不设置此政策,<ph name="PRODUCT_NAME" /> 便会将那些应按照证书透明度要求进行披露但却未予披露的证书视为不可信证书。</translation>
+<translation id="6703381779632216549">允许在首次运行时导入默认搜索引擎</translation>
 <translation id="6704445641918520643">启用延迟的登录 WebUI 加载。</translation>
 <translation id="6704515759227307131">此政策已被弃用,且已被 AdvancedProtectionAllowed 取代。
 
@@ -6178,15 +6195,6 @@
 <translation id="7687943045976362719">如果设置了此政策,则指定的内容类型由 <ph name="PRODUCT_FRAME_NAME" />处理。
 
           如果未设置此政策,系统将对所有网站使用默认渲染程序。(<ph name="CHROME_FRAME_RENDERER_SETTINGS_POLICY_NAME" /> 政策可用于配置默认渲染程序。)</translation>
-<translation id="7694807474048279351">安排在应用 <ph name="PRODUCT_OS_NAME" />更新后自动重启。
-
-      如果此政策的值设为 True,则当应用 <ph name="PRODUCT_OS_NAME" />更新后需要重启才能完成更新过程时,系统会安排自动重启。系统会立即安排重启,但如果用户当前正在使用此设备,那么设备重启操作最多可能延迟 24 小时。
-
-      如果此政策的值设为 False,则当应用 <ph name="PRODUCT_OS_NAME" />更新后,系统不会安排自动重启。更新过程会在用户下次重启设备时完成。
-
-      如果您设置了此政策,那么用户将无法对其进行更改或覆盖。
-
-      请注意:目前,系统仅在显示登录屏幕或正在访问自助服务终端应用时才会启用自动重启。这在日后会有所改变,但此政策将始终适用,无论是否正在进行任何特殊类型的会话。</translation>
 <translation id="7696412993033202071">外部身份验证应用启动网址</translation>
 <translation id="7701341006446125684">设置应用和扩展程序缓存大小(以字节为单位)</translation>
 <translation id="770339941914297201">新行为:自助服务终端 Chrome 应用将仅使用政策提供的更新网址进行更新</translation>
@@ -6226,6 +6234,7 @@
 <translation id="77379430721695807">通过设置此政策,您可以指定一个网址列表,在其中列出与请求网址的安全来源匹配的网址格式。如果找到了匹配项,系统会在不提示用户的情况下直接允许相应网址使用录像设备
 
       如需详细了解有效的 <ph name="URL_LABEL" /> 格式,请访问 https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns。</translation>
+<translation id="7740644123648617252">允许在首次运行时导入自动填充表单数据</translation>
 <translation id="7744253761377202223">使用交流电源供电时的屏幕亮度百分比</translation>
 <translation id="7747447585227954402">允许设备在 <ph name="PRODUCT_OS_NAME" />上使用 <ph name="PLUGIN_VM_NAME" /></translation>
 <translation id="7749024457938190837">能够在通过 chrome.printing API 发送打印任务时跳过确认对话框的扩展程序</translation>
@@ -6383,6 +6392,7 @@
 <translation id="7925224837072026018">通过设置此政策,您可以授权扩展程序或 Android 应用使用企业密钥。在受管理的帐号中使用 chrome.enterprise.platformKeys API 生成的密钥会被指定为仅供企业使用。用户无法授权/取消授权扩展程序或 Android 应用使用此类密钥。
 
       默认情况下,扩展程序或 Android 应用无权使用此类密钥(相当于针对扩展程序或 Android 应用将 allowCorporateKeyUsage 设为 False)。只有在针对某个扩展程序或 Android 应用将 allowCorporateKeyUsage 设为 True 的情况下,该扩展程序/应用才能利用被标记为供企业使用的平台密钥签署任意数据。为了防范黑客盗用密钥,切勿将这项权限授予不信任的扩展程序或 Android 应用。</translation>
+<translation id="793188693675675950">禁止在首次运行时导入主页</translation>
 <translation id="7933141401888114454">允许创建受监管用户</translation>
 <translation id="793473937901685727">为 ARC 应用设置证书可用性</translation>
 <translation id="7936302526928951356">User-Agent 字符串不会冻结主要版本。</translation>
@@ -7025,6 +7035,7 @@
       从 <ph name="PRODUCT_NAME" /> 92 版开始,此政策在无头模式中也受支持。
 
       注意:屏蔽内部 chrome://* 网址可能会导致意外的错误。</translation>
+<translation id="8619748440665904084">禁止在首次运行时导入自动填充表单数据</translation>
 <translation id="8623672932476443039">如果启用此政策,用户可以访问已隔离应用的开发者模式。
       如果停用此政策,用户将无法使用这些功能。
       如果未设置此政策,则默认情况下,受企业管理的用户无法在 Chrome 操作系统上使用该模式,但在其他操作系统上可以使用,而其他用户在任何操作系统上均可使用。</translation>
@@ -7071,6 +7082,7 @@
       如果此政策已停用或未设置,远程访问主机便能与任何本地用户关联。</translation>
 <translation id="867708016260789630">强制使用级别至少为“中等”的 YouTube 受限模式</translation>
 <translation id="8677853537025397834">允许在这些网站上使用 WebHID API</translation>
+<translation id="8685018726115727387">禁止在首次运行时导入浏览记录</translation>
 <translation id="8685024486845674965">重复使用密码可触发密码保护服务警告功能</translation>
 <translation id="8685680544554917389">如果此政策设为 True,<ph name="PRODUCT_NAME" /> 将会自动播放媒体。如果此政策设为 False,<ph name="PRODUCT_NAME" /> 不会自动播放媒体。
 
@@ -7439,6 +7451,7 @@
 
       如果此政策已停用,已注册的设备将不会记录或报告活动时间。</translation>
 <translation id="9077227880520270584">设备本地帐号自动登录计时器</translation>
+<translation id="9079531125758468956">禁止在首次运行时导入书签</translation>
 <translation id="9084985621503260744">指定视频活动是否影响电源管理</translation>
 <translation id="9087434639296483430">旨在报告已注册的设备上发生的用户登录/退出事件(包括登录失败)。
 
diff --git a/components/policy/resources/policy_templates_zh-TW.xtb b/components/policy/resources/policy_templates_zh-TW.xtb
index 639bdff..a3e8d5c 100644
--- a/components/policy/resources/policy_templates_zh-TW.xtb
+++ b/components/policy/resources/policy_templates_zh-TW.xtb
@@ -6172,15 +6172,6 @@
 <translation id="7687943045976362719">如果設定這項政策,指定的內容類型會由 <ph name="PRODUCT_FRAME_NAME" />處理。
 
           如果不設定這項政策,所有網站都會使用預設轉譯器。(你可透過 <ph name="CHROME_FRAME_RENDERER_SETTINGS_POLICY_NAME" /> 政策設定預設轉譯器)。</translation>
-<translation id="7694807474048279351">在系統已套用 <ph name="PRODUCT_OS_NAME" />更新之後安排自動重新啟動。
-
-      如果你將這項政策設為 True,當系統已套用 <ph name="PRODUCT_OS_NAME" />更新且必須重新啟動以完成更新程序時,即會安排自動重新啟動。系統會立即排定重新啟動,但如果使用者正在使用裝置,最多可能會延遲 24 小時才會重新啟動。
-
-      如果你將這項政策設為 False,系統將不會在套用 <ph name="PRODUCT_OS_NAME" />更新之後安排自動重新啟動時間。更新程序會在使用者下次重新啟動裝置時完成。
-
-      只要你設定這項政策,使用者即無法予以變更或覆寫。
-
-      注意:目前只有在顯示登入畫面或 Kiosk 應用程式工作階段運作時,才能啟用自動重新啟動。這種情況會在日後變更,而且無論任何特定類型的工作階段是否正在運作,政策都會一律適用。</translation>
 <translation id="7696412993033202071">外部驗證應用程式啟動網址</translation>
 <translation id="7701341006446125684">設定應用程式和擴充功能快取大小 (以位元組為單位)</translation>
 <translation id="770339941914297201">新行為:Kiosk Chrome 應用程式只會透過政策中的更新網址進行更新</translation>
diff --git a/components/resources/BUILD.gn b/components/resources/BUILD.gn
index de780a3..3901f6d 100644
--- a/components/resources/BUILD.gn
+++ b/components/resources/BUILD.gn
@@ -49,6 +49,7 @@
   deps = [
     ":about_credits",
     "//components/flags_ui/resources:build_ts",
+    "//components/security_interstitials/content/resources:build_ts",
   ]
 
   if (!is_ios) {
diff --git a/components/resources/security_interstitials_resources.grdp b/components/resources/security_interstitials_resources.grdp
index cac6c18f..03aaac92 100644
--- a/components/resources/security_interstitials_resources.grdp
+++ b/components/resources/security_interstitials_resources.grdp
@@ -7,7 +7,7 @@
   <include name="IDR_SECURITY_INTERSTITIAL_QUIET_HTML" file="../security_interstitials/core/browser/resources/interstitial_webview_quiet.html" flattenhtml="true" type="BINDATA" />
   <include name="IDR_SECURITY_INTERSTITIAL_CONNECTION_HELP_HTML" file="../security_interstitials/content/resources/connection_help.html" type="BINDATA" />
   <include name="IDR_SECURITY_INTERSTITIAL_CONNECTION_HELP_CSS" file="../security_interstitials/content/resources/connection_help.css" type="BINDATA" />
-  <include name="IDR_SECURITY_INTERSTITIAL_CONNECTION_HELP_JS" file="../security_interstitials/content/resources/connection_help.js" type="BINDATA" />
+  <include name="IDR_SECURITY_INTERSTITIAL_CONNECTION_HELP_JS" file="${root_gen_dir}/components/security_interstitials/content/resources/tsc/connection_help.js" use_base_dir="false" type="BINDATA" />
   <include name="IDR_KNOWN_INTERCEPTION_HTML" file="../security_interstitials/content/resources/known_interception_disclosure.html" type="BINDATA" />
   <include name="IDR_KNOWN_INTERCEPTION_CSS" file="../security_interstitials/content/resources/known_interception_disclosure.css" type="BINDATA" />
   <include name="IDR_KNOWN_INTERCEPTION_ICON_1X_PNG" file="../security_interstitials/core/browser/resources/images/1x/triangle_red.png" type="BINDATA" />
diff --git a/components/saved_tab_groups/BUILD.gn b/components/saved_tab_groups/BUILD.gn
new file mode 100644
index 0000000..f35deec
--- /dev/null
+++ b/components/saved_tab_groups/BUILD.gn
@@ -0,0 +1,25 @@
+# Copyright 2022 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+source_set("core") {
+  sources = [
+    "saved_tab_group.cc",
+    "saved_tab_group.h",
+    "saved_tab_group_tab.cc",
+    "saved_tab_group_tab.h",
+  ]
+  deps = [
+    "//base",
+    "//components/tab_groups",
+    "//ui/gfx",
+    "//url",
+  ]
+  public_deps = []
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = []
+  deps = [ ":core" ]
+}
diff --git a/components/saved_tab_groups/DEPS b/components/saved_tab_groups/DEPS
new file mode 100644
index 0000000..9fa4f70
--- /dev/null
+++ b/components/saved_tab_groups/DEPS
@@ -0,0 +1,4 @@
+include_rules = [
+  "+components/tab_groups",
+  "+ui/gfx"
+]
\ No newline at end of file
diff --git a/components/saved_tab_groups/DIR_METADATA b/components/saved_tab_groups/DIR_METADATA
new file mode 100644
index 0000000..089b5b5
--- /dev/null
+++ b/components/saved_tab_groups/DIR_METADATA
@@ -0,0 +1,3 @@
+monorail {
+  component: "UI>Browser>TopChrome>TabStrip>TabGroups"
+}
diff --git a/components/saved_tab_groups/OWNERS b/components/saved_tab_groups/OWNERS
new file mode 100644
index 0000000..ace7a5e8
--- /dev/null
+++ b/components/saved_tab_groups/OWNERS
@@ -0,0 +1,2 @@
+dpenning@chromium.org
+dljames@chromium.org
\ No newline at end of file
diff --git a/components/saved_tab_groups/README.md b/components/saved_tab_groups/README.md
new file mode 100644
index 0000000..d77e2bcf
--- /dev/null
+++ b/components/saved_tab_groups/README.md
@@ -0,0 +1,10 @@
+## SavedTabGroups
+
+Tab Groups are an effective way to enable users to organize their tabs, but are
+ephemeral, and disappear after the user exits a session. Saved tab groups can be
+ saved and recalled allowing users to keep the state of their working state
+ across browsing sessions.
+
+Saved Tab Groups are built on sync's storage layer. This storage solution works
+across sessions and when sync is enabled, saved tab groups will sync across
+devices updating the tabs and other metadata about the tab group in real-time.
\ No newline at end of file
diff --git a/chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group.cc b/components/saved_tab_groups/saved_tab_group.cc
similarity index 70%
rename from chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group.cc
rename to components/saved_tab_groups/saved_tab_group.cc
index dd1c7c2..d9ab6d2 100644
--- a/chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group.cc
+++ b/components/saved_tab_groups/saved_tab_group.cc
@@ -2,23 +2,19 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group.h"
+#include "components/saved_tab_groups/saved_tab_group.h"
 
 #include <string>
 #include <vector>
 
 #include "base/guid.h"
+#include "components/saved_tab_groups/saved_tab_group_tab.h"
 #include "components/tab_groups/tab_group_color.h"
 #include "components/tab_groups/tab_group_id.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "ui/gfx/image/image.h"
 #include "url/gurl.h"
 
-SavedTabGroupTab::SavedTabGroupTab(const GURL& url,
-                                   const std::u16string& tab_title,
-                                   const gfx::Image& favicon)
-    : url(url), tab_title(tab_title), favicon(favicon) {}
-
 SavedTabGroup::SavedTabGroup(
     const std::u16string& title,
     const tab_groups::TabGroupColorId& color,
@@ -32,8 +28,6 @@
       color_(color),
       saved_tabs_(urls) {}
 
-SavedTabGroupTab::SavedTabGroupTab(const SavedTabGroupTab& other) = default;
 SavedTabGroup::SavedTabGroup(const SavedTabGroup& other) = default;
 
-SavedTabGroupTab::~SavedTabGroupTab() = default;
 SavedTabGroup::~SavedTabGroup() = default;
diff --git a/chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group.h b/components/saved_tab_groups/saved_tab_group.h
similarity index 76%
rename from chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group.h
rename to components/saved_tab_groups/saved_tab_group.h
index 7e78cff6..33fe91c 100644
--- a/chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group.h
+++ b/components/saved_tab_groups/saved_tab_group.h
@@ -2,35 +2,20 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_UI_TABS_SAVED_TAB_GROUPS_SAVED_TAB_GROUP_H_
-#define CHROME_BROWSER_UI_TABS_SAVED_TAB_GROUPS_SAVED_TAB_GROUP_H_
+#ifndef COMPONENTS_SAVED_TAB_GROUPS_SAVED_TAB_GROUP_H_
+#define COMPONENTS_SAVED_TAB_GROUPS_SAVED_TAB_GROUP_H_
 
 #include <string>
 #include <vector>
 
 #include "base/guid.h"
+#include "components/saved_tab_groups/saved_tab_group_tab.h"
 #include "components/tab_groups/tab_group_color.h"
 #include "components/tab_groups/tab_group_id.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "ui/gfx/image/image.h"
 #include "url/gurl.h"
 
-// A SavedTabGroupTab stores the url, title, and favicon of a tab.
-struct SavedTabGroupTab {
-  SavedTabGroupTab(const GURL& url,
-                   const std::u16string& tab_title,
-                   const gfx::Image& favicon);
-  SavedTabGroupTab(const SavedTabGroupTab& other);
-  ~SavedTabGroupTab();
-
-  // The link to navigate with.
-  GURL url;
-  // The title of the website this urls is associated with.
-  std::u16string tab_title;
-  // The favicon of the website this SavedTabGroupTab represents.
-  gfx::Image favicon;
-};
-
 // Preserves the state of a Tab group that was saved from the
 // tab_group_editor_bubble_view's save toggle button. Additionally, these values
 // may change if the tab groups name, color, or urls are changed from the
@@ -61,11 +46,11 @@
   SavedTabGroup& SetTitle(std::u16string title) {
     title_ = title;
     return *this;
-  }
+  };
   SavedTabGroup& SetColor(tab_groups::TabGroupColorId color) {
     color_ = color;
     return *this;
-  }
+  };
   SavedTabGroup& SetLocalGroupId(
       absl::optional<tab_groups::TabGroupId> tab_group_id) {
     tab_group_id_ = tab_group_id;
@@ -91,4 +76,4 @@
   std::vector<SavedTabGroupTab> saved_tabs_;
 };
 
-#endif  // CHROME_BROWSER_UI_TABS_SAVED_TAB_GROUPS_SAVED_TAB_GROUP_H_
+#endif  // COMPONENTS_SAVED_TAB_GROUPS_SAVED_TAB_GROUP_H_
diff --git a/components/saved_tab_groups/saved_tab_group_tab.cc b/components/saved_tab_groups/saved_tab_group_tab.cc
new file mode 100644
index 0000000..3110189
--- /dev/null
+++ b/components/saved_tab_groups/saved_tab_group_tab.cc
@@ -0,0 +1,31 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/saved_tab_groups/saved_tab_group_tab.h"
+
+#include "components/saved_tab_groups/saved_tab_group.h"
+
+SavedTabGroupTab::SavedTabGroupTab(
+    const GURL& url,
+    const std::u16string& title,
+    const gfx::Image& favicon,
+    const base::GUID& group_guid,
+    SavedTabGroup* group,
+    absl::optional<base::GUID> guid,
+    absl::optional<base::Time> creation_time_unix_epoch_us,
+    absl::optional<base::Time> update_time_unix_epoch_us)
+    : guid_(guid.has_value() ? guid.value() : base::GUID::GenerateRandomV4()),
+      group_guid_(group_guid),
+      saved_tab_group_(group),
+      url_(url),
+      title_(title),
+      favicon_(favicon),
+      creation_time_unix_epoch_us_(creation_time_unix_epoch_us.has_value()
+                                       ? creation_time_unix_epoch_us.value()
+                                       : base::Time::Now()),
+      update_time_unix_epoch_us_(update_time_unix_epoch_us.has_value()
+                                     ? update_time_unix_epoch_us.value()
+                                     : base::Time::Now()) {}
+SavedTabGroupTab::SavedTabGroupTab(const SavedTabGroupTab& other) = default;
+SavedTabGroupTab::~SavedTabGroupTab() = default;
\ No newline at end of file
diff --git a/components/saved_tab_groups/saved_tab_group_tab.h b/components/saved_tab_groups/saved_tab_group_tab.h
new file mode 100644
index 0000000..95e3457
--- /dev/null
+++ b/components/saved_tab_groups/saved_tab_group_tab.h
@@ -0,0 +1,96 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_SAVED_TAB_GROUPS_SAVED_TAB_GROUP_TAB_H_
+#define COMPONENTS_SAVED_TAB_GROUPS_SAVED_TAB_GROUP_TAB_H_
+
+#include <memory>
+#include <string>
+
+#include "base/guid.h"
+#include "base/memory/raw_ptr.h"
+#include "base/time/time.h"
+#include "components/tab_groups/tab_group_color.h"
+#include "components/tab_groups/tab_group_id.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
+#include "ui/gfx/image/image.h"
+#include "url/gurl.h"
+
+class SavedTabGroup;
+
+// A SavedTabGroupTab stores the url, title, and favicon of a tab.
+class SavedTabGroupTab {
+ public:
+  SavedTabGroupTab(
+      const GURL& url,
+      const std::u16string& title,
+      const gfx::Image& favicon,
+      const base::GUID& group_guid,
+      SavedTabGroup* group = nullptr,
+      absl::optional<base::GUID> guid = absl::nullopt,
+      absl::optional<base::Time> creation_time_unix_epoch_us = absl::nullopt,
+      absl::optional<base::Time> update_time_unix_epoch_us = absl::nullopt);
+  SavedTabGroupTab(const SavedTabGroupTab& other);
+  ~SavedTabGroupTab();
+
+  // Accessors.
+  const base::GUID& guid() const { return guid_; }
+  const base::GUID& group_guid() const { return group_guid_; }
+  SavedTabGroup* saved_tab_group() const { return saved_tab_group_; }
+  const GURL& url() const { return url_; }
+  const std::u16string& title() const { return title_; }
+  const gfx::Image& favicon() const { return favicon_; }
+  const base::Time& creation_time_unix_epoch_us() const {
+    return creation_time_unix_epoch_us_;
+  }
+  const base::Time& update_time_unix_epoch_us() const {
+    return update_time_unix_epoch_us_;
+  }
+
+  // Mutators.
+  SavedTabGroupTab& SetSavedTabGroup(SavedTabGroup* saved_tab_group) {
+    saved_tab_group_ = saved_tab_group;
+    return *this;
+  }
+  SavedTabGroupTab& SetURL(GURL url) {
+    url_ = url;
+    return *this;
+  }
+  SavedTabGroupTab& SetTitle(std::u16string title) {
+    title_ = title;
+    return *this;
+  }
+  SavedTabGroupTab& SetFavicon(gfx::Image favicon) {
+    favicon_ = favicon;
+    return *this;
+  }
+
+ private:
+  // The ID used to represent the tab in sync.
+  base::GUID guid_;
+
+  // The ID used to represent the tab in sync. This must not be null. It
+  base::GUID group_guid_;
+
+  // The Group which owns this tab, this can be null if sync hasn't sent the
+  // group over yet.
+  raw_ptr<SavedTabGroup> saved_tab_group_;
+
+  // The link to navigate with.
+  GURL url_;
+
+  // The title of the website this urls is associated with.
+  std::u16string title_;
+
+  // The favicon of the website this SavedTabGroupTab represents.
+  gfx::Image favicon_;
+
+  // Timestamp for when the tab was created.
+  base::Time creation_time_unix_epoch_us_;
+
+  // Timestamp for when the tab was last updated.
+  base::Time update_time_unix_epoch_us_;
+};
+
+#endif  // COMPONENTS_SAVED_TAB_GROUPS_SAVED_TAB_GROUP_TAB_H_
diff --git a/components/search/ntp_features.cc b/components/search/ntp_features.cc
index 42e7303..16c19ece 100644
--- a/components/search/ntp_features.cc
+++ b/components/search/ntp_features.cc
@@ -159,11 +159,6 @@
 const char kNtpModulesLoadTimeoutMillisecondsParam[] =
     "NtpModulesLoadTimeoutMillisecondsParam";
 const char kNtpModulesOrderParam[] = "NtpModulesOrderParam";
-const char kNtpRecipeTasksModuleDataParam[] = "NtpRecipeTasksModuleDataParam";
-const char kNtpRecipeTasksModuleCacheMaxAgeSParam[] =
-    "NtpRecipeTasksModuleCacheMaxAgeSParam";
-const char kNtpRecipeTasksModuleExperimentGroupParam[] =
-    "NtpRecipeTasksModuleExperimentGroupParam";
 const char kNtpChromeCartModuleDataParam[] = "NtpChromeCartModuleDataParam";
 const char kNtpChromeCartModuleAbandonedCartDiscountParam[] =
     "NtpChromeCartModuleAbandonedCartDiscountParam";
@@ -191,6 +186,11 @@
     "RealboxMatchOmniboxThemeVariantParam";
 const char kRealboxMatchSearchboxThemeParam[] =
     "RealboxMatchSearchboxThemeParam";
+const char kNtpRecipeTasksModuleDataParam[] = "NtpRecipeTasksModuleDataParam";
+const char kNtpRecipeTasksModuleCacheMaxAgeSParam[] =
+    "NtpRecipeTasksModuleCacheMaxAgeSParam";
+const char kNtpRecipeTasksModuleExperimentGroupParam[] =
+    "NtpRecipeTasksModuleExperimentGroupParam";
 
 base::TimeDelta GetModulesLoadTimeout() {
   std::string param_value = base::GetFieldTrialParamValueByFeature(
diff --git a/components/search/ntp_features.h b/components/search/ntp_features.h
index 6759c5a0..63b7a62 100644
--- a/components/search/ntp_features.h
+++ b/components/search/ntp_features.h
@@ -61,14 +61,6 @@
 extern const char kNtpModulesLoadTimeoutMillisecondsParam[];
 // Parameter determining the module order.
 extern const char kNtpModulesOrderParam[];
-// Parameter determining the type of recipe data to request.
-extern const char kNtpRecipeTasksModuleDataParam[];
-// Parameter determining the max age in seconds of the cache for recipe tasks
-// data.
-extern const char kNtpRecipeTasksModuleCacheMaxAgeSParam[];
-// Parameter for communicating the experiment group of the recipe tasks module
-// experiment.
-extern const char kNtpRecipeTasksModuleExperimentGroupParam[];
 // Parameter determining the type of cart data used to render module.
 extern const char kNtpChromeCartModuleDataParam[];
 // Parameter for enabling the abandoned cart discount.
@@ -104,6 +96,14 @@
 extern const char kRealboxMatchOmniboxThemeVariantParam[];
 // Parameter determining the variations of searchbox theme matching.
 extern const char kRealboxMatchSearchboxThemeParam[];
+// Parameter determining the type of recipe data to request.
+extern const char kNtpRecipeTasksModuleDataParam[];
+// Parameter determining the max age in seconds of the cache for recipe tasks
+// data.
+extern const char kNtpRecipeTasksModuleCacheMaxAgeSParam[];
+// Parameter for communicating the experiment group of the recipe tasks module
+// experiment.
+extern const char kNtpRecipeTasksModuleExperimentGroupParam[];
 
 // Returns the timeout after which the load of a module should be aborted.
 base::TimeDelta GetModulesLoadTimeout();
diff --git a/components/security_interstitials/BUILD.gn b/components/security_interstitials/BUILD.gn
index 05c1389..c1b13e5 100644
--- a/components/security_interstitials/BUILD.gn
+++ b/components/security_interstitials/BUILD.gn
@@ -7,8 +7,5 @@
 assert(enable_js_type_check)
 
 group("closure_compile") {
-  deps = [
-    "content/resources:closure_compile",
-    "core/common/resources:closure_compile",
-  ]
+  deps = [ "core/common/resources:closure_compile" ]
 }
diff --git a/components/security_interstitials/content/resources/BUILD.gn b/components/security_interstitials/content/resources/BUILD.gn
index a812d35..655d9b44 100644
--- a/components/security_interstitials/content/resources/BUILD.gn
+++ b/components/security_interstitials/content/resources/BUILD.gn
@@ -2,17 +2,11 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-import("//third_party/closure_compiler/compile_js.gni")
+import("//tools/typescript/ts_library.gni")
 
-assert(enable_js_type_check)
-
-js_type_check("closure_compile") {
-  deps = [ ":connection_help" ]
-}
-
-js_library("connection_help") {
-  deps = [
-    "//ui/webui/resources/js:load_time_data.m",
-    "//ui/webui/resources/js:util.m",
-  ]
+ts_library("build_ts") {
+  root_dir = "."
+  out_dir = "$target_gen_dir/tsc"
+  in_files = [ "connection_help.ts" ]
+  deps = [ "//ui/webui/resources:library" ]
 }
diff --git a/components/security_interstitials/content/resources/connection_help.js b/components/security_interstitials/content/resources/connection_help.ts
similarity index 65%
rename from components/security_interstitials/content/resources/connection_help.js
rename to components/security_interstitials/content/resources/connection_help.ts
index 8a6eba1..b24f9cc 100644
--- a/components/security_interstitials/content/resources/connection_help.js
+++ b/components/security_interstitials/content/resources/connection_help.ts
@@ -7,23 +7,25 @@
 import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
 import {$} from 'chrome://resources/js/util.m.js';
 
-const HIDDEN_CLASS = 'hidden';
+const HIDDEN_CLASS: string = 'hidden';
 
 function setupEvents() {
-  $('details-certerror-button').addEventListener('click', function(event) {
+  $('details-certerror-button').addEventListener('click', function(_event) {
     toggleHidden('details-certerror', 'details-certerror-button');
   });
-  $('details-connectnetwork-button').addEventListener('click', function(event) {
-    toggleHidden('details-connectnetwork', 'details-connectnetwork-button');
-  });
-  $('details-clock-button').addEventListener('click', function(event) {
+  $('details-connectnetwork-button')
+      .addEventListener('click', function(_event) {
+        toggleHidden('details-connectnetwork', 'details-connectnetwork-button');
+      });
+  $('details-clock-button').addEventListener('click', function(_event) {
     toggleHidden('details-clock', 'details-clock-button');
   });
   if (loadTimeData.getBoolean('isWindows')) {
     $('windows-only').classList.remove(HIDDEN_CLASS);
-    $('details-mitmsoftware-button').addEventListener('click', function(event) {
-      toggleHidden('details-mitmsoftware', 'details-mitmsoftware-button');
-    });
+    $('details-mitmsoftware-button')
+        .addEventListener('click', function(_event) {
+          toggleHidden('details-mitmsoftware', 'details-mitmsoftware-button');
+        });
   }
   switch (window.location.hash) {
     case '#' + loadTimeData.getInteger('certCommonNameInvalid'):
@@ -38,11 +40,10 @@
   }
 }
 
-function toggleHidden(className, buttonName) {
+function toggleHidden(className: string, buttonName: string) {
   const hiddenDetails = $(className).classList.toggle(HIDDEN_CLASS);
-  $(buttonName).innerText = hiddenDetails ?
-      loadTimeData.getString('connectionHelpShowMore') :
-      loadTimeData.getString('connectionHelpShowLess');
+  $(buttonName).innerText = loadTimeData.getString(
+      hiddenDetails ? 'connectionHelpShowMore' : 'connectionHelpShowLess');
 }
 
 document.addEventListener('DOMContentLoaded', setupEvents);
diff --git a/components/site_isolation/features.cc b/components/site_isolation/features.cc
index 0ee83dae..ab631cda 100644
--- a/components/site_isolation/features.cc
+++ b/components/site_isolation/features.cc
@@ -9,6 +9,9 @@
 namespace site_isolation {
 namespace features {
 
+const base::Feature kCacheSiteIsolationMemoryThreshold{
+    "CacheSiteIsolationMemoryThreshold", base::FEATURE_DISABLED_BY_DEFAULT};
+
 // Controls a mode for dynamically process-isolating sites where the user has
 // entered a password.  This is intended to be used primarily when full site
 // isolation is turned off.  To check whether this mode is enabled, use
diff --git a/components/site_isolation/features.h b/components/site_isolation/features.h
index 90ed4a2b..ff8bdfb0 100644
--- a/components/site_isolation/features.h
+++ b/components/site_isolation/features.h
@@ -10,6 +10,7 @@
 namespace site_isolation {
 namespace features {
 
+extern const base::Feature kCacheSiteIsolationMemoryThreshold;
 extern const base::Feature kSiteIsolationForPasswordSites;
 extern const base::Feature kSiteIsolationForOAuthSites;
 extern const base::Feature kSiteIsolationMemoryThresholds;
diff --git a/components/site_isolation/site_isolation_policy.cc b/components/site_isolation/site_isolation_policy.cc
index 4ed12c9..9e714d1 100644
--- a/components/site_isolation/site_isolation_policy.cc
+++ b/components/site_isolation/site_isolation_policy.cc
@@ -5,6 +5,7 @@
 #include "components/site_isolation/site_isolation_policy.h"
 
 #include "base/containers/contains.h"
+#include "base/feature_list.h"
 #include "base/json/values_util.h"
 #include "base/metrics/field_trial_params.h"
 #include "base/metrics/histogram_functions.h"
@@ -28,6 +29,88 @@
 using IsolatedOriginSource =
     content::ChildProcessSecurityPolicy::IsolatedOriginSource;
 
+bool g_disallow_memory_threshold_caching = false;
+
+bool ShouldCacheMemoryThresholdDecision() {
+  return base::FeatureList::IsEnabled(
+      features::kCacheSiteIsolationMemoryThreshold);
+}
+
+struct IsolationDisableDecisions {
+  bool should_disable_strict;
+  bool should_disable_partial;
+};
+
+bool ShouldDisableSiteIsolationDueToMemorySlow(
+    content::SiteIsolationMode site_isolation_mode) {
+  // The memory threshold behavior differs for desktop and Android:
+  // - Android uses a 1900MB default threshold for partial site isolation modes
+  //   and a 3200MB default threshold for strict site isolation. See docs in
+  //   https://crbug.com/849815. The thresholds roughly correspond to 2GB+ and
+  //   4GB+ devices and are lower to account for memory carveouts, which
+  //   reduce the amount of memory seen by AmountOfPhysicalMemoryMB(). Both
+  //   partial and strict site isolation thresholds can be overridden via
+  //   params defined in a kSiteIsolationMemoryThresholds field trial.
+  // - Desktop does not enforce a default memory threshold, but for now we
+  //   still support a threshold defined via a kSiteIsolationMemoryThresholds
+  //   field trial.  The trial typically carries the threshold in a param; if
+  //   it doesn't, use a default that's slightly higher than 1GB (see
+  //   https://crbug.com/844118).
+  int default_memory_threshold_mb;
+#if BUILDFLAG(IS_ANDROID)
+  if (site_isolation_mode == content::SiteIsolationMode::kStrictSiteIsolation) {
+    default_memory_threshold_mb = 3200;
+  } else {
+    default_memory_threshold_mb = 1900;
+  }
+#else
+  default_memory_threshold_mb = 1077;
+#endif
+
+  if (base::FeatureList::IsEnabled(features::kSiteIsolationMemoryThresholds)) {
+    std::string param_name;
+    switch (site_isolation_mode) {
+      case content::SiteIsolationMode::kStrictSiteIsolation:
+        param_name = features::kStrictSiteIsolationMemoryThresholdParamName;
+        break;
+      case content::SiteIsolationMode::kPartialSiteIsolation:
+        param_name = features::kPartialSiteIsolationMemoryThresholdParamName;
+        break;
+    }
+    int memory_threshold_mb = base::GetFieldTrialParamByFeatureAsInt(
+        features::kSiteIsolationMemoryThresholds, param_name,
+        default_memory_threshold_mb);
+    return base::SysInfo::AmountOfPhysicalMemoryMB() <= memory_threshold_mb;
+  }
+
+#if BUILDFLAG(IS_ANDROID)
+  if (base::SysInfo::AmountOfPhysicalMemoryMB() <=
+      default_memory_threshold_mb) {
+    return true;
+  }
+#endif
+
+  return false;
+}
+
+IsolationDisableDecisions MakeBothDecisions() {
+  IsolationDisableDecisions result{
+      .should_disable_strict = ShouldDisableSiteIsolationDueToMemorySlow(
+          content::SiteIsolationMode::kStrictSiteIsolation),
+      .should_disable_partial = ShouldDisableSiteIsolationDueToMemorySlow(
+          content::SiteIsolationMode::kPartialSiteIsolation)};
+  return result;
+}
+
+bool CachedDisableSiteIsolation(
+    content::SiteIsolationMode site_isolation_mode) {
+  static const IsolationDisableDecisions decisions = MakeBothDecisions();
+  if (site_isolation_mode == content::SiteIsolationMode::kStrictSiteIsolation) {
+    return decisions.should_disable_strict;
+  }
+  return decisions.should_disable_partial;
+}
+
 }  // namespace
 
 // static
@@ -101,54 +184,12 @@
 // static
 bool SiteIsolationPolicy::ShouldDisableSiteIsolationDueToMemoryThreshold(
     content::SiteIsolationMode site_isolation_mode) {
-  // The memory threshold behavior differs for desktop and Android:
-  // - Android uses a 1900MB default threshold for partial site isolation modes
-  //   and a 3200MB default threshold for strict site isolation. See docs in
-  //   https://crbug.com/849815. The thresholds roughly correspond to 2GB+ and
-  //   4GB+ devices and are lower to account for memory carveouts, which
-  //   reduce the amount of memory seen by AmountOfPhysicalMemoryMB(). Both
-  //   partial and strict site isolation thresholds can be overridden via
-  //   params defined in a kSiteIsolationMemoryThresholds field trial.
-  // - Desktop does not enforce a default memory threshold, but for now we
-  //   still support a threshold defined via a kSiteIsolationMemoryThresholds
-  //   field trial.  The trial typically carries the threshold in a param; if
-  //   it doesn't, use a default that's slightly higher than 1GB (see
-  //   https://crbug.com/844118).
-  int default_memory_threshold_mb;
-#if BUILDFLAG(IS_ANDROID)
-  if (site_isolation_mode == content::SiteIsolationMode::kStrictSiteIsolation) {
-    default_memory_threshold_mb = 3200;
-  } else {
-    default_memory_threshold_mb = 1900;
+  static const bool cache_memory_threshold_decision =
+      ShouldCacheMemoryThresholdDecision();
+  if (!g_disallow_memory_threshold_caching && cache_memory_threshold_decision) {
+    return CachedDisableSiteIsolation(site_isolation_mode);
   }
-#else
-  default_memory_threshold_mb = 1077;
-#endif
-
-  if (base::FeatureList::IsEnabled(features::kSiteIsolationMemoryThresholds)) {
-    std::string param_name;
-    switch (site_isolation_mode) {
-      case content::SiteIsolationMode::kStrictSiteIsolation:
-        param_name = features::kStrictSiteIsolationMemoryThresholdParamName;
-        break;
-      case content::SiteIsolationMode::kPartialSiteIsolation:
-        param_name = features::kPartialSiteIsolationMemoryThresholdParamName;
-        break;
-    }
-    int memory_threshold_mb = base::GetFieldTrialParamByFeatureAsInt(
-        features::kSiteIsolationMemoryThresholds, param_name,
-        default_memory_threshold_mb);
-    return base::SysInfo::AmountOfPhysicalMemoryMB() <= memory_threshold_mb;
-  }
-
-#if BUILDFLAG(IS_ANDROID)
-  if (base::SysInfo::AmountOfPhysicalMemoryMB() <=
-      default_memory_threshold_mb) {
-    return true;
-  }
-#endif
-
-  return false;
+  return ShouldDisableSiteIsolationDueToMemorySlow(site_isolation_mode);
 }
 
 // static
@@ -356,4 +397,10 @@
 #endif
 }
 
+// static
+void SiteIsolationPolicy::SetDisallowMemoryThresholdCachingForTesting(
+    bool disallow_caching) {
+  g_disallow_memory_threshold_caching = disallow_caching;
+}
+
 }  // namespace site_isolation
diff --git a/components/site_isolation/site_isolation_policy.h b/components/site_isolation/site_isolation_policy.h
index 25d698a..2ee1408c 100644
--- a/components/site_isolation/site_isolation_policy.h
+++ b/components/site_isolation/site_isolation_policy.h
@@ -89,6 +89,12 @@
   // process iframes (OOPIF's) to print properly.
   static bool ShouldPdfCompositorBeEnabledForOopifs();
 
+  // When set to true bypasses the caching of the results of
+  // ShouldDisableSiteIsolationDueToMemoryThreshold(). Setting to false reverts
+  // to the default behavior (caching is controlled by a base::Feature).
+  static void SetDisallowMemoryThresholdCachingForTesting(
+      bool disallow_caching);
+
  private:
   // Helpers for implementing PersistIsolatedOrigin().
   static void PersistUserTriggeredIsolatedOrigin(
diff --git a/components/site_isolation/site_isolation_policy_unittest.cc b/components/site_isolation/site_isolation_policy_unittest.cc
index 9ed07c0..9f5b14be 100644
--- a/components/site_isolation/site_isolation_policy_unittest.cc
+++ b/components/site_isolation/site_isolation_policy_unittest.cc
@@ -728,6 +728,11 @@
     base::CommandLine::ForCurrentProcess()->AppendSwitch(
         switches::kEnableLowEndDeviceMode);
     EXPECT_EQ(512, base::SysInfo::AmountOfPhysicalMemoryMB());
+    SiteIsolationPolicy::SetDisallowMemoryThresholdCachingForTesting(true);
+  }
+
+  void TearDown() override {
+    SiteIsolationPolicy::SetDisallowMemoryThresholdCachingForTesting(false);
   }
 
  protected:
@@ -936,6 +941,11 @@
     base::CommandLine::ForCurrentProcess()->AppendSwitch(
         switches::kEnableLowEndDeviceMode);
     EXPECT_EQ(512, base::SysInfo::AmountOfPhysicalMemoryMB());
+    SiteIsolationPolicy::SetDisallowMemoryThresholdCachingForTesting(true);
+  }
+
+  void TearDown() override {
+    SiteIsolationPolicy::SetDisallowMemoryThresholdCachingForTesting(false);
   }
 
  protected:
diff --git a/components/strictmode/android/java/src/org/chromium/components/strictmode/ReflectiveThreadStrictModeInterceptor.java b/components/strictmode/android/java/src/org/chromium/components/strictmode/ReflectiveThreadStrictModeInterceptor.java
index 058232b..90818852 100644
--- a/components/strictmode/android/java/src/org/chromium/components/strictmode/ReflectiveThreadStrictModeInterceptor.java
+++ b/components/strictmode/android/java/src/org/chromium/components/strictmode/ReflectiveThreadStrictModeInterceptor.java
@@ -107,7 +107,7 @@
     }
 
     /** @param o {@code android.os.StrictMode.ViolationInfo} */
-    @SuppressWarnings({"unchecked", "DiscouragedPrivateApi", "PrivateApi"})
+    @SuppressWarnings({"unchecked", "DiscouragedPrivateApi", "PrivateApi", "BlockedPrivateApi"})
     private int getViolationType(Object violationInfo) {
         try {
             Class<?> violationInfoClass = Class.forName("android.os.StrictMode$ViolationInfo");
diff --git a/components/strings/components_strings_af.xtb b/components/strings/components_strings_af.xtb
index 0b0f419..4624be6 100644
--- a/components/strings/components_strings_af.xtb
+++ b/components/strings/components_strings_af.xtb
@@ -1528,6 +1528,7 @@
 <translation id="5123063207673082822">Naweek</translation>
 <translation id="5123433949759960244">Basketbal</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">Ongeldige URL.</translation>
 <translation id="512592033764059484">Sokker</translation>
 <translation id="5126510351761255129">Verifieer jou kaart</translation>
 <translation id="512670116361803001"><ph name="APP_NAME" /> se grootte is dalk nie maklik om te verander nie. Gebruik voorafgestelde venstergroottes om te verhoed dat die program kwessies ervaar.</translation>
@@ -2729,6 +2730,7 @@
 <translation id="8508648098325802031">Search-ikoon</translation>
 <translation id="8511402995811232419">Bestuur webkoekies</translation>
 <translation id="851353418319061866">Akkuraatheidkontrole</translation>
+<translation id="8513580896341796021">Aflaai het begin. Druk |<ph name="ACCELERATOR" />| om dit te sien.</translation>
 <translation id="8519753333133776369">HID-toestel word deur jou admin toegelaat</translation>
 <translation id="8522552481199248698">Chrome kan jou help om jou Google-rekening te beskerm en jou wagwoord te verander.</translation>
 <translation id="8530813470445476232">Vee jou blaaigeskiedenis, webkoekies, kasgeheue en meer in Chrome-instellings uit</translation>
diff --git a/components/strings/components_strings_am.xtb b/components/strings/components_strings_am.xtb
index 1ee914f..0c00273c 100644
--- a/components/strings/components_strings_am.xtb
+++ b/components/strings/components_strings_am.xtb
@@ -1464,6 +1464,7 @@
 <translation id="4969341057194253438">ቀረጻ ሰርዝ</translation>
 <translation id="4973922308112707173">ከላይ ሁለቴ ብሳ</translation>
 <translation id="4976702386844183910">ለመጨረሻ ጊዜ የተጎበኘው በ<ph name="DATE" /></translation>
+<translation id="498323057460789381">የንድፍ ማረጋገጫ ስህተት፦ <ph name="ERROR" /></translation>
 <translation id="4984088539114770594">ማይክፎሮን ይጠቀም?</translation>
 <translation id="4984339528288761049">Prc5 (የደብዳቤ ፖስታ)</translation>
 <translation id="4989163558385430922">ሁሉንም ይመልከቱ</translation>
@@ -1526,6 +1527,7 @@
 <translation id="5123063207673082822">የሳምንት እረፍት ቀን</translation>
 <translation id="5123433949759960244">ቅርጫት ኳስ</translation>
 <translation id="5125394840236832993">B-ፕላስ</translation>
+<translation id="5125751979347152379">ልክ ያልሆነ URL።</translation>
 <translation id="512592033764059484">እግር ኳስ</translation>
 <translation id="5126510351761255129">የእርስዎን ኮርድ ያረጋግጡ</translation>
 <translation id="512670116361803001"><ph name="APP_NAME" /> በጥሩ ሁኔታ መጠኑን ላይቀይር ይችላል። መተግበሪያውን ችግሮች እንዳያጋጥሙት ለመከላከል ቅድመ-ቅምጥ የመስኮት መጠኖችን ይጠቀሙ።</translation>
diff --git a/components/strings/components_strings_ar.xtb b/components/strings/components_strings_ar.xtb
index 24f7e29..5753f02c 100644
--- a/components/strings/components_strings_ar.xtb
+++ b/components/strings/components_strings_ar.xtb
@@ -1530,6 +1530,7 @@
 <translation id="5123063207673082822">نهاية الأسبوع</translation>
 <translation id="5123433949759960244">كرة السلة</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">‏عنوان URL غير صالح.</translation>
 <translation id="512592033764059484">كرة قدم</translation>
 <translation id="5126510351761255129">التحقق من بطاقتك</translation>
 <translation id="512670116361803001">قد لا يتم تغيير حجم التطبيق <ph name="APP_NAME" /> بشكل مناسب. استخدِم أحجام النوافذ المُعَدّة مسبقًا لمنع حدوث مشاكل أثناء استخدام التطبيق.</translation>
diff --git a/components/strings/components_strings_as.xtb b/components/strings/components_strings_as.xtb
index 1882455..0b398540 100644
--- a/components/strings/components_strings_as.xtb
+++ b/components/strings/components_strings_as.xtb
@@ -1524,6 +1524,7 @@
 <translation id="5123063207673082822">সপ্তাহৰ অন্ত</translation>
 <translation id="5123433949759960244">বাস্কেটবল</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">অমান্য URL।</translation>
 <translation id="512592033764059484">ফুটবল</translation>
 <translation id="5126510351761255129">আপোনাৰ কাৰ্ডখন সত্যাপন কৰক</translation>
 <translation id="512670116361803001"><ph name="APP_NAME" />ৰ আকাৰ ভালদৰে সলনি নহ’ব পাৰে। এপ্‌টো সমস্যাৰ সন্মুখীন হোৱাত বাধা দিবলৈ পূৰ্বে ছেট কৰি থোৱা ৱিণ্ড’ৰ আকাৰ ব্যৱহাৰ কৰক।</translation>
diff --git a/components/strings/components_strings_az.xtb b/components/strings/components_strings_az.xtb
index 6d3e391b..1cf55a1 100644
--- a/components/strings/components_strings_az.xtb
+++ b/components/strings/components_strings_az.xtb
@@ -1524,6 +1524,7 @@
 <translation id="5123063207673082822">Həftəsonu</translation>
 <translation id="5123433949759960244">Basketbol</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">Yanlış URL.</translation>
 <translation id="512592033764059484">Futbol</translation>
 <translation id="5126510351761255129">Kartı təsdiq edin</translation>
 <translation id="512670116361803001"><ph name="APP_NAME" /> ölçüsü lazımi şəkildə dəyişdirilməyə bilər. Tətbiqin problemlərlə üzləşməməsi üçün əvvəlcədən ayarlanmış pəncərə ölçülərindən istifadə edin.</translation>
diff --git a/components/strings/components_strings_be.xtb b/components/strings/components_strings_be.xtb
index 4bc2f8b..36fc239 100644
--- a/components/strings/components_strings_be.xtb
+++ b/components/strings/components_strings_be.xtb
@@ -1464,6 +1464,7 @@
 <translation id="4969341057194253438">Выдаліць запіс</translation>
 <translation id="4973922308112707173">Дзве дзіркі зверху</translation>
 <translation id="4976702386844183910">Апошняе наведванне: <ph name="DATE" /></translation>
+<translation id="498323057460789381">Памылка праверкі схемы: <ph name="ERROR" /></translation>
 <translation id="4984088539114770594">Выкарыстоўваць мікрафон?</translation>
 <translation id="4984339528288761049">Prc5 (канверт)</translation>
 <translation id="4989163558385430922">Паказаць усе</translation>
@@ -1526,6 +1527,7 @@
 <translation id="5123063207673082822">Выхадныя</translation>
 <translation id="5123433949759960244">Баскетбол</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">Няправільны URL-адрас.</translation>
 <translation id="512592033764059484">Футбол</translation>
 <translation id="5126510351761255129">Спраўджанне карткі</translation>
 <translation id="512670116361803001">Змяненне памеру праграмы "<ph name="APP_NAME" />" можа выклікаць памылкі. Каб пазбегнуць іх, выкарыстоўвайце загадзя зададзеныя памеры вокнаў.</translation>
diff --git a/components/strings/components_strings_bg.xtb b/components/strings/components_strings_bg.xtb
index 45a97dc..f2f7e6f 100644
--- a/components/strings/components_strings_bg.xtb
+++ b/components/strings/components_strings_bg.xtb
@@ -1527,6 +1527,7 @@
 <translation id="5123063207673082822">Уикенда</translation>
 <translation id="5123433949759960244">Баскетболна топка</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">Невалиден URL адрес.</translation>
 <translation id="512592033764059484">Футбол</translation>
 <translation id="5126510351761255129">Потвърдете картата</translation>
 <translation id="512670116361803001">Възможно е приложението <ph name="APP_NAME" /> да не функционира правилно след преоразмеряване. За да предотвратите възникване на проблеми, използвайте предварително зададените размери за прозорците.</translation>
diff --git a/components/strings/components_strings_bn.xtb b/components/strings/components_strings_bn.xtb
index 65dc923..2490df2 100644
--- a/components/strings/components_strings_bn.xtb
+++ b/components/strings/components_strings_bn.xtb
@@ -1529,6 +1529,7 @@
 <translation id="5123063207673082822">সপ্তাহান্ত</translation>
 <translation id="5123433949759960244">বাস্কেটবল</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">ভুল ইউআরএল৷</translation>
 <translation id="512592033764059484">ফুটবল</translation>
 <translation id="5126510351761255129">আপনার কার্ডটি যাচাই করুন</translation>
 <translation id="512670116361803001"><ph name="APP_NAME" /> সঠিকভাবে ছোট বড় করা নাও যেতে পারে। অ্যাপটি ব্যবহার করতে সমস্যা এড়াতে প্রিসেট উইন্ডো সাইজ ব্যবহার করুন।</translation>
diff --git a/components/strings/components_strings_bs.xtb b/components/strings/components_strings_bs.xtb
index dca6a50..9eab3b9 100644
--- a/components/strings/components_strings_bs.xtb
+++ b/components/strings/components_strings_bs.xtb
@@ -1528,6 +1528,7 @@
 <translation id="5123063207673082822">Vikend</translation>
 <translation id="5123433949759960244">Košarka</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">Nevažeći URL.</translation>
 <translation id="512592033764059484">Fudbal</translation>
 <translation id="5126510351761255129">Potvrdite karticu</translation>
 <translation id="512670116361803001"><ph name="APP_NAME" /> možda neće dobro promijeniti veličinu. Koristite zadane postavke veličina prozora da spriječite probleme s aplikacijom.</translation>
diff --git a/components/strings/components_strings_ca.xtb b/components/strings/components_strings_ca.xtb
index 0bbc15eb..956a7eb 100644
--- a/components/strings/components_strings_ca.xtb
+++ b/components/strings/components_strings_ca.xtb
@@ -1528,6 +1528,7 @@
 <translation id="5123063207673082822">Cap de setmana</translation>
 <translation id="5123433949759960244">Pilota de bàsquet</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">URL no vàlid.</translation>
 <translation id="512592033764059484">Futbol</translation>
 <translation id="5126510351761255129">Verifica la targeta</translation>
 <translation id="512670116361803001">És possible que l'aplicació <ph name="APP_NAME" /> no canviï de mida correctament. Utilitza les mides de la finestra predefinides per evitar que l'aplicació tingui problemes.</translation>
diff --git a/components/strings/components_strings_cs.xtb b/components/strings/components_strings_cs.xtb
index 9931a7d..ff7ecad2 100644
--- a/components/strings/components_strings_cs.xtb
+++ b/components/strings/components_strings_cs.xtb
@@ -1524,6 +1524,7 @@
 <translation id="5123063207673082822">Víkend</translation>
 <translation id="5123433949759960244">Basketbal</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">Neplatná adresa URL.</translation>
 <translation id="512592033764059484">Fotbal</translation>
 <translation id="5126510351761255129">Ověřte svou kartu</translation>
 <translation id="512670116361803001">Velikost aplikace <ph name="APP_NAME" /> se nemusí změnit správně. Použijte přednastavené velikosti oken, abyste u aplikace předešli problémům</translation>
diff --git a/components/strings/components_strings_cy.xtb b/components/strings/components_strings_cy.xtb
index be14145..fadcb9b 100644
--- a/components/strings/components_strings_cy.xtb
+++ b/components/strings/components_strings_cy.xtb
@@ -1528,6 +1528,7 @@
 <translation id="5123063207673082822">Penwythnos</translation>
 <translation id="5123433949759960244">Pêl-fasged</translation>
 <translation id="5125394840236832993">B-Plws</translation>
+<translation id="5125751979347152379">URL annilys.</translation>
 <translation id="512592033764059484">Pêl-droed</translation>
 <translation id="5126510351761255129">Dilyswch eich cerdyn</translation>
 <translation id="512670116361803001">Mae'n bosib na fydd <ph name="APP_NAME" /> yn newid maint yn dda. Defnyddiwch feintiau ffenestri rhagosodedig i atal yr ap rhag profi problemau.</translation>
diff --git a/components/strings/components_strings_da.xtb b/components/strings/components_strings_da.xtb
index 4fb1f36..5d0d04a8 100644
--- a/components/strings/components_strings_da.xtb
+++ b/components/strings/components_strings_da.xtb
@@ -1528,6 +1528,7 @@
 <translation id="5123063207673082822">Weekend</translation>
 <translation id="5123433949759960244">Basketball</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">Ugyldig webadresse.</translation>
 <translation id="512592033764059484">Fodbold</translation>
 <translation id="5126510351761255129">Bekræft dit kort</translation>
 <translation id="512670116361803001">Størrelsen på <ph name="APP_NAME" /> kan muligvis ikke tilpasses uden problemer. Brug forindstillede vinduestørrelser for at sikre, at appen fungerer korrekt.</translation>
diff --git a/components/strings/components_strings_de.xtb b/components/strings/components_strings_de.xtb
index b53fa58..528ff070 100644
--- a/components/strings/components_strings_de.xtb
+++ b/components/strings/components_strings_de.xtb
@@ -1463,6 +1463,7 @@
 <translation id="4969341057194253438">Aufnahme löschen</translation>
 <translation id="4973922308112707173">Doppelte Lochung oben</translation>
 <translation id="4976702386844183910">Zuletzt besucht am <ph name="DATE" /></translation>
+<translation id="498323057460789381">Schemavalidierungsfehler: <ph name="ERROR" /></translation>
 <translation id="4984088539114770594">Mikrofon verwenden?</translation>
 <translation id="4984339528288761049">Prc5 (Umschlag)</translation>
 <translation id="4989163558385430922">Alle ansehen</translation>
@@ -1525,6 +1526,7 @@
 <translation id="5123063207673082822">Wochenende</translation>
 <translation id="5123433949759960244">Basketball</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">Ungültige URL</translation>
 <translation id="512592033764059484">Fußball</translation>
 <translation id="5126510351761255129">Karte bestätigen</translation>
 <translation id="512670116361803001">Die Größe von <ph name="APP_NAME" /> kann eventuell nicht richtig angepasst werden. Verwende voreingestellte Fenstergrößen, damit die App ordnungsgemäß funktioniert.</translation>
diff --git a/components/strings/components_strings_el.xtb b/components/strings/components_strings_el.xtb
index 5ef4613..62c3bea 100644
--- a/components/strings/components_strings_el.xtb
+++ b/components/strings/components_strings_el.xtb
@@ -1531,6 +1531,7 @@
 <translation id="5123063207673082822">Σαββατοκύριακο</translation>
 <translation id="5123433949759960244">Μπάλα μπάσκετ</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">Μη έγκυρη διεύθυνση URL.</translation>
 <translation id="512592033764059484">Ποδόσφαιρο</translation>
 <translation id="5126510351761255129">Επαλήθευση κάρτας</translation>
 <translation id="512670116361803001">Η αλλαγή μεγέθους στην εφαρμογή <ph name="APP_NAME" /> μπορεί να μην λειτουργεί σωστά. Χρησιμοποιήστε τα προεπιλεγμένα μεγέθη παραθύρου για να αποτρέψετε την εμφάνιση τυχόν προβλημάτων στην εφαρμογή.</translation>
diff --git a/components/strings/components_strings_en-GB.xtb b/components/strings/components_strings_en-GB.xtb
index e75713b8..218f3d1 100644
--- a/components/strings/components_strings_en-GB.xtb
+++ b/components/strings/components_strings_en-GB.xtb
@@ -1528,6 +1528,7 @@
 <translation id="5123063207673082822">Weekend</translation>
 <translation id="5123433949759960244">Basketball</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">Invalid URL.</translation>
 <translation id="512592033764059484">Football</translation>
 <translation id="5126510351761255129">Verify your card</translation>
 <translation id="512670116361803001"><ph name="APP_NAME" /> may not resize well. Use preset window sizes to prevent the app from experiencing issues.</translation>
diff --git a/components/strings/components_strings_es-419.xtb b/components/strings/components_strings_es-419.xtb
index 266be4a..2101db02 100644
--- a/components/strings/components_strings_es-419.xtb
+++ b/components/strings/components_strings_es-419.xtb
@@ -1529,6 +1529,7 @@
 <translation id="5123063207673082822">Fin de semana</translation>
 <translation id="5123433949759960244">Básquet</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">URL no válido.</translation>
 <translation id="512592033764059484">Fútbol</translation>
 <translation id="5126510351761255129">Verifica tu tarjeta</translation>
 <translation id="512670116361803001">Es posible que el cambio de tamaño de <ph name="APP_NAME" /> no funcione correctamente. Utiliza los tamaños predeterminados de ventana para que no se generen problemas en la app.</translation>
diff --git a/components/strings/components_strings_es.xtb b/components/strings/components_strings_es.xtb
index 94b0232d3..2218252 100644
--- a/components/strings/components_strings_es.xtb
+++ b/components/strings/components_strings_es.xtb
@@ -1527,6 +1527,7 @@
 <translation id="5123063207673082822">Fin de semana</translation>
 <translation id="5123433949759960244">Balón de baloncesto</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">La URL no es válida.</translation>
 <translation id="512592033764059484">Fútbol</translation>
 <translation id="5126510351761255129">Verifica tu tarjeta</translation>
 <translation id="512670116361803001">Es posible que el tamaño de <ph name="APP_NAME" /> no se cambie correctamente. Usa los preajustes de tamaño de ventana para evitar que la aplicación dé problemas.</translation>
diff --git a/components/strings/components_strings_et.xtb b/components/strings/components_strings_et.xtb
index 6256173..cde05bc 100644
--- a/components/strings/components_strings_et.xtb
+++ b/components/strings/components_strings_et.xtb
@@ -1465,6 +1465,7 @@
 <translation id="4969341057194253438">Kustuta salvestis</translation>
 <translation id="4973922308112707173">Kaks auku ülal</translation>
 <translation id="4976702386844183910">Viimati külastati <ph name="DATE" /></translation>
+<translation id="498323057460789381">Skeemi valideerimise viga: <ph name="ERROR" /></translation>
 <translation id="4984088539114770594">Kas kasutada mikrofoni?</translation>
 <translation id="4984339528288761049">Prc5 (ümbrik)</translation>
 <translation id="4989163558385430922">Kuva kõik</translation>
@@ -1527,6 +1528,7 @@
 <translation id="5123063207673082822">Nädalavahetus</translation>
 <translation id="5123433949759960244">Korvpall</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">Vale URL.</translation>
 <translation id="512592033764059484">Jalgpall</translation>
 <translation id="5126510351761255129">Kaardi kinnitamine</translation>
 <translation id="512670116361803001"><ph name="APP_NAME" /> ei pruugi hästi toimida, kui selle suurust muudetakse. Rakenduse probleemide vältimiseks kasutage akna eelseadistatud suurusi.</translation>
diff --git a/components/strings/components_strings_eu.xtb b/components/strings/components_strings_eu.xtb
index 8a4bff5e..f7de5ed 100644
--- a/components/strings/components_strings_eu.xtb
+++ b/components/strings/components_strings_eu.xtb
@@ -1461,6 +1461,7 @@
 <translation id="4969341057194253438">Ezabatu grabaketa</translation>
 <translation id="4973922308112707173">Bi zulo goian</translation>
 <translation id="4976702386844183910">Azken bisita: <ph name="DATE" /></translation>
+<translation id="498323057460789381">Eskemaren baliozkotze-errorea: <ph name="ERROR" /></translation>
 <translation id="4984088539114770594">Mikrofonoa erabili nahi duzu?</translation>
 <translation id="4984339528288761049">Prc5 (gutun-azala)</translation>
 <translation id="4989163558385430922">Ikusi guztiak</translation>
@@ -1523,6 +1524,7 @@
 <translation id="5123063207673082822">Asteburua</translation>
 <translation id="5123433949759960244">Saskibaloiko baloia</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">URLak ez du balio.</translation>
 <translation id="512592033764059484">Futbola</translation>
 <translation id="5126510351761255129">Egiaztatu txartela</translation>
 <translation id="512670116361803001">Agian ez da behar bezala aldatuko <ph name="APP_NAME" /> aplikazioaren tamaina. Aplikazioak arazorik ez izateko, erabili aurrezarritako leiho-tamainak.</translation>
diff --git a/components/strings/components_strings_fa.xtb b/components/strings/components_strings_fa.xtb
index 853c377a..d31f548 100644
--- a/components/strings/components_strings_fa.xtb
+++ b/components/strings/components_strings_fa.xtb
@@ -1528,6 +1528,7 @@
 <translation id="5123063207673082822">آخر هفته</translation>
 <translation id="5123433949759960244">بسکتبال</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">نشانی وب نامعتبر است.</translation>
 <translation id="512592033764059484">فوتبال</translation>
 <translation id="5126510351761255129">کارتتان را تأیید کنید</translation>
 <translation id="512670116361803001">ممکن است اندازه <ph name="APP_NAME" /> به‌خوبی تغییر نکند. برای اینکه برنامه با مشکل روبرو نشود، از اندازه‌های پیش‌تنظیم پنجره استفاده کنید.</translation>
@@ -2729,6 +2730,7 @@
 <translation id="8508648098325802031">نماد جستجو</translation>
 <translation id="8511402995811232419">مدیریت کوکی‌ها</translation>
 <translation id="851353418319061866">صحت‌سنجی</translation>
+<translation id="8513580896341796021">بارگیری شروع شد. برای دیدن آن، |<ph name="ACCELERATOR" />| را فشار دهید.</translation>
 <translation id="8519753333133776369">‏دستگاه HID را سرپرستتان مجاز کرده است</translation>
 <translation id="8522552481199248698">‏Chrome می‌تواند کمک کند از حساب Google خود محافظت کنید و گذرواژه‌تان را تغییر دهید.</translation>
 <translation id="8530813470445476232">‏سابقه مرور، کوکی، حافظه پنهان و موارد دیگر را در تنظیمات Chrome پاک کنید.</translation>
diff --git a/components/strings/components_strings_fi.xtb b/components/strings/components_strings_fi.xtb
index c012cdb..a485344 100644
--- a/components/strings/components_strings_fi.xtb
+++ b/components/strings/components_strings_fi.xtb
@@ -1466,6 +1466,7 @@
 <translation id="4969341057194253438">Poista tallenne</translation>
 <translation id="4973922308112707173">Kaksi reikää yläreunassa</translation>
 <translation id="4976702386844183910">Viimeksi avattu <ph name="DATE" /></translation>
+<translation id="498323057460789381">Mallin todennusvirhe: <ph name="ERROR" /></translation>
 <translation id="4984088539114770594">Käytetäänkö mikrofonia?</translation>
 <translation id="4984339528288761049">Prc5 (kirjekuori)</translation>
 <translation id="4989163558385430922">Näytä kaikki</translation>
@@ -1528,6 +1529,7 @@
 <translation id="5123063207673082822">Viikonloppu</translation>
 <translation id="5123433949759960244">Koripallo</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">Virheellinen URL-osoite.</translation>
 <translation id="512592033764059484">Jalkapallo</translation>
 <translation id="5126510351761255129">Vahvista kortti</translation>
 <translation id="512670116361803001"><ph name="APP_NAME" /> ei ehkä näy oikein, jos muutat kokoa. Käytä valmiita ikkunakokoja estääksesi sovelluksen ongelmat.</translation>
diff --git a/components/strings/components_strings_fil.xtb b/components/strings/components_strings_fil.xtb
index b21f54f..c28a127 100644
--- a/components/strings/components_strings_fil.xtb
+++ b/components/strings/components_strings_fil.xtb
@@ -1528,6 +1528,7 @@
 <translation id="5123063207673082822">Weekend</translation>
 <translation id="5123433949759960244">Basketball</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">Di-wastong URL.</translation>
 <translation id="512592033764059484">Soccer</translation>
 <translation id="5126510351761255129">I-verify ang iyong card</translation>
 <translation id="512670116361803001">Posibleng hindi ma-resize nang maayos ang <ph name="APP_NAME" />. Gamitin ang mga preset na laki ng window para mapigilang makaranas ng mga isyu ang app.</translation>
diff --git a/components/strings/components_strings_fr-CA.xtb b/components/strings/components_strings_fr-CA.xtb
index 8fea6145f..606b15b8 100644
--- a/components/strings/components_strings_fr-CA.xtb
+++ b/components/strings/components_strings_fr-CA.xtb
@@ -1527,6 +1527,7 @@
 <translation id="5123063207673082822">Fin de semaine</translation>
 <translation id="5123433949759960244">Basketball</translation>
 <translation id="5125394840236832993">B plus</translation>
+<translation id="5125751979347152379">URL incorrecte.</translation>
 <translation id="512592033764059484">Soccer</translation>
 <translation id="5126510351761255129">Vérifier votre carte</translation>
 <translation id="512670116361803001">L'application <ph name="APP_NAME" /> ne sera peut-être pas bien redimensionnée. Utilisez des tailles de fenêtre préréglées pour éviter que l'application rencontre des problèmes.</translation>
diff --git a/components/strings/components_strings_fr.xtb b/components/strings/components_strings_fr.xtb
index 375398e..cd7b45f 100644
--- a/components/strings/components_strings_fr.xtb
+++ b/components/strings/components_strings_fr.xtb
@@ -1527,6 +1527,7 @@
 <translation id="5123063207673082822">Week-end</translation>
 <translation id="5123433949759960244">Basket-ball</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">URL incorrecte</translation>
 <translation id="512592033764059484">Football</translation>
 <translation id="5126510351761255129">Valider votre carte</translation>
 <translation id="512670116361803001"><ph name="APP_NAME" /> ne sera peut-être pas bien redimensionnée. Pour que l'appli fonctionne correctement, utilisez des tailles de fenêtre prédéfinies.</translation>
diff --git a/components/strings/components_strings_gl.xtb b/components/strings/components_strings_gl.xtb
index 5499a972..9997f22 100644
--- a/components/strings/components_strings_gl.xtb
+++ b/components/strings/components_strings_gl.xtb
@@ -1527,6 +1527,7 @@
 <translation id="5123063207673082822">Fin de semana</translation>
 <translation id="5123433949759960244">Baloncesto</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">URL non válido.</translation>
 <translation id="512592033764059484">Fútbol</translation>
 <translation id="5126510351761255129">Verificar a túa tarxeta</translation>
 <translation id="512670116361803001">É posible que <ph name="APP_NAME" /> non cambie ben de tamaño. Para evitar que se produzan problemas co funcionamento da aplicación, usa os tamaños de ventá predeterminados.</translation>
diff --git a/components/strings/components_strings_gu.xtb b/components/strings/components_strings_gu.xtb
index 0e958d84..b05b995 100644
--- a/components/strings/components_strings_gu.xtb
+++ b/components/strings/components_strings_gu.xtb
@@ -1465,6 +1465,7 @@
 <translation id="4969341057194253438">રેકોર્ડિંગ ડિલીટ કરો</translation>
 <translation id="4973922308112707173">ઉપરની બાજુએ બે કાણાં પાડો</translation>
 <translation id="4976702386844183910">છેલ્લે <ph name="DATE" />ના રોજ મુલાકાત લીધી</translation>
+<translation id="498323057460789381">સ્કીમા ચકાસણીમાં ભૂલ: <ph name="ERROR" /></translation>
 <translation id="4984088539114770594">માઇક્રોફોનનો ઉપયોગ કરીએ?</translation>
 <translation id="4984339528288761049">Prc5 (એન્વલપ)</translation>
 <translation id="4989163558385430922">બધા જુઓ</translation>
@@ -1527,6 +1528,7 @@
 <translation id="5123063207673082822">વીકએન્ડ</translation>
 <translation id="5123433949759960244">બાસ્કેટબૉલ</translation>
 <translation id="5125394840236832993">B-પ્લસ</translation>
+<translation id="5125751979347152379">અમાન્ય URL.</translation>
 <translation id="512592033764059484">સૉકર</translation>
 <translation id="5126510351761255129">તમારું કાર્ડ ચકાસો</translation>
 <translation id="512670116361803001"><ph name="APP_NAME" /> કદાચ યોગ્ય રીતે કદ બદલી શકશે નહીં. ઍપમાં અનુભવાતી સમસ્યા અટકાવવા માટે, વિન્ડોના પ્રીસેટ કરેલા કદનો ઉપયોગ કરો.</translation>
diff --git a/components/strings/components_strings_hi.xtb b/components/strings/components_strings_hi.xtb
index 60b4910..1a0d704 100644
--- a/components/strings/components_strings_hi.xtb
+++ b/components/strings/components_strings_hi.xtb
@@ -1527,6 +1527,7 @@
 <translation id="5123063207673082822">शनिवार और रविवार</translation>
 <translation id="5123433949759960244">बास्केटबॉल</translation>
 <translation id="5125394840236832993">बी-प्लस</translation>
+<translation id="5125751979347152379">गलत यूआरएल.</translation>
 <translation id="512592033764059484">सॉकर (असोसिएशन फ़ुटबॉल)</translation>
 <translation id="5126510351761255129">कार्ड की पुष्टि करें</translation>
 <translation id="512670116361803001">हो सकता है कि <ph name="APP_NAME" /> का डिसप्ले, डिवाइस के वि़ंडो साइज़ के हिसाब से न बदले. ऐप्लिकेशन इस्तेमाल करने में आने वाली समस्याओं से बचने के लिए, प्रीसेट विंडो साइज़ का इस्तेमाल करें.</translation>
diff --git a/components/strings/components_strings_hr.xtb b/components/strings/components_strings_hr.xtb
index 28b83d42..c98031c 100644
--- a/components/strings/components_strings_hr.xtb
+++ b/components/strings/components_strings_hr.xtb
@@ -1527,6 +1527,7 @@
 <translation id="5123063207673082822">Vikend</translation>
 <translation id="5123433949759960244">Košarka</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">Nevažeći URL.</translation>
 <translation id="512592033764059484">Nogomet</translation>
 <translation id="5126510351761255129">Potvrdite svoju karticu</translation>
 <translation id="512670116361803001"><ph name="APP_NAME" /> možda neće dobro promijeniti veličinu. Koristite unaprijed definirane veličine prozora da biste spriječili poteškoće s aplikacijom.</translation>
diff --git a/components/strings/components_strings_hu.xtb b/components/strings/components_strings_hu.xtb
index debad807..4b355d442 100644
--- a/components/strings/components_strings_hu.xtb
+++ b/components/strings/components_strings_hu.xtb
@@ -1526,6 +1526,7 @@
 <translation id="5123063207673082822">Hétvége</translation>
 <translation id="5123433949759960244">Kosárlabda</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">Érvénytelen URL</translation>
 <translation id="512592033764059484">Labdarúgás</translation>
 <translation id="5126510351761255129">Kártya ellenőrzése</translation>
 <translation id="512670116361803001">Előfordulhat, hogy a(z) <ph name="APP_NAME" /> átméretezése nem működik megfelelően. Használjon előre beállított ablakméreteket a problémák elkerülése érdekében.</translation>
diff --git a/components/strings/components_strings_hy.xtb b/components/strings/components_strings_hy.xtb
index 57f16c7..e430ea7 100644
--- a/components/strings/components_strings_hy.xtb
+++ b/components/strings/components_strings_hy.xtb
@@ -1529,6 +1529,7 @@
 <translation id="5123063207673082822">Հանգստյան օրեր</translation>
 <translation id="5123433949759960244">Բասկետբոլ</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">URL-ն անվավեր է:</translation>
 <translation id="512592033764059484">Ֆուտբոլ</translation>
 <translation id="5126510351761255129">Հաստատեք ձեր քարտը</translation>
 <translation id="512670116361803001"><ph name="APP_NAME" /> հավելվածը չի աջակցում չափի փոփոխումը։ Սխալներից խուսափելու համար օգտագործեք ստանդարտ չափեր։</translation>
diff --git a/components/strings/components_strings_id.xtb b/components/strings/components_strings_id.xtb
index a20888d..fe1cdc12 100644
--- a/components/strings/components_strings_id.xtb
+++ b/components/strings/components_strings_id.xtb
@@ -1527,6 +1527,7 @@
 <translation id="5123063207673082822">Akhir pekan</translation>
 <translation id="5123433949759960244">Bola basket</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">URL tidak valid.</translation>
 <translation id="512592033764059484">Sepak bola</translation>
 <translation id="5126510351761255129">Verifikasi kartu</translation>
 <translation id="512670116361803001">Perubahan ukuran <ph name="APP_NAME" /> mungkin tidak sesuai. Gunakan ukuran jendela preset untuk mencegah aplikasi mengalami masalah.</translation>
diff --git a/components/strings/components_strings_is.xtb b/components/strings/components_strings_is.xtb
index 8f56378..e9e3b5b 100644
--- a/components/strings/components_strings_is.xtb
+++ b/components/strings/components_strings_is.xtb
@@ -1528,6 +1528,7 @@
 <translation id="5123063207673082822">Helgi</translation>
 <translation id="5123433949759960244">Körfubolti</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">Ógild vefslóð.</translation>
 <translation id="512592033764059484">Fótbolti</translation>
 <translation id="5126510351761255129">Staðfestu kortið þitt</translation>
 <translation id="512670116361803001">Óvíst er að breytingar á stærð <ph name="APP_NAME" /> komi vel út. Notaðu forstilltar gluggastærðir til að koma í veg fyrir vandamál í forritinu.</translation>
diff --git a/components/strings/components_strings_it.xtb b/components/strings/components_strings_it.xtb
index 9eb743e9..8275b73 100644
--- a/components/strings/components_strings_it.xtb
+++ b/components/strings/components_strings_it.xtb
@@ -1525,6 +1525,7 @@
 <translation id="5123063207673082822">Weekend</translation>
 <translation id="5123433949759960244">Basket</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">URL non valido.</translation>
 <translation id="512592033764059484">Calcio</translation>
 <translation id="5126510351761255129">Verifica la carta</translation>
 <translation id="512670116361803001">Il ridimensionamento dell'app <ph name="APP_NAME" /> potrebbe non avvenire correttamente. Utilizza le dimensioni di finestra preimpostate per evitare problemi relativi all'app.</translation>
@@ -2254,6 +2255,7 @@
 <translation id="7238585580608191973">Impronta digitale SHA-256</translation>
 <translation id="7240120331469437312">Nome alternativo del soggetto del certificato</translation>
 <translation id="7243010569062352439"><ph name="PASSWORDS" />; <ph name="SIGNIN_DATA" /></translation>
+<translation id="7244465398154211886">{NUM_MATCHES,plural, =1{# corrispondenza}other{# corrispondenze}}</translation>
 <translation id="724691107663265825">Il sito che stai per visitare contiene malware</translation>
 <translation id="724975217298816891">Inserisci la data di scadenza e il codice CVC della carta <ph name="CREDIT_CARD" /> per aggiornare i relativi dettagli. Dopo essere stati confermati, i dettagli della carta saranno condivisi con questo sito.</translation>
 <translation id="7251437084390964440">La configurazione di rete non è conforme allo standard ONC. Parti della configurazione potrebbero non essere importate.
@@ -2725,6 +2727,7 @@
 <translation id="8508648098325802031">Icona Ricerca</translation>
 <translation id="8511402995811232419">Gestisci i cookie</translation>
 <translation id="851353418319061866">Controllo accuratezza</translation>
+<translation id="8513580896341796021">Download iniziato. Per visualizzarlo, premi |<ph name="ACCELERATOR" />|.</translation>
 <translation id="8519753333133776369">Dispositivo HID consentito dal tuo amministratore</translation>
 <translation id="8522552481199248698">Chrome può aiutarti a proteggere il tuo Account Google e a modificare la password.</translation>
 <translation id="8530813470445476232">Cancella la cronologia di navigazione e i cookie, svuota la cache e altro ancora nelle impostazioni di Chrome</translation>
diff --git a/components/strings/components_strings_iw.xtb b/components/strings/components_strings_iw.xtb
index 23eb96b..482279c 100644
--- a/components/strings/components_strings_iw.xtb
+++ b/components/strings/components_strings_iw.xtb
@@ -1531,6 +1531,7 @@
 <translation id="5123063207673082822">סוף השבוע</translation>
 <translation id="5123433949759960244">כדורסל</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">כתובת אתר לא חוקית.</translation>
 <translation id="512592033764059484">כדורגל</translation>
 <translation id="5126510351761255129">אימות הכרטיס</translation>
 <translation id="512670116361803001">ייתכן ששינוי הגודל של <ph name="APP_NAME" /> לא יפעל כראוי. כדאי להשתמש בגדלים של חלונות בהגדרה קבועה מראש כדי למנוע בעיות באפליקציה.</translation>
diff --git a/components/strings/components_strings_ja.xtb b/components/strings/components_strings_ja.xtb
index 5e1a032..79395f6 100644
--- a/components/strings/components_strings_ja.xtb
+++ b/components/strings/components_strings_ja.xtb
@@ -1528,6 +1528,7 @@
 <translation id="5123063207673082822">週末</translation>
 <translation id="5123433949759960244">バスケットボール</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">URL が無効です。</translation>
 <translation id="512592033764059484">サッカー</translation>
 <translation id="5126510351761255129">カードの確認</translation>
 <translation id="512670116361803001"><ph name="APP_NAME" /> は適切にサイズ変更されない可能性があります。アプリに問題が生じないようにするには、プリセットのウィンドウ サイズを使用してください。</translation>
diff --git a/components/strings/components_strings_ka.xtb b/components/strings/components_strings_ka.xtb
index d3c3861..63e8421 100644
--- a/components/strings/components_strings_ka.xtb
+++ b/components/strings/components_strings_ka.xtb
@@ -1528,6 +1528,7 @@
 <translation id="5123063207673082822">შაბათ-კვირა</translation>
 <translation id="5123433949759960244">კალათბურთის ბურთი</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">არასწორი URL.</translation>
 <translation id="512592033764059484">ფეხბურთი</translation>
 <translation id="5126510351761255129">დაადასტურეთ თქვენი ბარათი</translation>
 <translation id="512670116361803001"><ph name="APP_NAME" />, შესაძლოა, ზომას არასათანადოდ იცვლიდეს. გამოიყენეთ ფანჯრის წინასწარ დაყენებული ზომები, რათა თავიდან აიცილოთ აპთან დაკავშირებული პრობლემები.</translation>
diff --git a/components/strings/components_strings_kk.xtb b/components/strings/components_strings_kk.xtb
index 0b8d2b84..ae150c2 100644
--- a/components/strings/components_strings_kk.xtb
+++ b/components/strings/components_strings_kk.xtb
@@ -1526,6 +1526,7 @@
 <translation id="5123063207673082822">Демалыс күндері</translation>
 <translation id="5123433949759960244">Баскетбол</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">Жарамсыз URL.</translation>
 <translation id="512592033764059484">Футбол</translation>
 <translation id="5126510351761255129">Картаңызды растаңыз</translation>
 <translation id="512670116361803001"><ph name="APP_NAME" /> қолданбасының өлшемін өзгерту кезінде ол дұрыс жұмыс істемеуі мүмкін. Мұның алдын алу үшін әдепкі өлшемдерді пайдаланыңыз.</translation>
diff --git a/components/strings/components_strings_km.xtb b/components/strings/components_strings_km.xtb
index dae6435..5209dac9d9 100644
--- a/components/strings/components_strings_km.xtb
+++ b/components/strings/components_strings_km.xtb
@@ -1532,6 +1532,7 @@
 <translation id="5123063207673082822">ចុង​សប្ដាហ៍</translation>
 <translation id="5123433949759960244">​បាល់បោះ</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">URL គ្មានសុពលភាព។</translation>
 <translation id="512592033764059484">បាល់ទាត់</translation>
 <translation id="5126510351761255129">ផ្ទៀងផ្ទាត់កាតរបស់អ្នក</translation>
 <translation id="512670116361803001"><ph name="APP_NAME" /> ប្រហែលជាមិនអាចប្ដូរទំហំ​បានល្អទេ។ សូមប្រើ​ទំហំវិនដូ​ដែលបាន​កំណត់ជាមុន ដើម្បីទប់ស្កាត់​កុំឱ្យកម្មវិធីនេះមានបញ្ហា។</translation>
diff --git a/components/strings/components_strings_kn.xtb b/components/strings/components_strings_kn.xtb
index 5c77d9ed..d708d4db 100644
--- a/components/strings/components_strings_kn.xtb
+++ b/components/strings/components_strings_kn.xtb
@@ -1523,6 +1523,7 @@
 <translation id="5123063207673082822">ವಾರಾಂತ್ಯ</translation>
 <translation id="5123433949759960244">ಬ್ಯಾಸ್ಕೆಟ್‌ಬಾಲ್‌</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">ಅಮಾನ್ಯವಾದ URL.</translation>
 <translation id="512592033764059484">ಸಾಕರ್</translation>
 <translation id="5126510351761255129">ನಿಮ್ಮ ಕಾರ್ಡ್ ಅನ್ನು ಪರಿಶೀಲಿಸಿ</translation>
 <translation id="512670116361803001"><ph name="APP_NAME" /> ಅನ್ನು ಸರಿಯಾಗಿ ಮರುಗಾತ್ರಗೊಳಿಸಲು ಸಾಧ್ಯವಾಗದಿರಬಹುದು. ಆ್ಯಪ್ ಸಮಸ್ಯೆಗಳನ್ನು ಎದುರಿಸದಂತೆ ತಡೆಯಲು ಪೂರ್ವನಿಗದಿ ವಿಂಡೋ ಗಾತ್ರಗಳನ್ನು ಬಳಸಿ.</translation>
diff --git a/components/strings/components_strings_ko.xtb b/components/strings/components_strings_ko.xtb
index a6480097..8703d4a 100644
--- a/components/strings/components_strings_ko.xtb
+++ b/components/strings/components_strings_ko.xtb
@@ -1528,6 +1528,7 @@
 <translation id="5123063207673082822">주말</translation>
 <translation id="5123433949759960244">농구공</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">잘못된 URL입니다.</translation>
 <translation id="512592033764059484">축구</translation>
 <translation id="5126510351761255129">카드 인증</translation>
 <translation id="512670116361803001"><ph name="APP_NAME" />의 크기가 제대로 조절되지 않을 수도 있습니다. 앱에서 문제가 발생하지 않도록 미리 설정된 창 크기를 사용하세요.</translation>
diff --git a/components/strings/components_strings_ky.xtb b/components/strings/components_strings_ky.xtb
index fe72b42..cad4e48 100644
--- a/components/strings/components_strings_ky.xtb
+++ b/components/strings/components_strings_ky.xtb
@@ -1464,6 +1464,7 @@
 <translation id="4969341057194253438">Жаздырууну өчүрүү</translation>
 <translation id="4973922308112707173">Жогорку жагын эки жолу тешүү</translation>
 <translation id="4976702386844183910">Акыркы жолу кирген: <ph name="DATE" /></translation>
+<translation id="498323057460789381">Схеманы текшерүү катасы: <ph name="ERROR" /></translation>
 <translation id="4984088539114770594">Микрофон колдонулсунбу?</translation>
 <translation id="4984339528288761049">Prc5 (Конверт)</translation>
 <translation id="4989163558385430922">Баарын көрүү</translation>
@@ -1526,6 +1527,7 @@
 <translation id="5123063207673082822">Дем алыш</translation>
 <translation id="5123433949759960244">Баскетбол</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">Жараксыз URL.</translation>
 <translation id="512592033764059484">Футбол</translation>
 <translation id="5126510351761255129">Картаны ырастаңыз</translation>
 <translation id="512670116361803001"><ph name="APP_NAME" /> колдонмосунун өлчөмү жакшы өзгөрбөшү мүмкүн. Колдонмонун туура иштеши үчүн алдын ала коюлган өлчөмдөрдү колдонуңуз.</translation>
diff --git a/components/strings/components_strings_lo.xtb b/components/strings/components_strings_lo.xtb
index 1fcd760b..d93723aa 100644
--- a/components/strings/components_strings_lo.xtb
+++ b/components/strings/components_strings_lo.xtb
@@ -1528,6 +1528,7 @@
 <translation id="5123063207673082822">ທ້າຍອາທິດ</translation>
 <translation id="5123433949759960244">ບານບ້ວງ</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">URL ໃຊ້ບໍ່ໄດ້.</translation>
 <translation id="512592033764059484">ບານເຕະ</translation>
 <translation id="5126510351761255129">ຢືນຢັນບັດຂອງທ່ານ</translation>
 <translation id="512670116361803001"><ph name="APP_NAME" /> ອາດບໍ່ສາມາດປັບຂະໜາດໄດ້ດີ. ໃຊ້ຂະໜາດໜ້າຈໍທີ່ກຳນົດມາໃຫ້ແລ້ວເພື່ອປ້ອງກັນບໍ່ໃຫ້ແອັບປະສົບບັນຫາ.</translation>
diff --git a/components/strings/components_strings_lt.xtb b/components/strings/components_strings_lt.xtb
index e97f926..d8b04ed1 100644
--- a/components/strings/components_strings_lt.xtb
+++ b/components/strings/components_strings_lt.xtb
@@ -1529,6 +1529,7 @@
 <translation id="5123063207673082822">Savaitgalis</translation>
 <translation id="5123433949759960244">Krepšinis</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">Negaliojantis URL.</translation>
 <translation id="512592033764059484">Futbolas</translation>
 <translation id="5126510351761255129">Kortelės patvirtinimas</translation>
 <translation id="512670116361803001">Programos „<ph name="APP_NAME" />“ dydis gali būti pakeistas netinkamai. Naudokite iš anksto nustatytus lango dydžius, kad programoje nekiltų problemų.</translation>
diff --git a/components/strings/components_strings_lv.xtb b/components/strings/components_strings_lv.xtb
index 2c20574..341d029f 100644
--- a/components/strings/components_strings_lv.xtb
+++ b/components/strings/components_strings_lv.xtb
@@ -1527,6 +1527,7 @@
 <translation id="5123063207673082822">Nedēļas nogale</translation>
 <translation id="5123433949759960244">Basketbols</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">Nederīgs URL.</translation>
 <translation id="512592033764059484">Futbols</translation>
 <translation id="5126510351761255129">Kartes verificēšana</translation>
 <translation id="512670116361803001">Iespējams, nevarēs atbilstoši mainīt lietotnes <ph name="APP_NAME" /> lielumu. Lai lietotnē nerastos problēmas, izmantojiet iepriekš iestatītus logu lielumus.</translation>
diff --git a/components/strings/components_strings_mk.xtb b/components/strings/components_strings_mk.xtb
index 5ebff2e2..571f9e13 100644
--- a/components/strings/components_strings_mk.xtb
+++ b/components/strings/components_strings_mk.xtb
@@ -1528,6 +1528,7 @@
 <translation id="5123063207673082822">Викенд</translation>
 <translation id="5123433949759960244">Баскет</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">Неважечка URL-адреса.</translation>
 <translation id="512592033764059484">Фудбал</translation>
 <translation id="5126510351761255129">Потврдете ја картичката</translation>
 <translation id="512670116361803001"><ph name="APP_NAME" /> можеби нема добро да ја промени големината. Користете ги зададените големини за прозорците за да спречите проблеми со апликацијата.</translation>
diff --git a/components/strings/components_strings_ml.xtb b/components/strings/components_strings_ml.xtb
index bc7aa32..1b4d098 100644
--- a/components/strings/components_strings_ml.xtb
+++ b/components/strings/components_strings_ml.xtb
@@ -1527,6 +1527,7 @@
 <translation id="5123063207673082822">വാരാന്ത്യം</translation>
 <translation id="5123433949759960244">ബാസ്ക്കറ്റ്ബോൾ</translation>
 <translation id="5125394840236832993">B-പ്ലസ്</translation>
+<translation id="5125751979347152379">URL അസാധുവാണ്.</translation>
 <translation id="512592033764059484">ഫുട്ബോൾ</translation>
 <translation id="5126510351761255129">നിങ്ങളുടെ കാർഡ് പരിശോധിച്ചുറപ്പിക്കുക</translation>
 <translation id="512670116361803001"><ph name="APP_NAME" /> ഉദ്ദേശിക്കുന്ന രീതിയിൽ വലുപ്പം മാറ്റാൻ കഴിഞ്ഞേക്കില്ല. പ്രശ്‌നങ്ങൾ നേരിടുന്നതിൽ നിന്ന് ആപ്പിനെ തടയാൻ പ്രീസെറ്റ് വിൻഡോ വലുപ്പങ്ങൾ ഉപയോഗിക്കുക.</translation>
diff --git a/components/strings/components_strings_mn.xtb b/components/strings/components_strings_mn.xtb
index 813c8e1..67e61685 100644
--- a/components/strings/components_strings_mn.xtb
+++ b/components/strings/components_strings_mn.xtb
@@ -1529,6 +1529,7 @@
 <translation id="5123063207673082822">Амралтын өдөр</translation>
 <translation id="5123433949759960244">Сагсан бөмбөг</translation>
 <translation id="5125394840236832993">B-Нэмэх</translation>
+<translation id="5125751979347152379">Хүчингүй холбоос</translation>
 <translation id="512592033764059484">Хөл бөмбөг</translation>
 <translation id="5126510351761255129">Картаа баталгаажуулах</translation>
 <translation id="512670116361803001"><ph name="APP_NAME" />-н хэмжээ сайн өөрчлөгдөхгүй байж магадгүй. Аппыг асуудалтай тулгарахаас сэргийлэхийн тулд урьдчилан тохируулсан цонхны хэмжээг ашиглана уу.</translation>
diff --git a/components/strings/components_strings_mr.xtb b/components/strings/components_strings_mr.xtb
index bd254e8..1b8a6e9e 100644
--- a/components/strings/components_strings_mr.xtb
+++ b/components/strings/components_strings_mr.xtb
@@ -1464,6 +1464,7 @@
 <translation id="4969341057194253438">रेकॉर्डिंग हटवा</translation>
 <translation id="4973922308112707173">ड्युअल पंच टॉप</translation>
 <translation id="4976702386844183910"><ph name="DATE" /> रोजी शेवटची भेट दिली</translation>
+<translation id="498323057460789381">स्कीमा पडताळणी एरर: <ph name="ERROR" /></translation>
 <translation id="4984088539114770594">मायक्रोफोन वापरायचा का?</translation>
 <translation id="4984339528288761049">Prc5 (Envelope)</translation>
 <translation id="4989163558385430922">सर्व पहा</translation>
@@ -1526,6 +1527,7 @@
 <translation id="5123063207673082822">वीकेंड</translation>
 <translation id="5123433949759960244">बास्केटबॉल</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">चुकीची URL.</translation>
 <translation id="512592033764059484">सॉकर</translation>
 <translation id="5126510351761255129">तुमच्या कार्डाची पडताळणी करा</translation>
 <translation id="512670116361803001"><ph name="APP_NAME" /> योग्यप्रकारे आकार बदलू शकणार नाही. ॲपमध्ये समस्या येऊ नयेत यासाठी, प्रीसेट विंडोचे आकार वापरा.</translation>
diff --git a/components/strings/components_strings_ms.xtb b/components/strings/components_strings_ms.xtb
index 4defee23..6e93f6fe 100644
--- a/components/strings/components_strings_ms.xtb
+++ b/components/strings/components_strings_ms.xtb
@@ -1529,6 +1529,7 @@
 <translation id="5123063207673082822">Hujung minggu</translation>
 <translation id="5123433949759960244">Bola Keranjang</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">URL tidak sah.</translation>
 <translation id="512592033764059484">Bola sepak</translation>
 <translation id="5126510351761255129">Sahkan kad anda</translation>
 <translation id="512670116361803001"><ph name="APP_NAME" /> mungkin tidak dapat diubah saiz dengan betul. Gunakan saiz tetingkap pratetapan untuk mengelakkan apl daripada mengalami isu.</translation>
diff --git a/components/strings/components_strings_my.xtb b/components/strings/components_strings_my.xtb
index f1deec0e..ad4ea45 100644
--- a/components/strings/components_strings_my.xtb
+++ b/components/strings/components_strings_my.xtb
@@ -1529,6 +1529,7 @@
 <translation id="5123063207673082822">စနေ၊ တနင်္ဂနွေ</translation>
 <translation id="5123433949759960244">ဘတ်စကက်ဘော</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">URL မမှန်</translation>
 <translation id="512592033764059484">ဘောလုံး</translation>
 <translation id="5126510351761255129">သင့်ကတ်ကို အတည်ပြုပါ</translation>
 <translation id="512670116361803001"><ph name="APP_NAME" /> ကို ကောင်းစွာ အရွယ်အစားပြန်ပြင်နိုင်မည် မဟုတ်ပါ။ အက်ပ်တွင် ပြဿနာများ မဖြစ်စေရန် အသင့်သုံးဝင်းဒိုး အရွယ်အစားများကို သုံးပါ။</translation>
@@ -2258,6 +2259,7 @@
 <translation id="7238585580608191973">SHA-256 လက်ဗွေ</translation>
 <translation id="7240120331469437312">လက်မှတ် အကြောင်းအရာ အစားထိုးရေး အမည်</translation>
 <translation id="7243010569062352439"><ph name="PASSWORDS" />၊ <ph name="SIGNIN_DATA" /></translation>
+<translation id="7244465398154211886">{NUM_MATCHES,plural, =1{ကိုက်ညီမှု # ခု}other{ကိုက်ညီမှု # ခု}}</translation>
 <translation id="724691107663265825">ရှေ့မှာ ရှိနေသည့် ဆိုက်သည် အန္တရာယ်ဝဲ ပါရှိသည်</translation>
 <translation id="724975217298816891">သင့်ကဒ်၏ အသေးစိတ်အချက်အလက်များကို အပ်ဒိတ်လုပ်ရန် <ph name="CREDIT_CARD" /> ကုန်ဆုံးရက်နှင့် CVC ကို ထည့်ပါ။ အတည်ပြုပြီးသည်နှင့် သင့်ကဒ်၏အသေးစိတ်အချက်အလက်များကို ဤဆိုက်အား မျှဝေသွားပါမည်။</translation>
 <translation id="7251437084390964440">ကွန်ရက်စီစဉ်သတ်မှတ်မှုသည် ONC စံနှုန်းနှင့် မညီညွတ်ပါ။ စီစဉ်သတ်မှတ်မှု၏ တစ်စိတ်တစ်ပိုင်းကို ထည့်သွင်းထားခြင်း မရှိပါ။
diff --git a/components/strings/components_strings_ne.xtb b/components/strings/components_strings_ne.xtb
index e2e70dc3..67e98ce4 100644
--- a/components/strings/components_strings_ne.xtb
+++ b/components/strings/components_strings_ne.xtb
@@ -1525,6 +1525,7 @@
 <translation id="5123063207673082822">सप्ताहान्त</translation>
 <translation id="5123433949759960244">बास्केटबल</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">अवैध URL।</translation>
 <translation id="512592033764059484">फुटबल</translation>
 <translation id="5126510351761255129">आफ्नो कार्ड पुष्टि गर्नुहोस्</translation>
 <translation id="512670116361803001"><ph name="APP_NAME" /> को आकार सही तरिकाले परिवर्तन नहुन सक्छ। एपमा कुनै समस्या नआओस् भन्नाका लागि विन्डोको पूर्वनिर्धारित आकार प्रयोग गर्नुहोस्।</translation>
diff --git a/components/strings/components_strings_nl.xtb b/components/strings/components_strings_nl.xtb
index 9d4a10e..f6f55ca1 100644
--- a/components/strings/components_strings_nl.xtb
+++ b/components/strings/components_strings_nl.xtb
@@ -1523,6 +1523,7 @@
 <translation id="5123063207673082822">Weekend</translation>
 <translation id="5123433949759960244">Basketbal</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">Ongeldige URL.</translation>
 <translation id="512592033764059484">Voetbal</translation>
 <translation id="5126510351761255129">Je kaart verifiëren</translation>
 <translation id="512670116361803001">Het formaat van <ph name="APP_NAME" /> wordt misschien niet goed aangepast. Gebruik vooraf ingestelde vensterformaten om te zorgen dat de app geen problemen ondervindt.</translation>
diff --git a/components/strings/components_strings_no.xtb b/components/strings/components_strings_no.xtb
index af9747d..62d2684 100644
--- a/components/strings/components_strings_no.xtb
+++ b/components/strings/components_strings_no.xtb
@@ -1528,6 +1528,7 @@
 <translation id="5123063207673082822">Helg</translation>
 <translation id="5123433949759960244">Basketball</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">Ugyldig nettadresse.</translation>
 <translation id="512592033764059484">Fotball</translation>
 <translation id="5126510351761255129">Bekreft kortet ditt</translation>
 <translation id="512670116361803001">Det fungerer kanskje ikke så bra å endre størrelse på <ph name="APP_NAME" />. Bruk forhåndsinnstilte vindusstørrelser for å unngå at appen støter på problemer.</translation>
@@ -2729,6 +2730,7 @@
 <translation id="8508648098325802031">Søkeikon</translation>
 <translation id="8511402995811232419">Administrer informasjonskapsler</translation>
 <translation id="851353418319061866">Nøyaktighetssjekk</translation>
+<translation id="8513580896341796021">Nedlastingen er startet. For å se den, trykk på |<ph name="ACCELERATOR" />|.</translation>
 <translation id="8519753333133776369">HID-enheten tillates av administratoren din</translation>
 <translation id="8522552481199248698">Chrome kan hjelpe deg med å beskytte Google-kontoen din og endre passordet ditt.</translation>
 <translation id="8530813470445476232">Tøm nettleserloggen, slett informasjonskapsler, tøm bufferen med mer i Chrome-innstillingene</translation>
diff --git a/components/strings/components_strings_or.xtb b/components/strings/components_strings_or.xtb
index 5dfa203..a4c62f2 100644
--- a/components/strings/components_strings_or.xtb
+++ b/components/strings/components_strings_or.xtb
@@ -1525,6 +1525,7 @@
 <translation id="5123063207673082822">ସପ୍ତାହର ଶେଷ ଦିନ</translation>
 <translation id="5123433949759960244">ବାସ୍କେଟବଲ୍</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">ଅବୈଧ URL।</translation>
 <translation id="512592033764059484">ସକର</translation>
 <translation id="5126510351761255129">ଆପଣଙ୍କର କାର୍ଡ ଯାଞ୍ଚ କରନ୍ତୁ</translation>
 <translation id="512670116361803001"><ph name="APP_NAME" /> ଭଲ ଭାବରେ ରିସାଇଜ୍ ହୋଇନପାରେ। ଆପରେ ହୋଇଥିବା ସମସ୍ୟାକୁ ପ୍ରତିରୋଧ କରିବା ପାଇଁ ୱିଣ୍ଡୋର ପ୍ରିସେଟ୍ ଆକାରଗୁଡ଼ିକୁ ବ୍ୟବହାର କରନ୍ତୁ।</translation>
diff --git a/components/strings/components_strings_pa.xtb b/components/strings/components_strings_pa.xtb
index e49e8b27..c3080f6 100644
--- a/components/strings/components_strings_pa.xtb
+++ b/components/strings/components_strings_pa.xtb
@@ -1525,6 +1525,7 @@
 <translation id="5123063207673082822">ਵੀਕੈਂਡ</translation>
 <translation id="5123433949759960244">ਬਾਸਕਟਬਾਲ</translation>
 <translation id="5125394840236832993">B-ਪਲੱਸ</translation>
+<translation id="5125751979347152379">ਅਵੈਧ URL.</translation>
 <translation id="512592033764059484">ਫੁੱਟਬਾਲ</translation>
 <translation id="5126510351761255129">ਆਪਣੇ ਕਾਰਡ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ</translation>
 <translation id="512670116361803001">ਹੋ ਸਕਦਾ ਹੈ ਕਿ <ph name="APP_NAME" /> ਦਾ ਆਕਾਰ ਸਹੀ ਤਰੀਕੇ ਨਾਲ ਨਾ ਬਦਲੇ। ਐਪਾਂ ਵਿਚ ਸਮੱਸਿਆਵਾਂ ਆਉਣ ਤੋਂ ਰੋਕਣ ਲਈ ਵਿੰਡੋ ਦੇ ਪ੍ਰੀਸੈੱਟ ਆਕਾਰਾਂ ਨੂੰ ਵਰਤੋ।</translation>
diff --git a/components/strings/components_strings_pl.xtb b/components/strings/components_strings_pl.xtb
index 4bf937d..72a0b548 100644
--- a/components/strings/components_strings_pl.xtb
+++ b/components/strings/components_strings_pl.xtb
@@ -1528,6 +1528,7 @@
 <translation id="5123063207673082822">Weekend</translation>
 <translation id="5123433949759960244">Piłka do koszykówki</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">Nieprawidłowy adres URL.</translation>
 <translation id="512592033764059484">Piłka nożna</translation>
 <translation id="5126510351761255129">Zweryfikuj kartę</translation>
 <translation id="512670116361803001">Zmiana rozmiaru aplikacji <ph name="APP_NAME" /> może powodować problemy. Aby uniknąć jej nieprawidłowego działania, użyj gotowych rozmiarów okna.</translation>
@@ -2258,6 +2259,7 @@
 <translation id="7238585580608191973">Odcisk cyfrowy SHA-256</translation>
 <translation id="7240120331469437312">Alternatywna nazwa podmiotu certyfikatu</translation>
 <translation id="7243010569062352439"><ph name="PASSWORDS" />; <ph name="SIGNIN_DATA" /></translation>
+<translation id="7244465398154211886">{NUM_MATCHES,plural, =1{# dopasowanie}few{# dopasowania}many{# dopasowań}other{# dopasowania}}</translation>
 <translation id="724691107663265825">Strona, którą chcesz otworzyć, zawiera złośliwe oprogramowanie</translation>
 <translation id="724975217298816891">Wpisz datę ważności i kod CVC karty <ph name="CREDIT_CARD" />, by zaktualizować jej szczegółowe dane. Po potwierdzeniu zostaną one udostępnione tej stronie.</translation>
 <translation id="7251437084390964440">Konfiguracja sieci jest niezgodna ze standardem ONC. Jej część mogła nie zostać zaimportowana.
diff --git a/components/strings/components_strings_pt-BR.xtb b/components/strings/components_strings_pt-BR.xtb
index 73ae865..f891b63 100644
--- a/components/strings/components_strings_pt-BR.xtb
+++ b/components/strings/components_strings_pt-BR.xtb
@@ -1465,6 +1465,7 @@
 <translation id="4969341057194253438">Excluir gravação</translation>
 <translation id="4973922308112707173">Perfuração dupla na parte superior</translation>
 <translation id="4976702386844183910">Última visita: <ph name="DATE" /></translation>
+<translation id="498323057460789381">Erro de validação de esquema: <ph name="ERROR" /></translation>
 <translation id="4984088539114770594">Usar o microfone?</translation>
 <translation id="4984339528288761049">Prc5 (Envelope)</translation>
 <translation id="4989163558385430922">Ver tudo</translation>
@@ -1527,6 +1528,7 @@
 <translation id="5123063207673082822">Final de semana</translation>
 <translation id="5123433949759960244">Basquete</translation>
 <translation id="5125394840236832993">B Plus</translation>
+<translation id="5125751979347152379">URL inválido.</translation>
 <translation id="512592033764059484">Futebol</translation>
 <translation id="5126510351761255129">Verificar seu cartão</translation>
 <translation id="512670116361803001">O <ph name="APP_NAME" /> pode não ser redimensionado corretamente. Use os tamanhos de janela predefinidos para evitar problemas.</translation>
@@ -2257,6 +2259,7 @@
 <translation id="7238585580608191973">Assinatura digital SHA-256</translation>
 <translation id="7240120331469437312">Nome alternativo do requerente do certificado</translation>
 <translation id="7243010569062352439"><ph name="PASSWORDS" />, <ph name="SIGNIN_DATA" /></translation>
+<translation id="7244465398154211886">{NUM_MATCHES,plural, =1{# correspondência}one{# correspondência}other{# correspondências}}</translation>
 <translation id="724691107663265825">O site a seguir contém malware</translation>
 <translation id="724975217298816891">Digite a data de validade e o CVC do <ph name="CREDIT_CARD" /> para atualizar os detalhes do cartão. Depois da confirmação, os detalhes do cartão serão compartilhados com esse site.</translation>
 <translation id="7251437084390964440">A configuração de rede não está de acordo com o padrão ONC. É possível que partes da configuração não sejam importadas.
diff --git a/components/strings/components_strings_pt-PT.xtb b/components/strings/components_strings_pt-PT.xtb
index e313c1f3..89bac06 100644
--- a/components/strings/components_strings_pt-PT.xtb
+++ b/components/strings/components_strings_pt-PT.xtb
@@ -1528,6 +1528,7 @@
 <translation id="5123063207673082822">Fim de semana</translation>
 <translation id="5123433949759960244">Bola de basquetebol</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">URL inválido.</translation>
 <translation id="512592033764059484">Futebol</translation>
 <translation id="5126510351761255129">Valide o cartão</translation>
 <translation id="512670116361803001">A app <ph name="APP_NAME" /> pode não ser redimensionada corretamente. Utilize os tamanhos da janela predefinidos para impedir que a app tenha problemas.</translation>
diff --git a/components/strings/components_strings_ro.xtb b/components/strings/components_strings_ro.xtb
index 557031e..5659b0ee 100644
--- a/components/strings/components_strings_ro.xtb
+++ b/components/strings/components_strings_ro.xtb
@@ -1528,6 +1528,7 @@
 <translation id="5123063207673082822">Weekend</translation>
 <translation id="5123433949759960244">Baschet</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">Adresă URL nevalidă.</translation>
 <translation id="512592033764059484">Fotbal</translation>
 <translation id="5126510351761255129">Confirmă cardul</translation>
 <translation id="512670116361803001"><ph name="APP_NAME" /> poate să nu fie redimensionată corect. Folosește dimensiunile de fereastră presetate pentru a evita eventualele erori ale aplicației.</translation>
diff --git a/components/strings/components_strings_ru.xtb b/components/strings/components_strings_ru.xtb
index c51fddc..18475c99 100644
--- a/components/strings/components_strings_ru.xtb
+++ b/components/strings/components_strings_ru.xtb
@@ -1527,6 +1527,7 @@
 <translation id="5123063207673082822">До выходных</translation>
 <translation id="5123433949759960244">Баскетбол</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">Недопустимый URL.</translation>
 <translation id="512592033764059484">Футбол</translation>
 <translation id="5126510351761255129">Подтвердите данные карты</translation>
 <translation id="512670116361803001">Если размер приложения "<ph name="APP_NAME" />" изменить, оно может работать некорректно. Чтобы избежать проблем, используйте стандартные размеры.</translation>
diff --git a/components/strings/components_strings_si.xtb b/components/strings/components_strings_si.xtb
index bbf3eb2..a373019ca 100644
--- a/components/strings/components_strings_si.xtb
+++ b/components/strings/components_strings_si.xtb
@@ -1527,6 +1527,7 @@
 <translation id="5123063207673082822">සති අන්තය</translation>
 <translation id="5123433949759960244">පැසිපන්දු</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">අවලංගු URL.</translation>
 <translation id="512592033764059484">පාපන්දු</translation>
 <translation id="5126510351761255129">ඔබේ කාඩ්පත සත්‍යාපනය</translation>
 <translation id="512670116361803001"><ph name="APP_NAME" /> ප්‍රතිප්‍රමාණ නොවීමටද හැකිය. යෙදුම ගැටලු අත්විඳීම වැළැක්වීමට පෙර සැකසූ කවුළු තරම භාවිත කරන්න.</translation>
diff --git a/components/strings/components_strings_sk.xtb b/components/strings/components_strings_sk.xtb
index e216c4f..81cc11a5 100644
--- a/components/strings/components_strings_sk.xtb
+++ b/components/strings/components_strings_sk.xtb
@@ -1524,6 +1524,7 @@
 <translation id="5123063207673082822">Víkend</translation>
 <translation id="5123433949759960244">Basketbal</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">Neplatná webová adresa.</translation>
 <translation id="512592033764059484">Futbal</translation>
 <translation id="5126510351761255129">Overenie karty</translation>
 <translation id="512670116361803001">Veľkosť aplikácie <ph name="APP_NAME" /> sa nemusí náležite zmeniť. Ak chcete predísť problémom v aplikácii, použite predvolené veľkosti okna.</translation>
diff --git a/components/strings/components_strings_sl.xtb b/components/strings/components_strings_sl.xtb
index 9e24617e..59eeef6 100644
--- a/components/strings/components_strings_sl.xtb
+++ b/components/strings/components_strings_sl.xtb
@@ -1528,6 +1528,7 @@
 <translation id="5123063207673082822">Konec tedna</translation>
 <translation id="5123433949759960244">Košarkarska žoga</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">Neveljaven spletni naslov.</translation>
 <translation id="512592033764059484">Nogomet</translation>
 <translation id="5126510351761255129">Preverjanje kartice</translation>
 <translation id="512670116361803001">Aplikaciji <ph name="APP_NAME" /> morda ne bo mogoče primerno spremeniti velikosti. Uporabite prednastavljene velikosti okna, če želite preprečiti težave z aplikacijo.</translation>
diff --git a/components/strings/components_strings_sq.xtb b/components/strings/components_strings_sq.xtb
index 7b8a5643..43e767a 100644
--- a/components/strings/components_strings_sq.xtb
+++ b/components/strings/components_strings_sq.xtb
@@ -1528,6 +1528,7 @@
 <translation id="5123063207673082822">Fundjavë</translation>
 <translation id="5123433949759960244">Basketboll</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">URL e pavlefshme.</translation>
 <translation id="512592033764059484">Futbolli</translation>
 <translation id="5126510351761255129">Verifiko kartën tënde</translation>
 <translation id="512670116361803001">Përmasat e <ph name="APP_NAME" /> mund të mos ndryshohen si duhet. Përdor madhësitë e paravendosura të dritares për të parandaluar problemet e aplikacionit.</translation>
diff --git a/components/strings/components_strings_sr-Latn.xtb b/components/strings/components_strings_sr-Latn.xtb
index d22eb27..180143eb 100644
--- a/components/strings/components_strings_sr-Latn.xtb
+++ b/components/strings/components_strings_sr-Latn.xtb
@@ -1528,6 +1528,7 @@
 <translation id="5123063207673082822">Vikend</translation>
 <translation id="5123433949759960244">Košarkaška lopta</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">Nevažeća URL adresa.</translation>
 <translation id="512592033764059484">Fudbal</translation>
 <translation id="5126510351761255129">Verifikujte karticu</translation>
 <translation id="512670116361803001"><ph name="APP_NAME" /> možda neće promeniti veličinu na pravilan način. Koristite unapred određene veličine prozora da biste sprečili da aplikacija ima probleme.</translation>
diff --git a/components/strings/components_strings_sr.xtb b/components/strings/components_strings_sr.xtb
index c5b1f033..d26ee65 100644
--- a/components/strings/components_strings_sr.xtb
+++ b/components/strings/components_strings_sr.xtb
@@ -1528,6 +1528,7 @@
 <translation id="5123063207673082822">Викенд</translation>
 <translation id="5123433949759960244">Кошаркашка лопта</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">Неважећа URL адреса.</translation>
 <translation id="512592033764059484">Фудбал</translation>
 <translation id="5126510351761255129">Верификујте картицу</translation>
 <translation id="512670116361803001"><ph name="APP_NAME" /> можда неће променити величину на правилан начин. Користите унапред одређене величине прозора да бисте спречили да апликација има проблеме.</translation>
diff --git a/components/strings/components_strings_sv.xtb b/components/strings/components_strings_sv.xtb
index da45f6c..e9d5ea99 100644
--- a/components/strings/components_strings_sv.xtb
+++ b/components/strings/components_strings_sv.xtb
@@ -1528,6 +1528,7 @@
 <translation id="5123063207673082822">helgen</translation>
 <translation id="5123433949759960244">Basketboll</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">Ogiltig webbadress.</translation>
 <translation id="512592033764059484">Fotboll</translation>
 <translation id="5126510351761255129">Verifiera kortet</translation>
 <translation id="512670116361803001"><ph name="APP_NAME" /> kan påverkas om storleken ändras. Använd förinställda fönsterstorlekar för att appen ska fungera som avsett.</translation>
diff --git a/components/strings/components_strings_sw.xtb b/components/strings/components_strings_sw.xtb
index f26fb7e..7c1dcfe 100644
--- a/components/strings/components_strings_sw.xtb
+++ b/components/strings/components_strings_sw.xtb
@@ -1528,6 +1528,7 @@
 <translation id="5123063207673082822">Wikendi</translation>
 <translation id="5123433949759960244">Mpira wa kikapu</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">URL hiyo si sahihi.</translation>
 <translation id="512592033764059484">Soka</translation>
 <translation id="5126510351761255129">Thibitisha kadi yako</translation>
 <translation id="512670116361803001">Huenda ukubwa wa <ph name="APP_NAME" /> usibadilike vizuri. Tumia ukubwa wa madirisha uliowekwa mapema ili uzuie programu isikumbwe na matatizo.</translation>
diff --git a/components/strings/components_strings_ta.xtb b/components/strings/components_strings_ta.xtb
index a14f7f3..18c324e 100644
--- a/components/strings/components_strings_ta.xtb
+++ b/components/strings/components_strings_ta.xtb
@@ -1523,6 +1523,7 @@
 <translation id="5123063207673082822">வாரயிறுதி</translation>
 <translation id="5123433949759960244">கூடைப்பந்து</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">செல்லுபடியாகாத URL.</translation>
 <translation id="512592033764059484">கால்பந்து</translation>
 <translation id="5126510351761255129">உங்கள் கார்டு விவரங்களைச் சரிபார்த்தல்</translation>
 <translation id="512670116361803001"><ph name="APP_NAME" /> அளவைச் சரியாக மாற்ற முடியாமல் போகலாம். ஆப்ஸில் சிக்கல்கள் ஏற்படுவதைத் தடுக்க, ஏற்கெனவே அமைத்த சாளர அளவுகளைப் பயன்படுத்தவும்.</translation>
diff --git a/components/strings/components_strings_te.xtb b/components/strings/components_strings_te.xtb
index 4624473..cb98aa4 100644
--- a/components/strings/components_strings_te.xtb
+++ b/components/strings/components_strings_te.xtb
@@ -1530,6 +1530,7 @@
 <translation id="5123063207673082822">వారాంతం</translation>
 <translation id="5123433949759960244">బాస్కెట్‌బాల్</translation>
 <translation id="5125394840236832993">B-ప్లస్</translation>
+<translation id="5125751979347152379">చెల్లని URL.</translation>
 <translation id="512592033764059484">సాకర్</translation>
 <translation id="5126510351761255129">మీ కార్డ్‌ను ధృవీకరించండి</translation>
 <translation id="512670116361803001"><ph name="APP_NAME" /> పరిమాణాన్ని మార్చడం సాధ్యం కాకపోవచ్చు. యాప్‌లో సమస్యలు ఎదురుకాకుండా నివారించడానికి, ప్రీసెట్ చేసిన విండో పరిమాణాలను ఉపయోగించండి.</translation>
@@ -2731,6 +2732,7 @@
 <translation id="8508648098325802031">శోధన చిహ్నం</translation>
 <translation id="8511402995811232419">కుక్కీలను మేనేజ్ చేయండి</translation>
 <translation id="851353418319061866">ఖచ్చితత్వ తనిఖీ</translation>
+<translation id="8513580896341796021">డౌన్‌లోడ్ ప్రారంభించబడింది. దీన్ని చూడటానికి, |<ph name="ACCELERATOR" />|‌ను నొక్కండి.</translation>
 <translation id="8519753333133776369">మీ అడ్మినిస్ట్రేటర్ అనుమతించిన HID పరికరం</translation>
 <translation id="8522552481199248698">మీ Google ఖాతాను సంరక్షించుకోవడంలో, మీ పాస్‌వర్డ్‌ను మార్చడంలో Chrome మీకు సహాయపడగలదు.</translation>
 <translation id="8530813470445476232">Chrome సెట్టింగ్‌లలో మీ బ్రౌజింగ్ హిస్టరీ, కుక్కీలు, కాష్ ఇంకా మరిన్నింటిని క్లియర్ చేయండి</translation>
diff --git a/components/strings/components_strings_th.xtb b/components/strings/components_strings_th.xtb
index fa61c1db..05e4d24 100644
--- a/components/strings/components_strings_th.xtb
+++ b/components/strings/components_strings_th.xtb
@@ -1527,6 +1527,7 @@
 <translation id="5123063207673082822">วันสุดสัปดาห์</translation>
 <translation id="5123433949759960244">บาสเกตบอล</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">URL ไม่ถูกต้อง</translation>
 <translation id="512592033764059484">ฟุตบอล</translation>
 <translation id="5126510351761255129">ยืนยันบัตร</translation>
 <translation id="512670116361803001"><ph name="APP_NAME" /> อาจไม่เหมาะกับการปรับขนาด ใช้ขนาดหน้าต่างที่กำหนดล่วงหน้าเพื่อป้องกันไม่ให้แอปเกิดปัญหา</translation>
diff --git a/components/strings/components_strings_tr.xtb b/components/strings/components_strings_tr.xtb
index 65a1780..6898f2d 100644
--- a/components/strings/components_strings_tr.xtb
+++ b/components/strings/components_strings_tr.xtb
@@ -1527,6 +1527,7 @@
 <translation id="5123063207673082822">Hafta sonu</translation>
 <translation id="5123433949759960244">Basketbol</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">Geçersiz URL.</translation>
 <translation id="512592033764059484">Futbol</translation>
 <translation id="5126510351761255129">Kartınızı doğrulayın</translation>
 <translation id="512670116361803001"><ph name="APP_NAME" /> uygulaması düzgün bir şekilde yeniden boyutlandırılamayabilir. Uygulamanın sorun çıkarmasını önlemek için hazır ayar pencere boyutlarını kullanın.</translation>
diff --git a/components/strings/components_strings_uk.xtb b/components/strings/components_strings_uk.xtb
index 47e689d..a81983d 100644
--- a/components/strings/components_strings_uk.xtb
+++ b/components/strings/components_strings_uk.xtb
@@ -1528,6 +1528,7 @@
 <translation id="5123063207673082822">Вихідні</translation>
 <translation id="5123433949759960244">Баскетбол</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">Недійсна URL-адреса.</translation>
 <translation id="512592033764059484">Футбол</translation>
 <translation id="5126510351761255129">Підтвердьте дані картки</translation>
 <translation id="512670116361803001">Зміна розмірів додатка <ph name="APP_NAME" /> може відбуватися некоректно. Щоб додаток працював правильно, використовуйте один зі стандартних розмірів вікна.</translation>
diff --git a/components/strings/components_strings_ur.xtb b/components/strings/components_strings_ur.xtb
index 68c7abb..435420b 100644
--- a/components/strings/components_strings_ur.xtb
+++ b/components/strings/components_strings_ur.xtb
@@ -1529,6 +1529,7 @@
 <translation id="5123063207673082822">ویک اینڈ</translation>
 <translation id="5123433949759960244">باسکٹ بال</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">‏غلط URL۔</translation>
 <translation id="512592033764059484">فٹبال</translation>
 <translation id="5126510351761255129">اپنے کارڈ کی توثیق کریں</translation>
 <translation id="512670116361803001">ہو سکتا ہے کہ <ph name="APP_NAME" /> کا سائز صحیح طریقے سے تبدیل نہ ہو۔ ایپ کو مسائل کا سامنا کرنے سے روکنے کیلئے ونڈو کے پری سیٹ سائز کا استعمال کریں۔</translation>
diff --git a/components/strings/components_strings_uz.xtb b/components/strings/components_strings_uz.xtb
index 6f1413a..c05a496 100644
--- a/components/strings/components_strings_uz.xtb
+++ b/components/strings/components_strings_uz.xtb
@@ -1523,6 +1523,7 @@
 <translation id="5123063207673082822">Dam olish kunlari</translation>
 <translation id="5123433949759960244">Basketbol</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">Yaroqsiz URL manzil.</translation>
 <translation id="512592033764059484">Futbol</translation>
 <translation id="5126510351761255129">Kartangizni tasdiqlang</translation>
 <translation id="512670116361803001"><ph name="APP_NAME" /> oʻlchami xato oʻzgarishi mumkin. Ilova bexato ishlashi uchun oyna oʻlchami andozalaridan foydalaning.</translation>
diff --git a/components/strings/components_strings_vi.xtb b/components/strings/components_strings_vi.xtb
index 1760ae3a..3b3435c 100644
--- a/components/strings/components_strings_vi.xtb
+++ b/components/strings/components_strings_vi.xtb
@@ -1528,6 +1528,7 @@
 <translation id="5123063207673082822">Cuối tuần</translation>
 <translation id="5123433949759960244">Bóng rổ</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">URL không hợp lệ.</translation>
 <translation id="512592033764059484">Bóng đá</translation>
 <translation id="5126510351761255129">Xác minh thẻ của bạn</translation>
 <translation id="512670116361803001">Có thể <ph name="APP_NAME" /> sẽ thay đổi kích thước không chuẩn xác. Hãy dùng kích thước cửa sổ đặt trước để ngăn ứng dụng gặp sự cố.</translation>
diff --git a/components/strings/components_strings_zh-CN.xtb b/components/strings/components_strings_zh-CN.xtb
index 344254b..cda5184 100644
--- a/components/strings/components_strings_zh-CN.xtb
+++ b/components/strings/components_strings_zh-CN.xtb
@@ -1461,6 +1461,7 @@
 <translation id="4969341057194253438">删除录屏</translation>
 <translation id="4973922308112707173">双孔(顶部)</translation>
 <translation id="4976702386844183910">上次访问日期:<ph name="DATE" /></translation>
+<translation id="498323057460789381">架构验证错误:<ph name="ERROR" /></translation>
 <translation id="4984088539114770594">使用麦克风?</translation>
 <translation id="4984339528288761049">Prc5 (Envelope)</translation>
 <translation id="4989163558385430922">查看全部</translation>
@@ -1523,6 +1524,7 @@
 <translation id="5123063207673082822">周末</translation>
 <translation id="5123433949759960244">篮球</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">网址无效。</translation>
 <translation id="512592033764059484">足球</translation>
 <translation id="5126510351761255129">验证您的银行卡</translation>
 <translation id="512670116361803001">“<ph name="APP_NAME" />”可能无法妥当地调整大小。请使用预设窗口大小,以防止该应用出现问题。</translation>
diff --git a/components/strings/components_strings_zh-HK.xtb b/components/strings/components_strings_zh-HK.xtb
index a8ea8d9..cdbb999 100644
--- a/components/strings/components_strings_zh-HK.xtb
+++ b/components/strings/components_strings_zh-HK.xtb
@@ -1527,6 +1527,7 @@
 <translation id="5123063207673082822">週末</translation>
 <translation id="5123433949759960244">籃球</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">網址無效。</translation>
 <translation id="512592033764059484">足球</translation>
 <translation id="5126510351761255129">驗證信用卡</translation>
 <translation id="512670116361803001">「<ph name="APP_NAME" />」可能無法正常調整大小。請使用預設視窗大小,以免應用程式發生問題。</translation>
diff --git a/components/strings/components_strings_zh-TW.xtb b/components/strings/components_strings_zh-TW.xtb
index 9332af6..57c88c39 100644
--- a/components/strings/components_strings_zh-TW.xtb
+++ b/components/strings/components_strings_zh-TW.xtb
@@ -1528,6 +1528,7 @@
 <translation id="5123063207673082822">週末</translation>
 <translation id="5123433949759960244">籃球</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">網址無效。</translation>
 <translation id="512592033764059484">足球</translation>
 <translation id="5126510351761255129">請驗證卡片</translation>
 <translation id="512670116361803001">「<ph name="APP_NAME" />」的大小可能未妥善調整。請採用預設的視窗大小,以免應用程式發生問題。</translation>
diff --git a/components/strings/components_strings_zu.xtb b/components/strings/components_strings_zu.xtb
index b133e297..e60b3f4 100644
--- a/components/strings/components_strings_zu.xtb
+++ b/components/strings/components_strings_zu.xtb
@@ -1525,6 +1525,7 @@
 <translation id="5123063207673082822">Impelasonto</translation>
 <translation id="5123433949759960244">I-Basketball</translation>
 <translation id="5125394840236832993">B-Plus</translation>
+<translation id="5125751979347152379">I-URL engavumelekile</translation>
 <translation id="512592033764059484">Ibhola lezinyawo</translation>
 <translation id="5126510351761255129">Qinisekisa ikhadi lakho</translation>
 <translation id="512670116361803001">I-<ph name="APP_NAME" /> ingahle ingashintshi kahle usayizi. Sebenzisa osayizi bewindi abasethwe ngaphambilini ukugwema ukuthi i-app ibhekane nezinkinga.</translation>
diff --git a/components/stylus_handwriting/android/BUILD.gn b/components/stylus_handwriting/android/BUILD.gn
index d2a8a2e3..4635b6b 100644
--- a/components/stylus_handwriting/android/BUILD.gn
+++ b/components/stylus_handwriting/android/BUILD.gn
@@ -17,8 +17,11 @@
   deps = [
     "//base:base_java",
     "//content/public/android:content_full_java",
+    "//mojo/public/mojom/base:base_java",
     "//third_party/androidx:androidx_annotation_annotation_java",
+    "//third_party/blink/public/mojom:mojom_platform_java",
     "//ui/android:ui_no_recycler_view_java",
+    "//ui/gfx/geometry/mojom:mojom_java",
   ]
   srcjar_deps = [ ":direct_writing_service_aidl" ]
   sources = [
diff --git a/components/stylus_handwriting/android/java/src/org/chromium/components/stylus_handwriting/DirectWritingServiceCallback.java b/components/stylus_handwriting/android/java/src/org/chromium/components/stylus_handwriting/DirectWritingServiceCallback.java
index b14c3c6..d9483ec 100644
--- a/components/stylus_handwriting/android/java/src/org/chromium/components/stylus_handwriting/DirectWritingServiceCallback.java
+++ b/components/stylus_handwriting/android/java/src/org/chromium/components/stylus_handwriting/DirectWritingServiceCallback.java
@@ -11,13 +11,18 @@
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
+import android.text.TextUtils;
 import android.view.View;
 import android.view.inputmethod.EditorInfo;
 import android.view.inputmethod.InputMethodManager;
 
 import androidx.annotation.BinderThread;
 
+import org.chromium.base.Log;
+import org.chromium.blink.mojom.StylusWritingGestureAction;
+import org.chromium.blink.mojom.StylusWritingGestureData;
 import org.chromium.content_public.browser.StylusWritingImeCallback;
+import org.chromium.mojo_base.mojom.String16;
 
 /**
  * This class implements the Direct Writing service callback interface that gets registered to the
@@ -28,6 +33,27 @@
 class DirectWritingServiceCallback
         extends android.widget.directwriting.IDirectWritingServiceCallback.Stub {
     public static final String BUNDLE_KEY_SHOW_KEYBOARD = "showKeyboard";
+    private static final String TAG = "DWCallbackImpl";
+
+    // The following GESTURE_ and ACTION_ constants are defined as per the bundle data sent by the
+    // Direct Writing service when any gesture is recognized.
+    private static final String GESTURE_ACTION_RECOGNITION_INFO = "recognition_info";
+    private static final String GESTURE_BUNDLE_KEY_START_POINT = "start_point";
+    private static final String GESTURE_BUNDLE_KEY_END_POINT = "end_point";
+    private static final String GESTURE_BUNDLE_KEY_LOWEST_POINT = "lowest_point";
+    private static final String GESTURE_BUNDLE_KEY_HIGHEST_POINT = "highest_point";
+    private static final String GESTURE_BUNDLE_KEY_GESTURE_TYPE = "gesture_type";
+    private static final String GESTURE_BUNDLE_KEY_TEXT_ALTERNATIVE = "text_alternative";
+    private static final String GESTURE_BUNDLE_KEY_TEXT_INSERTION = "text_insertion";
+
+    // Gesture types in Bundle for GESTURE_BUNDLE_KEY_GESTURE_TYPE
+    private static final String GESTURE_TYPE_BACKSPACE = "backspace";
+    private static final String GESTURE_TYPE_ZIGZAG = "zigzag";
+    private static final String GESTURE_TYPE_V_SPACE = "v_space";
+    private static final String GESTURE_TYPE_WEDGE_SPACE = "wedge_space";
+    private static final String GESTURE_TYPE_U_TYPE_REMOVE_SPACE = "u_type_remove_space";
+    private static final String GESTURE_TYPE_ARCH_TYPE_REMOVE_SPACE = "arch_type_remove_space";
+
     private EditorInfo mEditorInfo;
     private int mLastSelectionStart;
     private int mLastSelectionEnd;
@@ -55,7 +81,11 @@
                     mStylusWritingImeCallback.showSoftKeyboard();
                     break;
                 case DirectWritingConstants.MSG_TEXT_VIEW_EXTRA_COMMAND:
-                    // TODO(mahesh.ma): Add DW recognized gesture handling logic here.
+                    String action = (String) msg.obj;
+                    if (action.equals(GESTURE_ACTION_RECOGNITION_INFO)) {
+                        Bundle gestureBundle = msg.getData();
+                        handleDwGesture(gestureBundle);
+                    }
                     break;
                 case DirectWritingConstants.MSG_FORCE_HIDE_KEYBOARD:
                     mStylusWritingImeCallback.hideKeyboard();
@@ -66,6 +96,81 @@
         }
     };
 
+    private void handleDwGesture(Bundle bundle) {
+        if (mStylusWritingImeCallback == null) return;
+        String gestureType = bundle.getString(GESTURE_BUNDLE_KEY_GESTURE_TYPE, "");
+        Log.d(TAG, "Received Direct Writing gesture of type: " + gestureType);
+        if (TextUtils.isEmpty(gestureType)) return;
+
+        // When the gesture recognized is not at a valid character position in the HTML input field,
+        // then the text alternative would be inserted at the current cursor position.
+        String textAlternative = bundle.getString(GESTURE_BUNDLE_KEY_TEXT_ALTERNATIVE, "");
+        float[] startPoint;
+
+        // Populate gesture data as applicable for different gestures recognized.
+        StylusWritingGestureData gestureData = new StylusWritingGestureData();
+
+        if (gestureType.equals(GESTURE_TYPE_BACKSPACE) || gestureType.equals(GESTURE_TYPE_ZIGZAG)) {
+            startPoint = bundle.getFloatArray(GESTURE_BUNDLE_KEY_START_POINT);
+            float[] endPoint = bundle.getFloatArray(GESTURE_BUNDLE_KEY_END_POINT);
+            // Clamp x-coordinates of gesture to Editable bounds in order to allow delete gesture
+            // even if delete strokes cross editable bounds.
+            startPoint[0] = Math.max(startPoint[0], mEditableBounds.left);
+            endPoint[0] = Math.min(endPoint[0], mEditableBounds.right);
+
+            gestureData.endPoint = toMojoPoint(endPoint);
+            gestureData.action = StylusWritingGestureAction.DELETE_TEXT;
+        } else if (gestureType.equals(GESTURE_TYPE_V_SPACE)) {
+            startPoint = bundle.getFloatArray(GESTURE_BUNDLE_KEY_LOWEST_POINT);
+            populateDataForAddSpaceOrTextGesture(gestureData, bundle);
+        } else if (gestureType.equals(GESTURE_TYPE_WEDGE_SPACE)) {
+            startPoint = bundle.getFloatArray(GESTURE_BUNDLE_KEY_HIGHEST_POINT);
+            populateDataForAddSpaceOrTextGesture(gestureData, bundle);
+        } else if (gestureType.equals(GESTURE_TYPE_U_TYPE_REMOVE_SPACE)
+                || gestureType.equals(GESTURE_TYPE_ARCH_TYPE_REMOVE_SPACE)) {
+            startPoint = bundle.getFloatArray(GESTURE_BUNDLE_KEY_START_POINT);
+            float[] endPoint = bundle.getFloatArray(GESTURE_BUNDLE_KEY_END_POINT);
+
+            gestureData.endPoint = toMojoPoint(endPoint);
+            gestureData.action = StylusWritingGestureAction.REMOVE_SPACES;
+        } else {
+            return; // Not an expected gesture.
+        }
+
+        // Populate the common data for all the gestures.
+        gestureData.startPoint = toMojoPoint(startPoint);
+        gestureData.textAlternative = javaStringToMojoString(textAlternative);
+
+        mStylusWritingImeCallback.handleStylusWritingGestureAction(gestureData);
+    }
+
+    private static org.chromium.gfx.mojom.Point toMojoPoint(float[] endPoint) {
+        org.chromium.gfx.mojom.Point point = new org.chromium.gfx.mojom.Point();
+        point.x = (int) endPoint[0];
+        point.y = (int) endPoint[1];
+        return point;
+    }
+
+    private static void populateDataForAddSpaceOrTextGesture(
+            StylusWritingGestureData gestureData, Bundle gestureBundle) {
+        String textToInsert = gestureBundle.getString(GESTURE_BUNDLE_KEY_TEXT_INSERTION, "");
+        // Insert space character when text to insert is empty inside gesture.
+        if (TextUtils.isEmpty(textToInsert)) textToInsert = " ";
+
+        gestureData.textToInsert = javaStringToMojoString(textToInsert);
+        gestureData.action = StylusWritingGestureAction.ADD_SPACE_OR_TEXT;
+    }
+
+    private static String16 javaStringToMojoString(String string) {
+        short[] data = new short[string.length()];
+        for (int i = 0; i < data.length; i++) {
+            data[i] = (short) string.charAt(i);
+        }
+        String16 mojoString = new String16();
+        mojoString.data = data;
+        return mojoString;
+    }
+
     void updateInputState(String text, int selectionStart, int selectionEnd) {
         mLastText = text;
         mLastSelectionStart = selectionStart;
diff --git a/components/sync_bookmarks/BUILD.gn b/components/sync_bookmarks/BUILD.gn
index c359c1f..b04da39 100644
--- a/components/sync_bookmarks/BUILD.gn
+++ b/components/sync_bookmarks/BUILD.gn
@@ -33,7 +33,6 @@
     "//base",
     "//components/bookmarks/browser",
     "//components/favicon/core",
-    "//components/history/core/browser",
     "//components/keyed_service/core:core",
     "//components/sync",
     "//components/undo",
@@ -62,7 +61,6 @@
     "//components/bookmarks/browser",
     "//components/bookmarks/test",
     "//components/favicon/core/test:test_support",
-    "//components/history/core/browser",
     "//components/prefs:test_support",
     "//components/sync:test_support",
     "//components/undo",
diff --git a/components/sync_bookmarks/DEPS b/components/sync_bookmarks/DEPS
index 4160f765..b9eb4432 100644
--- a/components/sync_bookmarks/DEPS
+++ b/components/sync_bookmarks/DEPS
@@ -3,7 +3,6 @@
   "+components/bookmarks/test",
   "+components/favicon/core",
   "+components/favicon_base",
-  "+components/history/core/browser",
   "+components/keyed_service",
   "+components/prefs",
   "+components/sync",
diff --git a/components/ui_devtools/css_agent_unittest.cc b/components/ui_devtools/css_agent_unittest.cc
index 6ee5961..e126854 100644
--- a/components/ui_devtools/css_agent_unittest.cc
+++ b/components/ui_devtools/css_agent_unittest.cc
@@ -38,7 +38,7 @@
 
  private:
   gfx::Rect bounds_;
-  bool visible_;
+  bool visible_ = false;
 };
 
 class FakeDOMAgent : public DOMAgent {
diff --git a/components/ui_devtools/views/view_element.cc b/components/ui_devtools/views/view_element.cc
index 9e060646..3c472e02 100644
--- a/components/ui_devtools/views/view_element.cc
+++ b/components/ui_devtools/views/view_element.cc
@@ -132,7 +132,7 @@
     return;
   }
   UIElement* child_element = *iter;
-  ReorderChild(child_element, parent->GetIndexOf(view));
+  ReorderChild(child_element, parent->GetIndexOf(view).value());
 }
 
 void ViewElement::OnViewBoundsChanged(views::View* view) {
diff --git a/components/user_education/views/help_bubble_view.cc b/components/user_education/views/help_bubble_view.cc
index d41a33c..5dad04e 100644
--- a/components/user_education/views/help_bubble_view.cc
+++ b/components/user_education/views/help_bubble_view.cc
@@ -384,7 +384,7 @@
     labels_.push_back(
         AddChildViewAt(std::make_unique<views::Label>(
                            params.body_text, delegate->GetBodyTextContext()),
-                       GetIndexOf(button_container)));
+                       GetIndexOf(button_container).value()));
   } else {
     labels_.push_back(
         top_text_container->AddChildView(std::make_unique<views::Label>(
diff --git a/components/user_manager/known_user.cc b/components/user_manager/known_user.cc
index a67ec1f8..3324139 100644
--- a/components/user_manager/known_user.cc
+++ b/components/user_manager/known_user.cc
@@ -251,7 +251,7 @@
     return;
 
   ListPrefUpdate update(local_state_, kKnownUsers);
-  for (base::Value& element_value : update->GetListDeprecated()) {
+  for (base::Value& element_value : update->GetList()) {
     if (element_value.is_dict()) {
       if (UserMatches(account_id, element_value)) {
         if (opt_value.has_value())
@@ -760,10 +760,10 @@
     return;
 
   ListPrefUpdate update(local_state_, kKnownUsers);
-  base::Value::ListView update_view = update->GetListDeprecated();
-  for (auto it = update_view.begin(); it != update_view.end(); ++it) {
+  base::Value::List& update_list = update->GetList();
+  for (auto it = update_list.begin(); it != update_list.end(); ++it) {
     if (UserMatches(account_id, *it)) {
-      update->EraseListIter(it);
+      update_list.erase(it);
       break;
     }
   }
@@ -771,7 +771,7 @@
 
 void KnownUser::CleanEphemeralUsers() {
   ListPrefUpdate update(local_state_, kKnownUsers);
-  update->EraseListValueIf([](const auto& value) {
+  update->GetList().EraseIf([](const auto& value) {
     if (!value.is_dict())
       return false;
 
diff --git a/components/user_manager/known_user_unittest.cc b/components/user_manager/known_user_unittest.cc
index 0e3df18..fe375e7 100644
--- a/components/user_manager/known_user_unittest.cc
+++ b/components/user_manager/known_user_unittest.cc
@@ -425,10 +425,10 @@
   KnownUser known_user(local_state());
   EXPECT_TRUE(known_user.GetChallengeResponseKeys(kDefaultAccountId).is_none());
 
-  base::Value challenge_response_keys(base::Value::Type::LIST);
-  challenge_response_keys.Append(base::Value("key1"));
-  known_user.SetChallengeResponseKeys(kDefaultAccountId,
-                                      challenge_response_keys.Clone());
+  base::Value::List challenge_response_keys;
+  challenge_response_keys.Append("key1");
+  known_user.SetChallengeResponseKeys(
+      kDefaultAccountId, base::Value(challenge_response_keys.Clone()));
 
   EXPECT_EQ(known_user.GetChallengeResponseKeys(kDefaultAccountId),
             challenge_response_keys);
diff --git a/components/user_manager/user_manager_base.cc b/components/user_manager/user_manager_base.cc
index 2fca1cca..c5a6e8b 100644
--- a/components/user_manager/user_manager_base.cc
+++ b/components/user_manager/user_manager_base.cc
@@ -545,11 +545,10 @@
   UpdateUserAccountLocale(account_id, account_data.locale());
 }
 
-void UserManagerBase::ParseUserList(
-    const base::Value::ConstListView& users_list,
-    const std::set<AccountId>& existing_users,
-    std::vector<AccountId>* users_vector,
-    std::set<AccountId>* users_set) {
+void UserManagerBase::ParseUserList(const base::Value::List& users_list,
+                                    const std::set<AccountId>& existing_users,
+                                    std::vector<AccountId>* users_vector,
+                                    std::set<AccountId>* users_set) {
   users_vector->clear();
   users_set->clear();
   for (size_t i = 0; i < users_list.size(); ++i) {
@@ -843,8 +842,8 @@
   user_loading_stage_ = STAGE_LOADING;
 
   PrefService* local_state = GetLocalState();
-  const base::Value* prefs_regular_users =
-      local_state->GetList(kRegularUsersPref);
+  const base::Value::List& prefs_regular_users =
+      local_state->GetValueList(kRegularUsersPref);
 
   const base::Value* prefs_display_names =
       local_state->GetDictionary(kUserDisplayName);
@@ -861,8 +860,8 @@
   // Load regular users and supervised users.
   std::vector<AccountId> regular_users;
   std::set<AccountId> regular_users_set;
-  ParseUserList(prefs_regular_users->GetListDeprecated(),
-                device_local_accounts_set, &regular_users, &regular_users_set);
+  ParseUserList(prefs_regular_users, device_local_accounts_set, &regular_users,
+                &regular_users_set);
   for (std::vector<AccountId>::const_iterator it = regular_users.begin();
        it != regular_users.end(); ++it) {
     if (IsDeprecatedSupervisedAccountId(*it)) {
@@ -922,8 +921,9 @@
 }
 
 bool UserManagerBase::UserExistsInList(const AccountId& account_id) const {
-  const base::Value* user_list = GetLocalState()->GetList(kRegularUsersPref);
-  for (const base::Value& i : user_list->GetListDeprecated()) {
+  const base::Value::List& user_list =
+      GetLocalState()->GetValueList(kRegularUsersPref);
+  for (const base::Value& i : user_list) {
     const std::string* email = i.GetIfString();
     if (email && (account_id.GetUserEmail() == *email))
       return true;
@@ -948,8 +948,9 @@
 void UserManagerBase::AddUserRecord(User* user) {
   // Add the user to the front of the user list.
   ListPrefUpdate prefs_users_update(GetLocalState(), kRegularUsersPref);
-  prefs_users_update->Insert(prefs_users_update->GetListDeprecated().begin(),
-                             base::Value(user->GetAccountId().GetUserEmail()));
+  prefs_users_update->GetList().Insert(
+      prefs_users_update->GetList().begin(),
+      base::Value(user->GetAccountId().GetUserEmail()));
   users_.insert(users_.begin(), user);
 }
 
diff --git a/components/user_manager/user_manager_base.h b/components/user_manager/user_manager_base.h
index 3be2566..031a35d6 100644
--- a/components/user_manager/user_manager_base.h
+++ b/components/user_manager/user_manager_base.h
@@ -162,7 +162,7 @@
   // Helper function that converts users from |users_list| to |users_vector| and
   // |users_set|. Duplicates and users already present in |existing_users| are
   // skipped.
-  void ParseUserList(const base::Value::ConstListView& users_list,
+  void ParseUserList(const base::Value::List& users_list,
                      const std::set<AccountId>& existing_users,
                      std::vector<AccountId>* users_vector,
                      std::set<AccountId>* users_set);
diff --git a/components/user_notes/browser/user_note_service.cc b/components/user_notes/browser/user_note_service.cc
index f3196066..06866887 100644
--- a/components/user_notes/browser/user_note_service.cc
+++ b/components/user_notes/browser/user_note_service.cc
@@ -452,7 +452,16 @@
     const auto& creation_entry_it = creation_map_.find(id);
     const auto& model_entry_it = model_map_.find(id);
 
-    if (new_note_it == new_notes.end() || model_entry_it != model_map_.end()) {
+    if (creation_entry_it != creation_map_.end()) {
+      // This note was authored locally. It could also be in the list of new
+      // notes if the URL it's attached to was loaded in multiple tabs, but it
+      // cannot exist in the model map yet. Move it there from the creation map.
+      DCHECK(model_entry_it == model_map_.end());
+      creation_entry_it->second.model->Update(std::move(note));
+      model_map_.emplace(id, std::move(creation_entry_it->second));
+      creation_map_.erase(creation_entry_it);
+    } else if (new_note_it == new_notes.end() ||
+               model_entry_it != model_map_.end()) {
       // Either this note was updated or the URL it is attached to was already
       // loaded in another tab. Either way, its model already exists in the
       // model map, so simply update it with the latest model.
@@ -460,24 +469,12 @@
       DCHECK(model_entry_it != model_map_.end());
       model_entry_it->second.model->Update(std::move(note));
     } else {
+      // This is a new note that wasn't authored locally. Simply add the model
+      // to the model map.
+      DCHECK(new_note_it != new_notes.end());
       DCHECK(model_entry_it == model_map_.end());
-
-      if (creation_entry_it == creation_map_.end()) {
-        // This is a new note that wasn't authored locally. Simply add the model
-        // to the model map.
-        UserNoteService::ModelMapEntry entry(std::move(note));
-        model_map_.emplace(id, std::move(entry));
-      } else {
-        // This is a new note that was authored locally, which means it has a
-        // partial model in the creation map. Update it with the new model from
-        // storage, then move it from the creation map to the model map. The new
-        // model from storage can't be used directly because the note instance
-        // for the page highlight has a reference to the partial model, and that
-        // connection must be maintained.
-        creation_entry_it->second.model->Update(std::move(note));
-        model_map_.emplace(id, std::move(creation_entry_it->second));
-        creation_map_.erase(creation_entry_it);
-      }
+      UserNoteService::ModelMapEntry entry(std::move(note));
+      model_map_.emplace(id, std::move(entry));
     }
   }
 
diff --git a/components/user_notes/browser/user_note_utils.cc b/components/user_notes/browser/user_note_utils.cc
index 16a35d96..2e6f029 100644
--- a/components/user_notes/browser/user_note_utils.cc
+++ b/components/user_notes/browser/user_note_utils.cc
@@ -66,12 +66,14 @@
 
         if (url == model.target().target_page()) {
           // Note has been removed.
-          removed.emplace_back(base::UnguessableToken(model.id()));
+          removed.emplace_back(model.id());
         }
       } else if (metadata_it->second->modification_date() >
-                 model.metadata().modification_date()) {
-        // Note has been modified.
-        modified.emplace_back(base::UnguessableToken(model.id()));
+                     model.metadata().modification_date() ||
+                 note_service.IsNoteInProgress(model.id())) {
+        // This note has been modified or created locally (which is treated as a
+        // modification since both the instance and the partial model exist).
+        modified.emplace_back(model.id());
       }
     }
 
@@ -81,7 +83,7 @@
       const base::UnguessableToken& id = metadata_it.first;
       if (!notes_manager->GetNoteInstance(id)) {
         // This is a new note.
-        added.emplace_back(base::UnguessableToken(id));
+        added.emplace_back(id);
       }
     }
 
diff --git a/components/viz/service/display/overlay_candidate.h b/components/viz/service/display/overlay_candidate.h
index 805b36b..0e7c156 100644
--- a/components/viz/service/display/overlay_candidate.h
+++ b/components/viz/service/display/overlay_candidate.h
@@ -43,6 +43,9 @@
     kSuccess,
     kFailNotOverlay,
     kFailNotAxisAligned,
+    kFailNotAxisAligned3dTransform,
+    kFailNotAxisAligned2dShear,
+    kFailNotAxisAligned2dRotation,
     kFailColorMatrix,
     kFailOpacity,
     kFailBlending,
diff --git a/components/viz/service/display/overlay_candidate_factory.cc b/components/viz/service/display/overlay_candidate_factory.cc
index 74158e3..e76e6f19 100644
--- a/components/viz/service/display/overlay_candidate_factory.cc
+++ b/components/viz/service/display/overlay_candidate_factory.cc
@@ -81,6 +81,32 @@
     return gfx::OVERLAY_TRANSFORM_INVALID;
 }
 
+constexpr double kEpsilon = 0.0001;
+
+// Determine why the transformation isn't axis aligned. A transform with z
+// components or perspective would require a full 4x4 matrix to delegate, a
+// transform with a shear component would require a 2x2 matrix to delegate, and
+// a 2d rotation transform could be delegated with an angle.
+// This is only useful for delegated compositing.
+OverlayCandidate::CandidateStatus GetReasonForTransformNotAxisAligned(
+    const gfx::Transform& transform) {
+  if (transform.HasPerspective() || !transform.IsFlat())
+    return OverlayCandidate::CandidateStatus::kFailNotAxisAligned3dTransform;
+
+  // The transform has a shear component if the x and y sub-vectors are not
+  // perpendicular (have a non-zero dot product).
+  const auto& matrix = transform.matrix();
+  gfx::Vector2dF x_part(matrix.rc(0, 0), matrix.rc(1, 0));
+  gfx::Vector2dF y_part(matrix.rc(0, 1), matrix.rc(1, 1));
+  // Normalize to avoid numerical issues.
+  x_part.Scale(1.f / x_part.Length());
+  y_part.Scale(1.f / y_part.Length());
+  if (std::abs(gfx::DotProduct(x_part, y_part)) > kEpsilon)
+    return OverlayCandidate::CandidateStatus::kFailNotAxisAligned2dShear;
+
+  return OverlayCandidate::CandidateStatus::kFailNotAxisAligned2dRotation;
+}
+
 }  // namespace
 
 OverlayCandidate::CandidateStatus OverlayCandidateFactory::FromDrawQuad(
@@ -273,8 +299,11 @@
 
   gfx::OverlayTransform overlay_transform =
       GetOverlayTransform(sqs->quad_to_target_transform, y_flipped);
-  if (overlay_transform == gfx::OVERLAY_TRANSFORM_INVALID)
-    return CandidateStatus::kFailNotAxisAligned;
+  if (overlay_transform == gfx::OVERLAY_TRANSFORM_INVALID) {
+    return is_delegated_context_ ? GetReasonForTransformNotAxisAligned(
+                                       sqs->quad_to_target_transform)
+                                 : CandidateStatus::kFailNotAxisAligned;
+  }
   candidate.transform = overlay_transform;
 
   auto& transform = sqs->quad_to_target_transform;
diff --git a/components/viz/service/display/overlay_processor_delegated.cc b/components/viz/service/display/overlay_processor_delegated.cc
index 559ad72..66e4984 100644
--- a/components/viz/service/display/overlay_processor_delegated.cc
+++ b/components/viz/service/display/overlay_processor_delegated.cc
@@ -175,21 +175,32 @@
       }
       candidates->push_back(candidate);
       candidate_quads.push_back(it);
+    } else if (candidate_status ==
+               OverlayCandidate::CandidateStatus::kFailVisible) {
+      // This quad can be intentionally skipped.
+      num_quads_skipped++;
     } else {
-      if (candidate_status == OverlayCandidate::CandidateStatus::kFailVisible) {
-        // This quad can be intentionally skipped.
-        num_quads_skipped++;
-      } else {
-        DBG_DRAW_RECT("delegated.overlay.failed", display_rect);
-        DBG_LOG("delegated.overlay.failed", "error code %d", candidate_status);
-      }
+      DBG_DRAW_RECT("delegated.overlay.failed", display_rect);
+      DBG_LOG("delegated.overlay.failed", "error code %d", candidate_status);
 
-      if (candidate_status ==
-          OverlayCandidate::CandidateStatus::kFailNotAxisAligned) {
-        delegated_status_ = DelegationStatus::kCompositedNotAxisAligned;
-      } else if (candidate_status ==
-                 OverlayCandidate::CandidateStatus::kFailNotOverlay) {
-        delegated_status_ = DelegationStatus::kCompositedNotOverlay;
+      switch (candidate_status) {
+        case OverlayCandidate::CandidateStatus::kFailNotAxisAligned:
+          delegated_status_ = DelegationStatus::kCompositedNotAxisAligned;
+          break;
+        case OverlayCandidate::CandidateStatus::kFailNotAxisAligned3dTransform:
+          delegated_status_ = DelegationStatus::kCompositedHas3dTransform;
+          break;
+        case OverlayCandidate::CandidateStatus::kFailNotAxisAligned2dShear:
+          delegated_status_ = DelegationStatus::kCompositedHas2dShear;
+          break;
+        case OverlayCandidate::CandidateStatus::kFailNotAxisAligned2dRotation:
+          delegated_status_ = DelegationStatus::kCompositedHas2dRotation;
+          break;
+        case OverlayCandidate::CandidateStatus::kFailNotOverlay:
+          delegated_status_ = DelegationStatus::kCompositedNotOverlay;
+          break;
+        default:
+          break;
       }
     }
   }
diff --git a/components/viz/service/display/overlay_processor_delegated.h b/components/viz/service/display/overlay_processor_delegated.h
index 4983137d..79109cd 100644
--- a/components/viz/service/display/overlay_processor_delegated.h
+++ b/components/viz/service/display/overlay_processor_delegated.h
@@ -79,7 +79,10 @@
     kCompositedTooManyQuads = 5,
     kCompositedBackdropFilter = 6,
     kCompositedCopyRequest = 7,
-    kMaxValue = kCompositedCopyRequest
+    kCompositedHas3dTransform = 8,
+    kCompositedHas2dShear = 9,
+    kCompositedHas2dRotation = 10,
+    kMaxValue = kCompositedHas2dRotation
   };
 
   gfx::RectF GetPrimaryPlaneDisplayRect(
diff --git a/components/viz/service/display/overlay_unittest.cc b/components/viz/service/display/overlay_unittest.cc
index 45e8ff7..6ff0bc9 100644
--- a/components/viz/service/display/overlay_unittest.cc
+++ b/components/viz/service/display/overlay_unittest.cc
@@ -4605,6 +4605,25 @@
 
 using DelegatedTest = OverlayTest<TestDelegatedOverlayProcessor>;
 
+gfx::Transform MakePerspectiveTransform() {
+  gfx::Transform transform;
+  transform.ApplyPerspectiveDepth(100.f);
+  transform.RotateAbout(gfx::Vector3dF(1.f, 1.f, 1.f), 30);
+  return transform;
+}
+
+gfx::Transform MakeShearTransform() {
+  gfx::Transform transform;
+  transform.Skew(0, 30);
+  return transform;
+}
+
+gfx::Transform MakeRotationTransform() {
+  gfx::Transform transform;
+  transform.RotateAboutZAxis(30);
+  return transform;
+}
+
 TEST_F(DelegatedTest, ForwardMultipleBasic) {
   auto pass = CreateRenderPass();
   constexpr size_t kNumTestQuads = 5;
@@ -4904,6 +4923,37 @@
   EXPECT_TRUE(damage_rect_.IsEmpty());
 }
 
+TEST_F(DelegatedTest, NonAxisAlignedCandidateStatus) {
+  auto pass = CreateRenderPass();
+  const auto kSmallCandidateRect = gfx::Rect(5, 10, 57, 64);
+  auto* quad = CreateCandidateQuadAt(
+      resource_provider_.get(), child_resource_provider_.get(),
+      child_provider_.get(), pass->shared_quad_state_list.back(), pass.get(),
+      kSmallCandidateRect);
+  SurfaceDamageRectList surface_damage_rect_list;
+  OverlayCandidate candidate;
+  auto color_mat = GetIdentityColorMatrix();
+  auto candidate_factory = OverlayCandidateFactory(
+      pass.get(), resource_provider_.get(), &surface_damage_rect_list,
+      &color_mat, gfx::RectF(pass->output_rect),
+      true /* is_delegated_context */);
+
+  pass->shared_quad_state_list.back()->quad_to_target_transform =
+      MakePerspectiveTransform();
+  EXPECT_EQ(OverlayCandidate::CandidateStatus::kFailNotAxisAligned3dTransform,
+            candidate_factory.FromDrawQuad(quad, candidate));
+
+  pass->shared_quad_state_list.back()->quad_to_target_transform =
+      MakeShearTransform();
+  EXPECT_EQ(OverlayCandidate::CandidateStatus::kFailNotAxisAligned2dShear,
+            candidate_factory.FromDrawQuad(quad, candidate));
+
+  pass->shared_quad_state_list.back()->quad_to_target_transform =
+      MakeRotationTransform();
+  EXPECT_EQ(OverlayCandidate::CandidateStatus::kFailNotAxisAligned2dRotation,
+            candidate_factory.FromDrawQuad(quad, candidate));
+}
+
 // These tests check to make sure that candidate quads that should fail (aka
 // non-delegatable) do fail. These tests might need to be changed if we have
 // improved delegation support.
diff --git a/components/webapps/browser/banners/app_banner_manager.cc b/components/webapps/browser/banners/app_banner_manager.cc
index 24ba3661..0fac9c9 100644
--- a/components/webapps/browser/banners/app_banner_manager.cc
+++ b/components/webapps/browser/banners/app_banner_manager.cc
@@ -11,6 +11,7 @@
 #include "base/bind.h"
 #include "base/command_line.h"
 #include "base/compiler_specific.h"
+#include "base/containers/contains.h"
 #include "base/containers/cxx20_erase.h"
 #include "base/feature_list.h"
 #include "base/memory/raw_ptr.h"
@@ -397,26 +398,30 @@
   if (data.worker_check_passed && data.valid_manifest)
     TrackDisplayEvent(DISPLAY_EVENT_WEB_APP_BANNER_REQUESTED);
 
-  auto error = data.NoBlockingErrors() ? NO_ERROR_DETECTED : data.errors[0];
+  bool no_matching_service_worker =
+      base::Contains(data.errors, NO_MATCHING_SERVICE_WORKER);
+  if (no_matching_service_worker) {
+    TrackDisplayEvent(DISPLAY_EVENT_LACKS_SERVICE_WORKER);
+  }
+
+  bool is_installable = data.NoBlockingErrors();
 
   // When |features::SkipInstallServiceWorkerCheck| is true, a service worker is
   // still required to display the banner prompt. This would mean that while a
-  // banner may not appear, the site is still consider installabled if it only
+  // banner may not appear, the site is still considered installable if it only
   // failed service worker checks.
   bool worker_errors_ignored_for_installs = false;
   if (features::SkipInstallServiceWorkerCheck() &&
       data.HasErrorOnlyServiceWorkerErrors()) {
-    DCHECK(error != NO_ERROR_DETECTED);
+    DCHECK(!is_installable);
     worker_errors_ignored_for_installs = true;
-    error = NO_ERROR_DETECTED;
+    is_installable = true;
   }
 
-  if (error != NO_ERROR_DETECTED) {
-    if (error == NO_MATCHING_SERVICE_WORKER)
-      TrackDisplayEvent(DISPLAY_EVENT_LACKS_SERVICE_WORKER);
-
+  if (!is_installable) {
+    DCHECK(!data.errors.empty());
     SetInstallableWebAppCheckResult(InstallableWebAppCheckResult::kNo);
-    Stop(error);
+    Stop(data.errors[0]);
     return;
   }
 
@@ -435,6 +440,14 @@
     return;
   }
 
+  if (no_matching_service_worker &&
+      base::FeatureList::IsEnabled(features::kCreateShortcutIgnoresManifest)) {
+    SetInstallableWebAppCheckResult(
+        InstallableWebAppCheckResult::kYes_ByUserRequest);
+    Stop(NO_MATCHING_SERVICE_WORKER);
+    return;
+  }
+
   if (worker_errors_ignored_for_installs) {
     DCHECK(data.HasErrorOnlyServiceWorkerErrors());
 
diff --git a/components/webapps/browser/features.cc b/components/webapps/browser/features.cc
index 8014b879..4216d25 100644
--- a/components/webapps/browser/features.cc
+++ b/components/webapps/browser/features.cc
@@ -33,6 +33,16 @@
                                     base::FEATURE_DISABLED_BY_DEFAULT};
 #endif  // BUILDFLAG(IS_ANDROID)
 
+// When the user clicks "Create Shortcut" in the dot menu, the current page is
+// used as start-url, instead of the manifest-supplied value.
+// This allows subpages of web apps to be bookmarked via shortcuts
+// separately from their parent app.
+// For installing the parent app, the existing "Install Site" should be used
+// instead. With this feature, "Install Site" now also shows up for websites
+// without service worker, as long as they have a manifest.
+const base::Feature kCreateShortcutIgnoresManifest{
+    "CreateShortcutIgnoresManifest", base::FEATURE_DISABLED_BY_DEFAULT};
+
 // Skip the service worker in all install criteria check. This affect both
 // "intallable" and "promotable" status of a web app.
 const base::Feature kSkipServiceWorkerCheckAll{
diff --git a/components/webapps/browser/features.h b/components/webapps/browser/features.h
index 5e9a8e0a..0304beb 100644
--- a/components/webapps/browser/features.h
+++ b/components/webapps/browser/features.h
@@ -24,6 +24,7 @@
 extern const base::Feature kWebApkUniqueId;
 #endif  // BUILDFLAG(IS_ANDROID)
 
+extern const base::Feature kCreateShortcutIgnoresManifest;
 extern const base::Feature kSkipServiceWorkerCheckAll;
 extern const base::Feature kSkipServiceWorkerCheckInstallOnly;
 
diff --git a/components/webapps/browser/installable/installable_data.cc b/components/webapps/browser/installable/installable_data.cc
index 55a353e55..84b12e59 100644
--- a/components/webapps/browser/installable/installable_data.cc
+++ b/components/webapps/browser/installable/installable_data.cc
@@ -5,7 +5,11 @@
 #include "components/webapps/browser/installable/installable_data.h"
 
 #include <utility>
-#include "installable_logging.h"
+
+#include "base/containers/flat_set.h"
+#include "base/feature_list.h"
+#include "components/webapps/browser/features.h"
+#include "components/webapps/browser/installable/installable_logging.h"
 
 namespace webapps {
 
@@ -37,8 +41,23 @@
 InstallableData::~InstallableData() = default;
 
 bool InstallableData::NoBlockingErrors() const {
-  return errors.empty() ||
-         (errors.size() == 1 && errors[0] == WARN_NOT_OFFLINE_CAPABLE);
+  for (auto e : errors) {
+    switch (e) {
+      case WARN_NOT_OFFLINE_CAPABLE:
+        continue;
+      case NO_MATCHING_SERVICE_WORKER:
+#if !BUILDFLAG(IS_ANDROID)
+        if (base::FeatureList::IsEnabled(
+                features::kCreateShortcutIgnoresManifest)) {
+          continue;
+        }
+#endif
+        return false;
+      default:
+        return false;
+    }
+  }
+  return true;
 }
 
 bool InstallableData::HasErrorOnlyServiceWorkerErrors() const {
diff --git a/components/webapps/browser/installable/installable_data.h b/components/webapps/browser/installable/installable_data.h
index 5f7a9f3..784fda0 100644
--- a/components/webapps/browser/installable/installable_data.h
+++ b/components/webapps/browser/installable/installable_data.h
@@ -40,9 +40,13 @@
 
   ~InstallableData();
 
-  // Returns true if `errors` is empty or only has `WARN_NOT_OFFLINE_CAPABLE`.
+  // Returns true if `errors` is empty or only has `WARN_NOT_OFFLINE_CAPABLE`
+  // or `NO_MATCHING_SERVICE_WORKER`.
   // `WARN_NOT_OFFLINE_CAPABLE` only logs a warning message in DevTools and
   // should not change the behavior.
+  // `NO_MATCHING_SERVICE_WORKER` is optional if the feature
+  // `CreateShortcutIgnoresManifest` is active, since then the "Install" button
+  // should show for any website that has a manifest.
   // TODO(https://crbug.com/965802): Remove `WARN_NOT_OFFLINE_CAPABLE` once the
   // CheckOfflineCapability feature is enabled with 'enforce' mode by default in
   // M93.
diff --git a/components/webauthn/android/java/src/org/chromium/components/webauthn/AuthenticatorImpl.java b/components/webauthn/android/java/src/org/chromium/components/webauthn/AuthenticatorImpl.java
index 55f97c5d..e2fbe9e 100644
--- a/components/webauthn/android/java/src/org/chromium/components/webauthn/AuthenticatorImpl.java
+++ b/components/webauthn/android/java/src/org/chromium/components/webauthn/AuthenticatorImpl.java
@@ -55,6 +55,9 @@
     /** The payment information to be added to the "clientDataJson". */
     private PaymentOptions mPayment;
 
+    /** Caches the GMS Core package version. */
+    private int mGmsCorePackageVersion;
+
     private MakeCredential_Response mMakeCredentialCallback;
     private GetAssertion_Response mGetAssertionCallback;
     // A queue is used to store pending IsUserVerifyingPlatformAuthenticatorAvailable request
@@ -87,6 +90,9 @@
         mRenderFrameHost = renderFrameHost;
         mSupportLevel = supportLevel;
         mOrigin = mRenderFrameHost.getLastCommittedOrigin();
+
+        Context context = ContextUtils.getApplicationContext();
+        mGmsCorePackageVersion = PackageUtils.getPackageVersion(context, GMSCORE_PACKAGE_NAME);
     }
 
     /**
@@ -116,9 +122,7 @@
 
         mMakeCredentialCallback = callback;
         mIsOperationPending = true;
-        Context context = ContextUtils.getApplicationContext();
-        if (PackageUtils.getPackageVersion(context, GMSCORE_PACKAGE_NAME)
-                < Fido2ApiHandler.GMSCORE_MIN_VERSION) {
+        if (mGmsCorePackageVersion < Fido2ApiHandler.GMSCORE_MIN_VERSION) {
             onError(AuthenticatorStatus.NOT_IMPLEMENTED);
             return;
         }
@@ -140,10 +144,8 @@
 
         mGetAssertionCallback = callback;
         mIsOperationPending = true;
-        Context context = ContextUtils.getApplicationContext();
 
-        if (PackageUtils.getPackageVersion(context, GMSCORE_PACKAGE_NAME)
-                < Fido2ApiHandler.GMSCORE_MIN_VERSION) {
+        if (mGmsCorePackageVersion < Fido2ApiHandler.GMSCORE_MIN_VERSION) {
             onError(AuthenticatorStatus.NOT_IMPLEMENTED);
             return;
         }
@@ -163,15 +165,7 @@
             callback.call(isUvpaa);
         };
 
-        Context context = ContextUtils.getApplicationContext();
-        // ChromeActivity could be null.
-        if (context == null) {
-            decoratedCallback.call(false);
-            return;
-        }
-
-        if (PackageUtils.getPackageVersion(context, GMSCORE_PACKAGE_NAME)
-                < Fido2ApiHandler.GMSCORE_MIN_VERSION) {
+        if (mGmsCorePackageVersion < Fido2ApiHandler.GMSCORE_MIN_VERSION) {
             decoratedCallback.call(false);
             return;
         }
diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn
index 797b066..4d00c3a 100644
--- a/content/browser/BUILD.gn
+++ b/content/browser/BUILD.gn
@@ -1097,6 +1097,8 @@
     "interest_group/debuggable_auction_worklet.h",
     "interest_group/debuggable_auction_worklet_tracker.cc",
     "interest_group/debuggable_auction_worklet_tracker.h",
+    "interest_group/interest_group_auction.cc",
+    "interest_group/interest_group_auction.h",
     "interest_group/interest_group_manager_impl.cc",
     "interest_group/interest_group_manager_impl.h",
     "interest_group/interest_group_permissions_cache.cc",
@@ -1327,6 +1329,7 @@
     "notifications/platform_notification_context_impl.h",
     "notifications/platform_notification_service_proxy.cc",
     "notifications/platform_notification_service_proxy.h",
+    "origin_agent_cluster_isolation_state.cc",
     "origin_agent_cluster_isolation_state.h",
     "payments/installed_payment_apps_finder_impl.cc",
     "payments/installed_payment_apps_finder_impl.h",
diff --git a/content/browser/android/ime_adapter_android.cc b/content/browser/android/ime_adapter_android.cc
index dbe4f446..79a4126 100644
--- a/content/browser/android/ime_adapter_android.cc
+++ b/content/browser/android/ime_adapter_android.cc
@@ -24,6 +24,7 @@
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/native_web_keyboard_event.h"
 #include "third_party/blink/public/common/input/web_input_event.h"
+#include "third_party/blink/public/mojom/input/stylus_writing_gesture.mojom.h"
 #include "third_party/blink/public/platform/web_text_input_type.h"
 #include "ui/base/ime/ime_text_span.h"
 
@@ -379,6 +380,26 @@
   }
 }
 
+void ImeAdapterAndroid::HandleStylusWritingGestureAction(
+    JNIEnv* env,
+    const base::android::JavaParamRef<jobject>&,
+    const base::android::JavaParamRef<jobject>& jgesture_data_byte_buffer) {
+  auto* input_handler = GetFocusedFrameWidgetInputHandler();
+  if (!input_handler)
+    return;
+  blink::mojom::StylusWritingGestureDataPtr gesture_data;
+  if (!blink::mojom::StylusWritingGestureData::Deserialize(
+          static_cast<jbyte*>(
+              env->GetDirectBufferAddress(jgesture_data_byte_buffer.obj())),
+          env->GetDirectBufferCapacity(jgesture_data_byte_buffer.obj()),
+          &gesture_data)) {
+    NOTREACHED();
+    return;
+  }
+
+  input_handler->HandleStylusWritingGestureAction(std::move(gesture_data));
+}
+
 void ImeAdapterAndroid::AdvanceFocusForIME(JNIEnv* env,
                                            const JavaParamRef<jobject>& obj,
                                            jint focus_type) {
diff --git a/content/browser/android/ime_adapter_android.h b/content/browser/android/ime_adapter_android.h
index ad02b22..0305a259 100644
--- a/content/browser/android/ime_adapter_android.h
+++ b/content/browser/android/ime_adapter_android.h
@@ -97,6 +97,10 @@
                            bool monitorRequest);
   bool RequestTextInputStateUpdate(JNIEnv*,
                                    const base::android::JavaParamRef<jobject>&);
+  void HandleStylusWritingGestureAction(
+      JNIEnv*,
+      const base::android::JavaParamRef<jobject>&,
+      const base::android::JavaParamRef<jobject>&);
 
   // RendetWidgetHostConnector implementation.
   void UpdateRenderProcessConnection(
diff --git a/content/browser/child_process_security_policy_impl.cc b/content/browser/child_process_security_policy_impl.cc
index d254be9..a9a3e57 100644
--- a/content/browser/child_process_security_policy_impl.cc
+++ b/content/browser/child_process_security_policy_impl.cc
@@ -56,6 +56,7 @@
 #include "storage/browser/file_system/file_system_url.h"
 #include "storage/browser/file_system/isolated_context.h"
 #include "storage/common/file_system/file_system_util.h"
+#include "third_party/blink/public/common/features.h"
 #include "url/gurl.h"
 #include "url/url_canon.h"
 #include "url/url_constants.h"
@@ -2340,12 +2341,14 @@
   return requested_isolation_state;
 }
 
-bool ChildProcessSecurityPolicyImpl::HasOriginEverRequestedOptInIsolation(
-    BrowserContext* browser_context,
-    const url::Origin& origin) {
+bool ChildProcessSecurityPolicyImpl::
+    HasOriginEverRequestedOriginAgentClusterValue(
+        BrowserContext* browser_context,
+        const url::Origin& origin) {
   base::AutoLock origins_isolation_opt_in_lock(origins_isolation_opt_in_lock_);
-  return base::Contains(origin_isolation_opt_ins_, browser_context) &&
-         base::Contains(origin_isolation_opt_ins_[browser_context], origin);
+  return base::Contains(origin_isolation_opt_ins_and_outs_, browser_context) &&
+         base::Contains(origin_isolation_opt_ins_and_outs_[browser_context],
+                        origin);
 }
 
 OriginAgentClusterIsolationState*
@@ -2369,7 +2372,7 @@
   return nullptr;
 }
 
-void ChildProcessSecurityPolicyImpl::AddNonIsolatedOriginIfNeeded(
+void ChildProcessSecurityPolicyImpl::AddDefaultIsolatedOriginIfNeeded(
     const IsolationContext& isolation_context,
     const url::Origin& origin,
     bool is_global_walk_or_frame_removal) {
@@ -2388,31 +2391,32 @@
 
   base::AutoLock origins_isolation_opt_in_lock(origins_isolation_opt_in_lock_);
 
-  // Commits of origins that have ever requested isolation in this
-  // BrowserContext are tracked in every BrowsingInstance in this
+  // Commits of origins that have ever sent the OriginAgentCluster header in
+  // this BrowserContext are tracked in every BrowsingInstance in this
   // BrowserContext, to avoid having to do multiple global walks. If the origin
   // isn't in the list of such origins (i.e., the common case), return early to
   // avoid unnecessary work, since this is called on every commit. Skip this
   // during global walks and frame removals, since we do want to track the
   // origin's non-isolated status in those cases.
   if (!is_global_walk_or_frame_removal &&
-      !(base::Contains(origin_isolation_opt_ins_, browser_context) &&
-        base::Contains(origin_isolation_opt_ins_[browser_context], origin))) {
+      !(base::Contains(origin_isolation_opt_ins_and_outs_, browser_context) &&
+        base::Contains(origin_isolation_opt_ins_and_outs_[browser_context],
+                       origin))) {
     return;
   }
 
-  // If |origin| is already in the opt-in list, then we don't want to add it
-  // to the opt-out list. Technically this check is unnecessary during global
+  // If |origin| is already in the opt-in-out list, then we don't want to add it
+  // to the list. Technically this check is unnecessary during global
   // walks (when the origin won't be in this list yet), but it matters during
   // frame removal (when we don't want to add an opted-in origin to the
-  // non-isolated list when its frame is removed).
+  // list as non-isolated when its frame is removed).
   if (LookupOriginIsolationState(browsing_instance_id, origin))
     return;
 
   // Since there was no prior record for this BrowsingInstance, track that this
-  // origin should not be isolated.
+  // origin should use the default isolation model.
   origin_isolation_by_browsing_instance_[browsing_instance_id].emplace_back(
-      OriginAgentClusterIsolationState::CreateNonIsolated(), origin);
+      OriginAgentClusterIsolationState::CreateForDefaultIsolation(), origin);
 }
 
 void ChildProcessSecurityPolicyImpl::
@@ -2480,21 +2484,14 @@
   }
 }
 
-void ChildProcessSecurityPolicyImpl::AddIsolatedOriginForBrowsingInstance(
+void ChildProcessSecurityPolicyImpl::AddCoopIsolatedOriginForBrowsingInstance(
     const IsolationContext& isolation_context,
     const url::Origin& origin,
-    bool is_origin_agent_cluster,
-    bool requires_origin_keyed_process,
     IsolatedOriginSource source) {
   // We ought to have validated the origin prior to getting here.  If the
-  // origin isn't valid at this point, something has gone wrong.  Note that the
-  // origin-keyed OriginAgentCluster isolated origins have slightly different
-  // validation requirements.
-  bool is_valid_origin =
-      is_origin_agent_cluster
-          ? IsolatedOriginUtil::IsValidOriginForOptInIsolation(origin)
-          : IsolatedOriginUtil::IsValidIsolatedOrigin(origin);
-  CHECK(is_valid_origin) << "Trying to isolate invalid origin: " << origin;
+  // origin isn't valid at this point, something has gone wrong.
+  CHECK(IsolatedOriginUtil::IsValidIsolatedOrigin(origin))
+      << "Trying to isolate invalid origin: " << origin;
 
   // This can only be called from the UI thread, as it reads state that's only
   // available (and is only safe to be retrieved) on the UI thread, such as
@@ -2509,25 +2506,52 @@
 
   // For site-keyed isolation, add `origin` to the isolated_origins_ map (which
   // supports subdomain matching).
-  if (!is_origin_agent_cluster) {
-    // Ensure that `origin` is a site (scheme + eTLD+1) rather than any origin.
-    auto site_origin = url::Origin::Create(SiteInfo::GetSiteForOrigin(origin));
-    CHECK_EQ(origin, site_origin);
+  // Ensure that `origin` is a site (scheme + eTLD+1) rather than any origin.
+  auto site_origin = url::Origin::Create(SiteInfo::GetSiteForOrigin(origin));
+  CHECK_EQ(origin, site_origin);
 
-    base::AutoLock isolated_origins_lock(isolated_origins_lock_);
+  base::AutoLock isolated_origins_lock(isolated_origins_lock_);
 
-    // Explicitly set `applies_to_future_browsing_instances` to false to only
-    // isolate `origin` within the provided BrowsingInstance, but not future
-    // ones.  Note that it's possible for `origin` to also become isolated for
-    // future BrowsingInstances if AddFutureIsolatedOrigins() is called for it
-    // later.
-    AddIsolatedOriginInternal(
-        isolation_context.browser_or_resource_context().ToBrowserContext(),
-        origin, false /* applies_to_future_browsing_instances */,
-        isolation_context.browsing_instance_id(),
-        false /* isolate_all_subdomains */, source);
-    return;
-  }
+  // Explicitly set `applies_to_future_browsing_instances` to false to only
+  // isolate `origin` within the provided BrowsingInstance, but not future
+  // ones.  Note that it's possible for `origin` to also become isolated for
+  // future BrowsingInstances if AddFutureIsolatedOrigins() is called for it
+  // later.
+  AddIsolatedOriginInternal(
+      isolation_context.browser_or_resource_context().ToBrowserContext(),
+      origin, false /* applies_to_future_browsing_instances */,
+      isolation_context.browsing_instance_id(),
+      false /* isolate_all_subdomains */, source);
+}
+
+void ChildProcessSecurityPolicyImpl::AddOriginIsolationStateForBrowsingInstance(
+    const IsolationContext& isolation_context,
+    const url::Origin& origin,
+    bool is_origin_agent_cluster,
+    bool requires_origin_keyed_process) {
+  DCHECK(is_origin_agent_cluster ||
+         base::FeatureList::IsEnabled(
+             blink::features::kOriginAgentClusterDefaultEnabled));
+  // We ought to have validated the origin prior to getting here.  If the
+  // origin isn't valid at this point, something has gone wrong.
+  CHECK((is_origin_agent_cluster &&
+         IsolatedOriginUtil::IsValidOriginForOptInIsolation(origin)) ||
+        // The second part of this check is specific to OAC-by-default, and is
+        // required to allow explicit opt-outs for HTTP schemed origins. See
+        // OriginAgentClusterInsecureEnabledBrowserTest.DocumentDomain_Disabled.
+        IsolatedOriginUtil::IsValidOriginForOptOutIsolation(origin))
+      << "Trying to isolate invalid origin: " << origin;
+
+  // This can only be called from the UI thread, as it reads state that's only
+  // available (and is only safe to be retrieved) on the UI thread, such as
+  // BrowsingInstance IDs.
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
+
+  BrowsingInstanceId browsing_instance_id(
+      isolation_context.browsing_instance_id());
+  // This function should only be called when a BrowsingInstance is registering
+  // a new SiteInstance, so |browsing_instance_id| should always be defined.
+  CHECK(!browsing_instance_id.is_null());
 
   // For origin-keyed isolation, use the origin_isolation_by_browsing_instance_
   // map.
@@ -2546,8 +2570,10 @@
                      return entry.origin == origin;
                    }) == it->second.end()) {
     it->second.emplace_back(
-        OriginAgentClusterIsolationState::CreateForOriginAgentCluster(
-            requires_origin_keyed_process),
+        is_origin_agent_cluster
+            ? OriginAgentClusterIsolationState::CreateForOriginAgentCluster(
+                  requires_origin_keyed_process)
+            : OriginAgentClusterIsolationState::CreateNonIsolated(),
         origin);
   }
 }
@@ -2560,12 +2586,13 @@
 
   base::AutoLock origins_isolation_opt_in_lock(origins_isolation_opt_in_lock_);
 
-  if (base::Contains(origin_isolation_opt_ins_, browser_context) &&
-      base::Contains(origin_isolation_opt_ins_[browser_context], origin)) {
+  if (base::Contains(origin_isolation_opt_ins_and_outs_, browser_context) &&
+      base::Contains(origin_isolation_opt_ins_and_outs_[browser_context],
+                     origin)) {
     return false;
   }
 
-  origin_isolation_opt_ins_[browser_context].insert(origin);
+  origin_isolation_opt_ins_and_outs_[browser_context].insert(origin);
   return true;
 }
 
diff --git a/content/browser/child_process_security_policy_impl.h b/content/browser/child_process_security_policy_impl.h
index be1835a..1f67839 100644
--- a/content/browser/child_process_security_policy_impl.h
+++ b/content/browser/child_process_security_policy_impl.h
@@ -109,7 +109,7 @@
     // This can only return false for processes locked to a particular origin,
     // which can happen for any origin when the --site-per-process flag is used,
     // or for isolated origins that require a dedicated process (see
-    // AddFutureIsolatedOrigins and AddIsolatedOriginForBrowsingInstance).
+    // AddFutureIsolatedOrigins and AddOriginIsolationStateForBrowsingInstance).
     bool CanAccessDataForOrigin(const url::Origin& origin);
 
     // Returns the original `child_id` used to create the handle.
@@ -251,7 +251,7 @@
   void RemoveOptInIsolatedOriginsForBrowsingInstance(
       const BrowsingInstanceId& browsing_instance_id);
 
-  // Registers |origin| as process-isolated in the BrowsingInstance associated
+  // Registers |origin| isolation state in the BrowsingInstance associated
   // with |isolation_context|.
   //
   // |is_origin_agent_cluster| is used to indicate |origin| will receive (at
@@ -276,11 +276,18 @@
   // If |origin| has already been registered as isolated for the same
   // BrowsingInstance amd the same value of |requires_origin_keyed_process|,
   // then nothing will be changed by this call.
-  void AddIsolatedOriginForBrowsingInstance(
+  void AddOriginIsolationStateForBrowsingInstance(
       const IsolationContext& isolation_context,
       const url::Origin& origin,
       bool is_origin_agent_cluster,
-      bool requires_origin_keyed_process,
+      bool requires_origin_keyed_process);
+
+  // Adds `origin` to the IsolatedOrigins list for only the BrowsingInstance of
+  // `isolation_context`, without isolating all subdomains. For use when the
+  // isolation is triggered by COOP headers.
+  void AddCoopIsolatedOriginForBrowsingInstance(
+      const IsolationContext& isolation_context,
+      const url::Origin& origin,
       IsolatedOriginSource source);
 
   // This function will check whether |origin| has opted-in to logical or
@@ -510,22 +517,26 @@
   // all policy checks.
   Handle CreateHandle(int child_id);
 
-  // Returns true if we have seen an isolation request for this |origin| in the
-  // given |browser_context| before in any BrowsingInstance.
-  bool HasOriginEverRequestedOptInIsolation(BrowserContext* browser_context,
-                                            const url::Origin& origin);
+  // Returns true if we have seen an explicit Origin-Agent-Cluster header
+  // (either opt-in or opt-out) for this |origin| in the given |browser_context|
+  // before in any BrowsingInstance.
+  bool HasOriginEverRequestedOriginAgentClusterValue(
+      BrowserContext* browser_context,
+      const url::Origin& origin);
 
-  // Adds |origin| to the non-isolated list for the BrowsingInstance specified
-  // by |isolation_context|, if we need to track it and it's not already in the
-  // list. |is_global_walk_or_frame_removal| should be set to true during the
-  // global walk that is triggered when |origin| first requests opt-in
-  // isolation, so that the function can skip safety checks that will be
-  // unnecessary during the global walk. It is also set to true if this function
-  // is called when removing a FrameNavigationEntry, since that entry won't be
-  // available to any subsequent global walks.
-  void AddNonIsolatedOriginIfNeeded(const IsolationContext& isolation_context,
-                                    const url::Origin& origin,
-                                    bool is_global_walk_or_frame_removal);
+  // Adds |origin| to the opt-in-out list as having the default isolation state
+  // for the BrowsingInstance specified by |isolation_context|, if we need to
+  // track it and it's not already in the list.
+  // |is_global_walk_or_frame_removal| should be set to true during the global
+  // walk that is triggered when |origin| first requests opt-in isolation, so
+  // that the function can skip safety checks that will be unnecessary during
+  // the global walk. It is also set to true if this function is called when
+  // removing a FrameNavigationEntry, since that entry won't be available to any
+  // subsequent global walks.
+  void AddDefaultIsolatedOriginIfNeeded(
+      const IsolationContext& isolation_context,
+      const url::Origin& origin,
+      bool is_global_walk_or_frame_removal);
 
   // Allows tests to modify the delay in cleaning up BrowsingInstanceIds. If the
   // delay is set to zero, cleanup happens immediately.
@@ -887,10 +898,11 @@
   // prevent any record of sites visible in one profile from being visible to
   // another profile.
   base::Lock origins_isolation_opt_in_lock_;
-  // The set of all origins that have ever requested opt-in isolation, organized
-  // by BrowserContext. This is tracked so we know which origins need to be
-  // tracked when non-isolated in any given BrowsingInstance. Origins requesting
-  // isolation, if successful, are marked as isolated via
+  // The set of all origins that have ever requested opt-in isolation or
+  // requested to opt-out, organized by BrowserContext. This is tracked so we
+  // know which origins need to be tracked when using default isolation in any
+  // given BrowsingInstance. Origins requesting isolation opt-in or out, if
+  // successful, are marked as isolated or not via
   // DetermineOriginAgentClusterIsolation's checking
   // |requested_isolation_state|. Each BrowserContext's state is tracked
   // separately so that timing attacks do not reveal whether an origin has been
@@ -898,7 +910,8 @@
   // of other BrowsingInstances is not observable outside such timing side
   // channels.
   base::flat_map<BrowserContext*, base::flat_set<url::Origin>>
-      origin_isolation_opt_ins_ GUARDED_BY(origins_isolation_opt_in_lock_);
+      origin_isolation_opt_ins_and_outs_
+          GUARDED_BY(origins_isolation_opt_in_lock_);
 
   // A map to track origins that have been isolated within a given
   // BrowsingInstance, or that have been loaded in a BrowsingInstance
diff --git a/content/browser/child_process_security_policy_unittest.cc b/content/browser/child_process_security_policy_unittest.cc
index 5ac71295..dbe6a70 100644
--- a/content/browser/child_process_security_policy_unittest.cc
+++ b/content/browser/child_process_security_policy_unittest.cc
@@ -2776,10 +2776,8 @@
       baz_instance->GetIsolationContext().browsing_instance_id();
 
   // Isolate foo.com for `foo_instance`'s BrowsingInstance only.
-  p->AddIsolatedOriginForBrowsingInstance(
-      foo_instance->GetIsolationContext(), foo,
-      false /* is_origin_agent_cluster */,
-      false /* requires_origin_keyed_process */, IsolatedOriginSource::TEST);
+  p->AddCoopIsolatedOriginForBrowsingInstance(
+      foo_instance->GetIsolationContext(), foo, IsolatedOriginSource::TEST);
   LOCKED_EXPECT_THAT(
       p->isolated_origins_lock_, p->isolated_origins_,
       testing::UnorderedElementsAre(GetIsolatedOriginEntry(
@@ -2810,10 +2808,8 @@
 
   // Isolating foo.com again in the same BrowsingInstance should have no
   // effect.
-  p->AddIsolatedOriginForBrowsingInstance(
-      foo_instance->GetIsolationContext(), foo,
-      false /* is_origin_agent_cluster */,
-      false /* requires_origin_keyed_process */, IsolatedOriginSource::TEST);
+  p->AddCoopIsolatedOriginForBrowsingInstance(
+      foo_instance->GetIsolationContext(), foo, IsolatedOriginSource::TEST);
   EXPECT_EQ(1, GetIsolatedOriginEntryCount(foo));
   LOCKED_EXPECT_THAT(
       p->isolated_origins_lock_, p->isolated_origins_,
@@ -2822,10 +2818,8 @@
           foo_browsing_instance_id, foo)));
 
   // Isolate baz.com in `baz_browsing_instance`'s BrowsingInstance.
-  p->AddIsolatedOriginForBrowsingInstance(
-      baz_instance->GetIsolationContext(), baz,
-      false /* is_origin_agent_cluster */,
-      false /* requires_origin_keyed_process */, IsolatedOriginSource::TEST);
+  p->AddCoopIsolatedOriginForBrowsingInstance(
+      baz_instance->GetIsolationContext(), baz, IsolatedOriginSource::TEST);
   LOCKED_EXPECT_THAT(
       p->isolated_origins_lock_, p->isolated_origins_,
       testing::UnorderedElementsAre(
@@ -2849,10 +2843,8 @@
   EXPECT_TRUE(IsIsolatedOrigin(&context, baz_browsing_instance_id, baz));
 
   // Isolate bar.com in foo.com (not bar.com)'s BrowsingInstance.
-  p->AddIsolatedOriginForBrowsingInstance(
-      foo_instance->GetIsolationContext(), bar,
-      false /* is_origin_agent_cluster */,
-      false /* requires_origin_keyed_process */, IsolatedOriginSource::TEST);
+  p->AddCoopIsolatedOriginForBrowsingInstance(
+      foo_instance->GetIsolationContext(), bar, IsolatedOriginSource::TEST);
 
   // Verify that foo.com and bar.com are both isolated in `foo_instance`'s
   // BrowsingInstance, nothing is isolated in bar_instance's BrowsingInstance,
@@ -2870,14 +2862,10 @@
   // Isolate foo.com in `bar_instance` and `baz_instance`'s BrowsingInstances
   // and verify that this takes effect.  This should result in having three
   // entries for foo.com, one for each BrowsingInstance.
-  p->AddIsolatedOriginForBrowsingInstance(
-      bar_instance->GetIsolationContext(), foo,
-      false /* is_origin_agent_cluster */,
-      false /* requires_origin_keyed_process */, IsolatedOriginSource::TEST);
-  p->AddIsolatedOriginForBrowsingInstance(
-      baz_instance->GetIsolationContext(), foo,
-      false /* is_origin_agent_cluster */,
-      false /* requires_origin_keyed_process */, IsolatedOriginSource::TEST);
+  p->AddCoopIsolatedOriginForBrowsingInstance(
+      bar_instance->GetIsolationContext(), foo, IsolatedOriginSource::TEST);
+  p->AddCoopIsolatedOriginForBrowsingInstance(
+      baz_instance->GetIsolationContext(), foo, IsolatedOriginSource::TEST);
   EXPECT_TRUE(IsIsolatedOrigin(&context, foo_browsing_instance_id, foo));
   EXPECT_TRUE(IsIsolatedOrigin(&context, foo_browsing_instance_id, bar));
   EXPECT_FALSE(IsIsolatedOrigin(&context, foo_browsing_instance_id, baz));
@@ -2930,10 +2918,8 @@
       foo_instance->GetIsolationContext().browsing_instance_id();
 
   // Isolate foo.com for `foo_instance`'s BrowsingInstance only.
-  p->AddIsolatedOriginForBrowsingInstance(
-      foo_instance->GetIsolationContext(), foo,
-      false /* is_origin_agent_cluster */,
-      false /* requires_origin_keyed_process */, IsolatedOriginSource::TEST);
+  p->AddCoopIsolatedOriginForBrowsingInstance(
+      foo_instance->GetIsolationContext(), foo, IsolatedOriginSource::TEST);
   EXPECT_EQ(1, GetIsolatedOriginEntryCount(foo));
 
   // Create a SiteInstance for bar.com in a new BrowsingInstance.
@@ -2971,10 +2957,8 @@
       SiteInstanceImpl::CreateForTesting(&context, GURL("https://foo.com/"));
   EXPECT_EQ(future_id,
             future_instance->GetIsolationContext().browsing_instance_id());
-  p->AddIsolatedOriginForBrowsingInstance(
-      future_instance->GetIsolationContext(), foo,
-      false /* is_origin_agent_cluster */,
-      false /* requires_origin_keyed_process */, IsolatedOriginSource::TEST);
+  p->AddCoopIsolatedOriginForBrowsingInstance(
+      future_instance->GetIsolationContext(), foo, IsolatedOriginSource::TEST);
   EXPECT_EQ(2, GetIsolatedOriginEntryCount(foo));
 
   // Likewise, an attempt to re-add foo.com for future BrowsingInstances should
@@ -2986,10 +2970,8 @@
   // precedes `future_id` and doesn't match `foo_browsing_instance_id`.  Check
   // this with `bar_instance`'s BrowsingInstance.
   EXPECT_LT(bar_browsing_instance_id, future_id);
-  p->AddIsolatedOriginForBrowsingInstance(
-      bar_instance->GetIsolationContext(), foo,
-      false /* is_origin_agent_cluster */,
-      false /* requires_origin_keyed_process */, IsolatedOriginSource::TEST);
+  p->AddCoopIsolatedOriginForBrowsingInstance(
+      bar_instance->GetIsolationContext(), foo, IsolatedOriginSource::TEST);
   EXPECT_EQ(3, GetIsolatedOriginEntryCount(foo));
   EXPECT_TRUE(IsIsolatedOrigin(&context, foo_browsing_instance_id, foo));
   EXPECT_TRUE(IsIsolatedOrigin(&context, bar_browsing_instance_id, foo));
diff --git a/content/browser/first_party_sets/database/first_party_sets_database.cc b/content/browser/first_party_sets/database/first_party_sets_database.cc
index ed0c4c3..b1ab499 100644
--- a/content/browser/first_party_sets/database/first_party_sets_database.cc
+++ b/content/browser/first_party_sets/database/first_party_sets_database.cc
@@ -34,17 +34,19 @@
 const char kRunCountKey[] = "run_count";
 
 [[nodiscard]] bool InitSchema(sql::Database& db) {
-  static constexpr char kSitesToClearSql[] =
-      "CREATE TABLE IF NOT EXISTS sites_to_clear("
-      "site TEXT PRIMARY KEY NOT NULL,"
-      "marked_at_run INTEGER NOT NULL"
+  static constexpr char kBrowserContextSitesToClearSql[] =
+      "CREATE TABLE IF NOT EXISTS browser_context_sites_to_clear("
+      "browser_context_id TEXT NOT NULL,"
+      "site TEXT NOT NULL,"
+      "marked_at_run INTEGER NOT NULL,"
+      "PRIMARY KEY(browser_context_id,site)"
       ")WITHOUT ROWID";
-  if (!db.Execute(kSitesToClearSql))
+  if (!db.Execute(kBrowserContextSitesToClearSql))
     return false;
 
   static constexpr char kMarkedAtRunSitesSql[] =
       "CREATE INDEX IF NOT EXISTS idx_marked_at_run_sites "
-      "ON sites_to_clear(marked_at_run)";
+      "ON browser_context_sites_to_clear(marked_at_run)";
   if (!db.Execute(kMarkedAtRunSitesSql))
     return false;
 
@@ -81,7 +83,8 @@
 }
 
 bool FirstPartySetsDatabase::InsertSitesToClear(
-    const std::vector<net::SchemefulSite>& sites) {
+    const std::string& browser_context_id,
+    const base::flat_set<net::SchemefulSite>& sites) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   if (!LazyInit())
@@ -93,15 +96,17 @@
 
   for (const auto& site : sites) {
     DCHECK(!site.opaque());
-    static constexpr char kInsertSitesToClearSql[] =
+    static constexpr char kInsertSql[] =
         // clang-format off
-        "INSERT OR REPLACE INTO sites_to_clear(site,marked_at_run) "
-        "VALUES(?,?)";
+        "INSERT OR REPLACE INTO browser_context_sites_to_clear"
+        "(browser_context_id,site,marked_at_run)"
+        "VALUES(?,?,?)";
     // clang-format on
     sql::Statement statement(
-        db_->GetCachedStatement(SQL_FROM_HERE, kInsertSitesToClearSql));
-    statement.BindString(0, site.Serialize());
-    statement.BindInt64(1, run_count_);
+        db_->GetCachedStatement(SQL_FROM_HERE, kInsertSql));
+    statement.BindString(0, browser_context_id);
+    statement.BindString(1, site.Serialize());
+    statement.BindInt64(2, run_count_);
 
     if (!statement.Run())
       return false;
@@ -119,7 +124,7 @@
 
   static constexpr char kInsertBrowserContextsClearedSql[] =
       // clang-format off
-      "INSERT OR REPLACE INTO browser_contexts_cleared(browser_context_id,cleared_at_run) "
+      "INSERT OR REPLACE INTO browser_contexts_cleared(browser_context_id,cleared_at_run)"
       "VALUES(?,?)";
   // clang-format on
   sql::Statement statement(
@@ -138,21 +143,20 @@
   if (!LazyInit())
     return {};
 
-  // No-op if the `browser_context_id` does not exist before.
-  if (!HasEntryFor(browser_context_id))
-    return {};
-
+  // Gets the sites that were marked to clear but haven't been cleared yet for
+  // the given `browser_context_id`. Use 0 as the default
+  // `browser_contexts_cleared.cleared_at_run` value if the `browser_context_id`
+  // does not exist in the browser_contexts_cleared table.
   std::vector<net::SchemefulSite> results;
-  static constexpr char kSelectSitesToClearSql[] =
+  static constexpr char kSelectSql[] =
       // clang-format off
-      "SELECT site FROM sites_to_clear "
-      "WHERE marked_at_run>"
-        "(SELECT cleared_at_run FROM browser_contexts_cleared "
-         "WHERE browser_context_id=?)";
+      "SELECT p.site FROM browser_context_sites_to_clear p "
+      "LEFT JOIN browser_contexts_cleared c ON p.browser_context_id=c.browser_context_id "
+      "WHERE p.marked_at_run>COALESCE(c.cleared_at_run,0)"
+      "AND p.browser_context_id=?";
   // clang-format on
 
-  sql::Statement statement(
-      db_->GetCachedStatement(SQL_FROM_HERE, kSelectSitesToClearSql));
+  sql::Statement statement(db_->GetCachedStatement(SQL_FROM_HERE, kSelectSql));
   statement.BindString(0, browser_context_id);
 
   while (statement.Step()) {
@@ -304,23 +308,6 @@
   }
 }
 
-bool FirstPartySetsDatabase::HasEntryFor(
-    const std::string& browser_context_id) const {
-  DCHECK_EQ(db_status_, InitStatus::kSuccess);
-  DCHECK(!browser_context_id.empty());
-
-  static constexpr char kSelectBrowserContextSql[] =
-      "SELECT 1 FROM browser_contexts_cleared "
-      "WHERE browser_context_id=?"
-      "LIMIT 1";
-
-  sql::Statement statement(
-      db_->GetCachedStatement(SQL_FROM_HERE, kSelectBrowserContextSql));
-  statement.BindString(0, browser_context_id);
-
-  return statement.Step();
-}
-
 bool FirstPartySetsDatabase::Destroy() {
   // Reset the value.
   run_count_ = 0;
diff --git a/content/browser/first_party_sets/database/first_party_sets_database.h b/content/browser/first_party_sets/database/first_party_sets_database.h
index a56dc2b..49f7802e 100644
--- a/content/browser/first_party_sets/database/first_party_sets_database.h
+++ b/content/browser/first_party_sets/database/first_party_sets_database.h
@@ -8,6 +8,7 @@
 #include <string>
 #include <vector>
 
+#include "base/containers/flat_set.h"
 #include "base/files/file_path.h"
 #include "base/sequence_checker.h"
 #include "base/thread_annotations.h"
@@ -60,18 +61,18 @@
   FirstPartySetsDatabase& operator=(const FirstPartySetsDatabase&&) = delete;
   ~FirstPartySetsDatabase();
 
-  // Stores the `sites` into sites_to_clear table, and returns true on
-  // success.
+  // Stores the `sites` to be cleared for the `browser_context_id` into
+  // database, and returns true on success.
   [[nodiscard]] bool InsertSitesToClear(
-      const std::vector<net::SchemefulSite>& sites);
+      const std::string& browser_context_id,
+      const base::flat_set<net::SchemefulSite>& sites);
 
   // Stores the `browser_context_id` that has performed clearing into
   // browser_contexts_cleared table, and returns true on success.
   [[nodiscard]] bool InsertBrowserContextCleared(
       const std::string& browser_context_id);
 
-  // Gets the list of sites to clear for the `browser_context_id`. Returns an
-  // empty vector if `browser_context_id` does not exist in the database before.
+  // Gets the list of sites to clear for the `browser_context_id`.
   [[nodiscard]] std::vector<net::SchemefulSite> FetchSitesToClear(
       const std::string& browser_context_id);
 
@@ -97,10 +98,6 @@
   // never be negative.
   void IncreaseRunCount() VALID_CONTEXT_REQUIRED(sequence_checker_);
 
-  // Returns whether an entry exists for the `browser_context_id`.
-  [[nodiscard]] bool HasEntryFor(const std::string& browser_context_id) const
-      VALID_CONTEXT_REQUIRED(sequence_checker_);
-
   // Deletes the database and returns whether the operation was successful.
   //
   // It is OK to call `Destroy()` regardless of whether db init was successful.
diff --git a/content/browser/first_party_sets/database/first_party_sets_database_unittest.cc b/content/browser/first_party_sets/database/first_party_sets_database_unittest.cc
index 50b95e20e..af1ba9f 100644
--- a/content/browser/first_party_sets/database/first_party_sets_database_unittest.cc
+++ b/content/browser/first_party_sets/database/first_party_sets_database_unittest.cc
@@ -60,9 +60,10 @@
     return path;
   }
 
-  size_t CountSitesToClearEntries(sql::Database* db) {
+  size_t CountBrowserContextSitesToClearEntries(sql::Database* db) {
     size_t size = 0;
-    EXPECT_TRUE(sql::test::CountTableRows(db, "sites_to_clear", &size));
+    EXPECT_TRUE(
+        sql::test::CountTableRows(db, "browser_context_sites_to_clear", &size));
     return size;
   }
 
@@ -95,7 +96,7 @@
 
   OpenDatabase();
   // Trigger the lazy-initialization.
-  EXPECT_TRUE(db()->InsertSitesToClear({}));
+  EXPECT_TRUE(db()->InsertSitesToClear("b", {}));
   EXPECT_TRUE(base::PathExists(db_path()));
 
   histograms.ExpectUniqueSample("FirstPartySets.Database.InitStatus",
@@ -106,17 +107,18 @@
   // Create a db handle to the existing db file to verify schemas.
   sql::Database db;
   EXPECT_TRUE(db.Open(db_path()));
-  // [sites_to_clear], [browser_contexts_cleared], and [meta].
+  // [browser_context_sites_to_clear], [browser_contexts_cleared], and [meta].
   EXPECT_EQ(3u, sql::test::CountSQLTables(&db));
   EXPECT_EQ(1, VersionFromMetaTable(db));
   // [idx_marked_at_run_sites], [idx_cleared_at_run_browser_contexts], and
   // [sqlite_autoindex_meta_1].
   EXPECT_EQ(3u, sql::test::CountSQLIndices(&db));
-  // `site`, `marked_at_run`.
-  EXPECT_EQ(2u, sql::test::CountTableColumns(&db, "sites_to_clear"));
+  // `browser_context_id`, `site`, `marked_at_run`.
+  EXPECT_EQ(
+      3u, sql::test::CountTableColumns(&db, "browser_context_sites_to_clear"));
   // `browser_context_id`, `cleared_at_run`.
   EXPECT_EQ(2u, sql::test::CountTableColumns(&db, "browser_contexts_cleared"));
-  EXPECT_EQ(0u, CountSitesToClearEntries(&db));
+  EXPECT_EQ(0u, CountBrowserContextSitesToClearEntries(&db));
   EXPECT_EQ(0u, CountBrowserContextsClearedEntries(&db));
 }
 
@@ -127,14 +129,14 @@
 
   OpenDatabase();
   // Trigger the lazy-initialization.
-  EXPECT_TRUE(db()->InsertSitesToClear({}));
+  EXPECT_TRUE(db()->InsertSitesToClear("b", {}));
   CloseDatabase();
 
   sql::Database db;
   EXPECT_TRUE(db.Open(db_path()));
   EXPECT_EQ(3u, sql::test::CountSQLTables(&db));
   EXPECT_EQ(1, VersionFromMetaTable(db));
-  EXPECT_EQ(1u, CountSitesToClearEntries(&db));
+  EXPECT_EQ(2u, CountBrowserContextSitesToClearEntries(&db));
   EXPECT_EQ(1u, CountBrowserContextsClearedEntries(&db));
 
   histograms.ExpectUniqueSample("FirstPartySets.Database.InitStatus",
@@ -149,7 +151,7 @@
 
   OpenDatabase();
   // Trigger the lazy-initialization.
-  EXPECT_FALSE(db()->InsertSitesToClear({}));
+  EXPECT_FALSE(db()->InsertSitesToClear("b", {}));
   CloseDatabase();
 
   // Expect that the initialization was unsuccessful. The original database was
@@ -158,7 +160,7 @@
   EXPECT_TRUE(db.Open(db_path()));
   EXPECT_EQ(3u, sql::test::CountSQLTables(&db));
   EXPECT_EQ(0, VersionFromMetaTable(db));
-  EXPECT_EQ(1u, CountSitesToClearEntries(&db));
+  EXPECT_EQ(2u, CountBrowserContextSitesToClearEntries(&db));
   EXPECT_EQ(1u, CountBrowserContextsClearedEntries(&db));
 
   histograms.ExpectUniqueSample("FirstPartySets.Database.InitStatus",
@@ -172,7 +174,7 @@
 
   OpenDatabase();
   // Trigger the lazy-initialization.
-  EXPECT_FALSE(db()->InsertSitesToClear({}));
+  EXPECT_FALSE(db()->InsertSitesToClear("b", {}));
   CloseDatabase();
 
   // Expect that the initialization was unsuccessful. The original database was
@@ -181,7 +183,7 @@
   EXPECT_TRUE(db.Open(db_path()));
   EXPECT_EQ(3u, sql::test::CountSQLTables(&db));
   EXPECT_EQ(2, VersionFromMetaTable(db));
-  EXPECT_EQ(1u, CountSitesToClearEntries(&db));
+  EXPECT_EQ(2u, CountBrowserContextSitesToClearEntries(&db));
   EXPECT_EQ(1u, CountBrowserContextsClearedEntries(&db));
 
   histograms.ExpectUniqueSample("FirstPartySets.Database.InitStatus",
@@ -196,7 +198,7 @@
   OpenDatabase();
   // Trigger the lazy-initialization. Expect that the initialization was
   // unsuccessful.
-  EXPECT_FALSE(db()->InsertSitesToClear({}));
+  EXPECT_FALSE(db()->InsertSitesToClear("b", {}));
   CloseDatabase();
 
   // The original database was destroyed.
@@ -217,23 +219,27 @@
 
   OpenDatabase();
   // Trigger the lazy-initialization.
-  EXPECT_TRUE(db()->InsertSitesToClear(input));
+  EXPECT_TRUE(db()->InsertSitesToClear("b", input));
   CloseDatabase();
 
   sql::Database db;
   EXPECT_TRUE(db.Open(db_path()));
-  EXPECT_EQ(2u, CountSitesToClearEntries(&db));
+  EXPECT_EQ(2u, CountBrowserContextSitesToClearEntries(&db));
 
-  const char kSelectSql[] = "SELECT site, marked_at_run FROM sites_to_clear";
+  const char kSelectSql[] =
+      "SELECT browser_context_id, site, marked_at_run FROM "
+      "browser_context_sites_to_clear";
   sql::Statement s(db.GetUniqueStatement(kSelectSql));
 
   EXPECT_TRUE(s.Step());
-  EXPECT_EQ("https://example1.test", s.ColumnString(0));
-  EXPECT_EQ(expected_run_count, s.ColumnInt64(1));
+  EXPECT_EQ("b", s.ColumnString(0));
+  EXPECT_EQ("https://example1.test", s.ColumnString(1));
+  EXPECT_EQ(expected_run_count, s.ColumnInt64(2));
 
   EXPECT_TRUE(s.Step());
-  EXPECT_EQ("https://example2.test", s.ColumnString(0));
-  EXPECT_EQ(expected_run_count, s.ColumnInt64(1));
+  EXPECT_EQ("b", s.ColumnString(0));
+  EXPECT_EQ("https://example2.test", s.ColumnString(1));
+  EXPECT_EQ(expected_run_count, s.ColumnInt64(2));
 
   EXPECT_FALSE(s.Step());
 }
@@ -242,16 +248,20 @@
   ASSERT_TRUE(
       sql::test::CreateDatabaseFromSQL(db_path(), GetSqlFilePath("v1.sql")));
 
+  const std::string browser_context_id = "b0";
   int64_t pre_run_count = 0;
   // Verify data in the pre-existing DB, and set `pre_run_count`.
   {
     sql::Database db;
     EXPECT_TRUE(db.Open(db_path()));
     EXPECT_EQ(3u, sql::test::CountSQLTables(&db));
-    EXPECT_EQ(1u, CountSitesToClearEntries(&db));
+    EXPECT_EQ(2u, CountBrowserContextSitesToClearEntries(&db));
 
-    const char kSelectSql[] = "SELECT site, marked_at_run FROM sites_to_clear";
+    const char kSelectSql[] =
+        "SELECT site, marked_at_run FROM browser_context_sites_to_clear "
+        "WHERE browser_context_id=?";
     sql::Statement s(db.GetUniqueStatement(kSelectSql));
+    s.BindString(0, browser_context_id);
     EXPECT_TRUE(s.Step());
     EXPECT_EQ("https://example.test", s.ColumnString(0));
     EXPECT_EQ(1, s.ColumnInt64(1));
@@ -262,23 +272,25 @@
       net::SchemefulSite(GURL("https://example1.test")),
       net::SchemefulSite(GURL("https://example2.test")),
   };
-  int64_t expected_run_count = 2;
 
   OpenDatabase();
   // Trigger the lazy-initialization.
-  EXPECT_TRUE(db()->InsertSitesToClear(input));
+  EXPECT_TRUE(db()->InsertSitesToClear(browser_context_id, input));
   CloseDatabase();
 
+  int64_t expected_run_count = 2;
   // Verify the inserted data.
   sql::Database db;
   EXPECT_TRUE(db.Open(db_path()));
-  EXPECT_EQ(3u, CountSitesToClearEntries(&db));
+  EXPECT_EQ(4u, CountBrowserContextSitesToClearEntries(&db));
 
   const char kSelectSql[] =
-      "SELECT site, marked_at_run FROM sites_to_clear "
-      "WHERE marked_at_run>?";
+      "SELECT site, marked_at_run FROM browser_context_sites_to_clear "
+      "WHERE marked_at_run>?"
+      "AND browser_context_id=?";
   sql::Statement s(db.GetUniqueStatement(kSelectSql));
   s.BindInt64(0, pre_run_count);
+  s.BindString(1, browser_context_id);
 
   EXPECT_TRUE(s.Step());
   EXPECT_EQ(input.at(0).Serialize(), s.ColumnString(0));
@@ -293,7 +305,7 @@
 
 TEST_F(FirstPartySetsDatabaseTest,
        InsertBrowserContextCleared_NoPreExistingDB) {
-  const std::string browser_context_id = "p";
+  const std::string browser_context_id = "b";
   int64_t expected_run_count = 1;
 
   OpenDatabase();
@@ -331,19 +343,18 @@
         "browser_contexts_cleared";
     sql::Statement s(db.GetUniqueStatement(kSelectSql));
     EXPECT_TRUE(s.Step());
-    EXPECT_EQ("p", s.ColumnString(0));
+    EXPECT_EQ("b0", s.ColumnString(0));
     EXPECT_EQ(1, s.ColumnInt64(1));
     pre_run_count = s.ColumnInt64(1);
   }
 
-  std::string browser_context_id = "p1";
-
+  std::string browser_context_id = "b";
   OpenDatabase();
   // Trigger the lazy-initialization.
   EXPECT_TRUE(db()->InsertBrowserContextCleared(browser_context_id));
   CloseDatabase();
 
-  // Verify the inserted data.
+  // Verify the inserted data has the updated `cleared_at_run` value.
   sql::Database db;
   EXPECT_TRUE(db.Open(db_path()));
   EXPECT_EQ(2u, CountBrowserContextsClearedEntries(&db));
@@ -361,50 +372,81 @@
 
 TEST_F(FirstPartySetsDatabaseTest, FetchSitesToClear_NoPreExistingDB) {
   OpenDatabase();
-  EXPECT_EQ(std::vector<net::SchemefulSite>(), db()->FetchSitesToClear("id"));
+  EXPECT_EQ(std::vector<net::SchemefulSite>(), db()->FetchSitesToClear("b"));
 }
 
 TEST_F(FirstPartySetsDatabaseTest, FetchSitesToClear_BrowserContextNotExist) {
   ASSERT_TRUE(
       sql::test::CreateDatabaseFromSQL(db_path(), GetSqlFilePath("v1.sql")));
 
+  std::string browser_context_id = "b";
   // Verify data in the pre-existing DB.
   {
     sql::Database db;
     EXPECT_TRUE(db.Open(db_path()));
     EXPECT_EQ(3u, sql::test::CountSQLTables(&db));
-    EXPECT_EQ(1u, CountSitesToClearEntries(&db));
     EXPECT_EQ(1u, CountBrowserContextsClearedEntries(&db));
 
+    // b hasn't been cleared before.
     const char kSelectSql[] =
         "SELECT browser_context_id FROM browser_contexts_cleared";
     sql::Statement s(db.GetUniqueStatement(kSelectSql));
     EXPECT_TRUE(s.Step());
-    EXPECT_EQ("p", s.ColumnString(0));
+    EXPECT_EQ("b0", s.ColumnString(0));
     EXPECT_FALSE(s.Step());
   }
 
   OpenDatabase();
-  EXPECT_EQ(std::vector<net::SchemefulSite>(), db()->FetchSitesToClear("p1"));
+  EXPECT_EQ(std::vector<net::SchemefulSite>(),
+            db()->FetchSitesToClear(browser_context_id));
+}
+
+// b1 has sites to clear but hasn't been cleared before.
+TEST_F(FirstPartySetsDatabaseTest, FetchSitesToClear_BrowserContextNotCleared) {
+  ASSERT_TRUE(
+      sql::test::CreateDatabaseFromSQL(db_path(), GetSqlFilePath("v1.sql")));
+
+  const std::string browser_context_id = "b1";
+  // Verify data in the pre-existing DB.
+  {
+    sql::Database db;
+    EXPECT_TRUE(db.Open(db_path()));
+    EXPECT_EQ(3u, sql::test::CountSQLTables(&db));
+    EXPECT_EQ(2u, CountBrowserContextSitesToClearEntries(&db));
+    EXPECT_EQ(1u, CountBrowserContextsClearedEntries(&db));
+
+    const char kSelectSql[] =
+        "SELECT 1 FROM browser_contexts_cleared "
+        "WHERE browser_context_id=?";
+    sql::Statement s(db.GetUniqueStatement(kSelectSql));
+    s.BindString(0, browser_context_id);
+    EXPECT_FALSE(s.Step());
+  }
+
+  OpenDatabase();
+  EXPECT_EQ(std::vector<net::SchemefulSite>(
+                {net::SchemefulSite(GURL("https://example.test"))}),
+            db()->FetchSitesToClear(browser_context_id));
 }
 
 TEST_F(FirstPartySetsDatabaseTest, FetchSitesToClear) {
   ASSERT_TRUE(
       sql::test::CreateDatabaseFromSQL(db_path(), GetSqlFilePath("v1.sql")));
 
+  const std::string browser_context_id = "b0";
   // Verify data in the pre-existing DB.
   {
     sql::Database db;
     EXPECT_TRUE(db.Open(db_path()));
     EXPECT_EQ(3u, sql::test::CountSQLTables(&db));
-    EXPECT_EQ(1u, CountSitesToClearEntries(&db));
+    EXPECT_EQ(2u, CountBrowserContextSitesToClearEntries(&db));
     EXPECT_EQ(1u, CountBrowserContextsClearedEntries(&db));
 
     const char kSelectSql[] =
         "SELECT browser_context_id FROM browser_contexts_cleared";
     sql::Statement s(db.GetUniqueStatement(kSelectSql));
     EXPECT_TRUE(s.Step());
-    EXPECT_EQ("p", s.ColumnString(0));
+    EXPECT_EQ(browser_context_id, s.ColumnString(0));
     EXPECT_FALSE(s.Step());
   }
   // Insert new sites to be cleared.
@@ -414,8 +456,8 @@
   };
 
   OpenDatabase();
-  EXPECT_TRUE(db()->InsertSitesToClear(input));
-  EXPECT_EQ(input, db()->FetchSitesToClear("p"));
+  EXPECT_TRUE(db()->InsertSitesToClear(browser_context_id, input));
+  EXPECT_EQ(input, db()->FetchSitesToClear(browser_context_id));
 }
 
 }  // namespace content
\ No newline at end of file
diff --git a/content/browser/interest_group/auction_runner.cc b/content/browser/interest_group/auction_runner.cc
index 63f854d..fa20501 100644
--- a/content/browser/interest_group/auction_runner.cc
+++ b/content/browser/interest_group/auction_runner.cc
@@ -6,38 +6,16 @@
 
 #include <stdint.h>
 
-#include <algorithm>
 #include <string>
 #include <vector>
 
 #include "base/callback.h"
-#include "base/callback_forward.h"
-#include "base/containers/cxx20_erase_vector.h"
-#include "base/location.h"
-#include "base/memory/ptr_util.h"
-#include "base/metrics/histogram_macros.h"
-#include "base/rand_util.h"
-#include "base/strings/escape.h"
-#include "base/strings/strcat.h"
-#include "base/strings/string_number_conversions.h"
 #include "base/strings/stringprintf.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/time/time.h"
-#include "base/trace_event/trace_event.h"
-#include "base/trace_event/trace_id_helper.h"
-#include "content/browser/interest_group/auction_process_manager.h"
-#include "content/browser/interest_group/auction_url_loader_factory_proxy.h"
-#include "content/browser/interest_group/auction_worklet_manager.h"
-#include "content/browser/interest_group/debuggable_auction_worklet.h"
 #include "content/browser/interest_group/interest_group_manager_impl.h"
-#include "content/browser/interest_group/storage_interest_group.h"
 #include "content/public/browser/content_browser_client.h"
-#include "content/services/auction_worklet/public/mojom/bidder_worklet.mojom.h"
-#include "content/services/auction_worklet/public/mojom/seller_worklet.mojom.h"
 #include "services/network/public/mojom/client_security_state.mojom.h"
-#include "services/network/public/mojom/url_loader_factory.mojom-forward.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
-#include "third_party/blink/public/common/interest_group/ad_auction_constants.h"
 #include "third_party/blink/public/common/interest_group/auction_config.h"
 #include "third_party/blink/public/common/interest_group/interest_group.h"
 #include "third_party/blink/public/mojom/interest_group/interest_group_types.mojom.h"
@@ -46,1569 +24,6 @@
 
 namespace content {
 
-namespace {
-
-using blink::mojom::ReportingDestination;
-constexpr base::TimeDelta kMaxTimeout = base::Milliseconds(500);
-
-// For group freshness metrics.
-constexpr base::TimeDelta kGroupFreshnessMin = base::Minutes(1);
-constexpr base::TimeDelta kGroupFreshnessMax = base::Days(30);
-constexpr int kGroupFreshnessBuckets = 100;
-
-// All URLs received from worklets must be valid HTTPS URLs. It's up to callers
-// to call ReportBadMessage() on invalid URLs.
-bool IsUrlValid(const GURL& url) {
-  return url.is_valid() && url.SchemeIs(url::kHttpsScheme);
-}
-
-// Finds InterestGroup::Ad in `ads` that matches `render_url`, if any. Returns
-// nullptr if `render_url` is invalid.
-const blink::InterestGroup::Ad* FindMatchingAd(
-    const std::vector<blink::InterestGroup::Ad>& ads,
-    const GURL& render_url) {
-  // TODO(mmenke): Validate render URLs on load and make this a DCHECK just
-  // before the return instead, since then `ads` will necessarily only contain
-  // valid URLs at that point.
-  if (!IsUrlValid(render_url))
-    return nullptr;
-
-  for (const auto& ad : ads) {
-    if (ad.render_url == render_url) {
-      return &ad;
-    }
-  }
-
-  return nullptr;
-}
-
-// Checks that `bid` is a valid bid value for an auction.
-bool IsValidBid(double bid) {
-  return !std::isnan(bid) && std::isfinite(bid) && bid > 0;
-}
-
-struct StorageInterestGroupDescByPriority {
-  bool operator()(const StorageInterestGroup& a,
-                  const StorageInterestGroup& b) {
-    return a.interest_group.priority > b.interest_group.priority;
-  }
-  bool operator()(const StorageInterestGroup& a, double b_priority) {
-    return a.interest_group.priority > b_priority;
-  }
-  bool operator()(double a_priority, const StorageInterestGroup& b) {
-    return a_priority > b.interest_group.priority;
-  }
-};
-
-}  // namespace
-
-AuctionRunner::BidState::BidState() = default;
-
-AuctionRunner::BidState::~BidState() {
-  if (trace_id.has_value())
-    EndTracing();
-}
-
-AuctionRunner::BidState::BidState(BidState&&) = default;
-
-void AuctionRunner::BidState::BeginTracing() {
-  DCHECK(!trace_id.has_value());
-
-  trace_id = base::trace_event::GetNextGlobalTraceId();
-
-  const blink::InterestGroup& interest_group = bidder.interest_group;
-  TRACE_EVENT_NESTABLE_ASYNC_BEGIN2("fledge", "bid", *trace_id, "bidding_url",
-                                    interest_group.bidding_url,
-                                    "interest_group_name", interest_group.name);
-}
-
-void AuctionRunner::BidState::EndTracing() {
-  DCHECK(trace_id.has_value());
-
-  TRACE_EVENT_NESTABLE_ASYNC_END0("fledge", "bid", *trace_id);
-  trace_id = absl::nullopt;
-}
-
-AuctionRunner::Bid::Bid(std::string ad_metadata,
-                        double bid,
-                        GURL render_url,
-                        std::vector<GURL> ad_components,
-                        base::TimeDelta bid_duration,
-                        absl::optional<uint32_t> bidding_signals_data_version,
-                        const blink::InterestGroup::Ad* bid_ad,
-                        BidState* bid_state,
-                        Auction* auction)
-    : ad_metadata(std::move(ad_metadata)),
-      bid(bid),
-      render_url(std::move(render_url)),
-      ad_components(std::move(ad_components)),
-      bid_duration(bid_duration),
-      bidding_signals_data_version(bidding_signals_data_version),
-      interest_group(&bid_state->bidder.interest_group),
-      bid_ad(bid_ad),
-      bid_state(bid_state),
-      auction(auction) {
-  DCHECK(IsValidBid(bid));
-}
-
-AuctionRunner::Bid::Bid(Bid&) = default;
-
-AuctionRunner::Bid::~Bid() = default;
-
-AuctionRunner::ScoredBid::ScoredBid(
-    double score,
-    absl::optional<uint32_t> scoring_signals_data_version,
-    std::unique_ptr<Bid> bid,
-    auction_worklet::mojom::ComponentAuctionModifiedBidParamsPtr
-        component_auction_modified_bid_params)
-    : score(score),
-      scoring_signals_data_version(scoring_signals_data_version),
-      bid(std::move(bid)),
-      component_auction_modified_bid_params(
-          std::move(component_auction_modified_bid_params)) {
-  DCHECK_GT(score, 0);
-}
-
-AuctionRunner::ScoredBid::~ScoredBid() = default;
-
-AuctionRunner::Auction::Auction(
-    const blink::AuctionConfig* config,
-    const Auction* parent,
-    AuctionWorkletManager* auction_worklet_manager,
-    InterestGroupManagerImpl* interest_group_manager,
-    base::Time auction_start_time)
-    : trace_id_(base::trace_event::GetNextGlobalTraceId()),
-      auction_worklet_manager_(auction_worklet_manager),
-      interest_group_manager_(interest_group_manager),
-      config_(config),
-      parent_(parent),
-      auction_start_time_(auction_start_time) {
-  TRACE_EVENT_NESTABLE_ASYNC_BEGIN1("fledge", "auction", trace_id_,
-                                    "decision_logic_url",
-                                    config_->decision_logic_url);
-
-  for (const auto& component_auction_config :
-       config->non_shared_params.component_auctions) {
-    // Nested component auctions are not supported.
-    DCHECK(!parent_);
-    component_auctions_.emplace_back(std::make_unique<Auction>(
-        &component_auction_config, /*parent=*/this, auction_worklet_manager,
-        interest_group_manager, auction_start_time));
-  }
-}
-
-AuctionRunner::Auction::~Auction() {
-  TRACE_EVENT_NESTABLE_ASYNC_END0("fledge", "auction", trace_id_);
-
-  if (!final_auction_result_)
-    final_auction_result_ = AuctionResult::kAborted;
-
-  // TODO(mmenke): Record histograms for component auctions.
-  if (!parent_) {
-    UMA_HISTOGRAM_ENUMERATION("Ads.InterestGroup.Auction.Result",
-                              *final_auction_result_);
-
-    // Only record time of full auctions and aborts.
-    switch (*final_auction_result_) {
-      case AuctionResult::kAborted:
-        UMA_HISTOGRAM_MEDIUM_TIMES("Ads.InterestGroup.Auction.AbortTime",
-                                   base::Time::Now() - auction_start_time_);
-        break;
-      case AuctionResult::kNoBids:
-      case AuctionResult::kAllBidsRejected:
-        UMA_HISTOGRAM_MEDIUM_TIMES(
-            "Ads.InterestGroup.Auction.CompletedWithoutWinnerTime",
-            base::Time::Now() - auction_start_time_);
-        break;
-      case AuctionResult::kSuccess:
-        UMA_HISTOGRAM_MEDIUM_TIMES(
-            "Ads.InterestGroup.Auction.AuctionWithWinnerTime",
-            base::Time::Now() - auction_start_time_);
-        break;
-      default:
-        break;
-    }
-  }
-}
-
-void AuctionRunner::Auction::StartLoadInterestGroupsPhase(
-    IsInterestGroupApiAllowedCallback is_interest_group_api_allowed_callback,
-    AuctionPhaseCompletionCallback load_interest_groups_phase_callback) {
-  DCHECK(is_interest_group_api_allowed_callback);
-  DCHECK(load_interest_groups_phase_callback);
-  DCHECK(bid_states_.empty());
-  DCHECK(!load_interest_groups_phase_callback_);
-  DCHECK(!bidding_and_scoring_phase_callback_);
-  DCHECK(!reporting_phase_callback_);
-  DCHECK(!final_auction_result_);
-  DCHECK_EQ(num_pending_loads_, 0u);
-
-  TRACE_EVENT_NESTABLE_ASYNC_BEGIN0("fledge", "load_groups_phase", trace_id_);
-
-  load_interest_groups_phase_callback_ =
-      std::move(load_interest_groups_phase_callback);
-
-  // If the seller can't participate in the auction, fail the auction.
-  if (!is_interest_group_api_allowed_callback.Run(
-          ContentBrowserClient::InterestGroupApiOperation::kSell,
-          config_->seller)) {
-    base::SequencedTaskRunnerHandle::Get()->PostTask(
-        FROM_HERE,
-        base::BindOnce(&Auction::OnStartLoadInterestGroupsPhaseComplete,
-                       weak_ptr_factory_.GetWeakPtr(),
-                       AuctionResult::kSellerRejected));
-    return;
-  }
-
-  for (auto component_auction = component_auctions_.begin();
-       component_auction != component_auctions_.end(); ++component_auction) {
-    (*component_auction)
-        ->StartLoadInterestGroupsPhase(
-            is_interest_group_api_allowed_callback,
-            base::BindOnce(&Auction::OnComponentInterestGroupsRead,
-                           weak_ptr_factory_.GetWeakPtr(), component_auction));
-    ++num_pending_loads_;
-  }
-
-  if (config_->non_shared_params.interest_group_buyers) {
-    for (const auto& buyer :
-         *config_->non_shared_params.interest_group_buyers) {
-      if (!is_interest_group_api_allowed_callback.Run(
-              ContentBrowserClient::InterestGroupApiOperation::kBuy, buyer)) {
-        continue;
-      }
-      interest_group_manager_->GetInterestGroupsForOwner(
-          buyer, base::BindOnce(&Auction::OnInterestGroupRead,
-                                weak_ptr_factory_.GetWeakPtr()));
-      ++num_pending_loads_;
-    }
-  }
-
-  // Fail if there are no pending loads.
-  if (num_pending_loads_ == 0) {
-    base::SequencedTaskRunnerHandle::Get()->PostTask(
-        FROM_HERE,
-        base::BindOnce(&Auction::OnStartLoadInterestGroupsPhaseComplete,
-                       weak_ptr_factory_.GetWeakPtr(),
-                       AuctionResult::kNoInterestGroups));
-  }
-}
-
-void AuctionRunner::Auction::StartBiddingAndScoringPhase(
-    base::OnceClosure on_seller_receiver_callback,
-    AuctionPhaseCompletionCallback bidding_and_scoring_phase_callback) {
-  DCHECK(bidding_and_scoring_phase_callback);
-  DCHECK(!bid_states_.empty() || !component_auctions_.empty());
-  DCHECK(!on_seller_receiver_callback_);
-  DCHECK(!load_interest_groups_phase_callback_);
-  DCHECK(!bidding_and_scoring_phase_callback_);
-  DCHECK(!reporting_phase_callback_);
-  DCHECK(!final_auction_result_);
-  DCHECK(!top_bid_);
-  DCHECK_EQ(pending_component_seller_worklet_requests_, 0u);
-
-  TRACE_EVENT_NESTABLE_ASYNC_BEGIN0("fledge", "bidding_and_scoring_phase",
-                                    trace_id_);
-
-  on_seller_receiver_callback_ = std::move(on_seller_receiver_callback);
-  bidding_and_scoring_phase_callback_ =
-      std::move(bidding_and_scoring_phase_callback);
-
-  num_bids_not_sent_to_seller_worklet_ =
-      bid_states_.size() + component_auctions_.size();
-  outstanding_bids_ = num_bids_not_sent_to_seller_worklet_;
-
-  // Need to start loading worklets before any bids can be generated or scored.
-
-  if (component_auctions_.empty()) {
-    // If there are no component auctions, request the seller worklet.
-    // Otherwise, the seller worklet will be requested once all component
-    // auctions have received their own seller worklets.
-    RequestSellerWorklet();
-  } else {
-    // Since component auctions may invoke OnComponentSellerWorkletReceived()
-    // synchronously, it's important to set this to the total number of
-    // component auctions before invoking StartBiddingAndScoringPhase() on any
-    // component auction.
-    pending_component_seller_worklet_requests_ = component_auctions_.size();
-    for (auto& component_auction : component_auctions_) {
-      component_auction->StartBiddingAndScoringPhase(
-          base::BindOnce(&Auction::OnComponentSellerWorkletReceived,
-                         base::Unretained(this)),
-          base::BindOnce(&Auction::OnComponentAuctionComplete,
-                         base::Unretained(this), component_auction.get()));
-    }
-  }
-  RequestBidderWorklets();
-}
-
-void AuctionRunner::Auction::StartReportingPhase(
-    absl::optional<std::string> top_seller_signals,
-    AuctionPhaseCompletionCallback reporting_phase_callback) {
-  DCHECK(reporting_phase_callback);
-  DCHECK(!load_interest_groups_phase_callback_);
-  DCHECK(!bidding_and_scoring_phase_callback_);
-  DCHECK(!reporting_phase_callback_);
-  DCHECK(!final_auction_result_);
-  DCHECK(top_bid_);
-
-  TRACE_EVENT_NESTABLE_ASYNC_BEGIN0("fledge", "reporting_phase", trace_id_);
-
-  reporting_phase_callback_ = std::move(reporting_phase_callback);
-
-  // Component auctions unload their seller worklets on completion, so need to
-  // reload the seller worklet in the case of a component auction.
-  if (!seller_worklet_handle_) {
-    DCHECK(parent_);
-    DCHECK(top_seller_signals);
-    if (!auction_worklet_manager_->RequestSellerWorklet(
-            config_->decision_logic_url, config_->trusted_scoring_signals_url,
-            config_->seller_experiment_group_id,
-            base::BindOnce(&Auction::ReportSellerResult, base::Unretained(this),
-                           top_seller_signals),
-            base::BindOnce(&Auction::OnWinningComponentSellerWorkletFatalError,
-                           base::Unretained(this)),
-            seller_worklet_handle_)) {
-      return;
-    }
-  } else {
-    DCHECK(!parent_);
-    DCHECK(!top_seller_signals);
-  }
-  ReportSellerResult(std::move(top_seller_signals));
-}
-
-void AuctionRunner::Auction::ClosePipes() {
-  // This is needed in addition to closing worklet pipes since the callbacks
-  // passed to Mojo aren't currently cancellable.
-  weak_ptr_factory_.InvalidateWeakPtrs();
-
-  for (BidState& bid_state : bid_states_) {
-    bid_state.worklet_handle.reset();
-  }
-  seller_worklet_handle_.reset();
-
-  // Close pipes for component auctions as well.
-  for (auto& component_auction : component_auctions_) {
-    component_auction->ClosePipes();
-  }
-}
-
-void AuctionRunner::Auction::GetInterestGroupsThatBid(
-    blink::InterestGroupSet& interest_groups) const {
-  if (!all_bids_scored_)
-    return;
-
-  for (const BidState& bid_state : bid_states_) {
-    if (bid_state.made_bid) {
-      interest_groups.emplace(bid_state.bidder.interest_group.owner,
-                              bid_state.bidder.interest_group.name);
-    }
-  }
-
-  // Retrieve data from component auctions as well.
-  for (auto& component_auction : component_auctions_) {
-    component_auction->GetInterestGroupsThatBid(interest_groups);
-  }
-}
-
-GURL AuctionRunner::Auction::FillPostAuctionSignals(
-    const GURL& url,
-    const PostAuctionSignals& signals,
-    const absl::optional<PostAuctionSignals>& top_level_signals) {
-  // TODO(qingxinwu): Round `winning_bid` and `highest_scoring_other_bid` to two
-  // most-significant digits. Maybe same to corresponding browser signals of
-  // reportWin()/reportResult().
-  std::string url_string = url.spec();
-  base::ReplaceSubstringsAfterOffset(
-      &url_string, 0, base::EscapeExternalHandlerValue("${winningBid}"),
-      base::NumberToString(signals.winning_bid));
-  base::ReplaceSubstringsAfterOffset(
-      &url_string, 0, base::EscapeExternalHandlerValue("${madeWinningBid}"),
-      signals.made_winning_bid ? "true" : "false");
-  base::ReplaceSubstringsAfterOffset(
-      &url_string, 0,
-      base::EscapeExternalHandlerValue("${highestScoringOtherBid}"),
-      base::NumberToString(signals.highest_scoring_other_bid));
-  base::ReplaceSubstringsAfterOffset(
-      &url_string, 0,
-      base::EscapeExternalHandlerValue("${madeHighestScoringOtherBid}"),
-      signals.made_highest_scoring_other_bid ? "true" : "false");
-
-  // For component auction sellers only, which get post auction signals from
-  // both their own component auctions and top level auction.
-  // For now, we're assuming top level auctions to be first-price auction only
-  // (not second-price auction) and it does not need highest_scoring_other_bid.
-  if (top_level_signals.has_value()) {
-    base::ReplaceSubstringsAfterOffset(
-        &url_string, 0,
-        base::EscapeExternalHandlerValue("${topLevelWinningBid}"),
-        base::NumberToString(top_level_signals->winning_bid));
-    base::ReplaceSubstringsAfterOffset(
-        &url_string, 0,
-        base::EscapeExternalHandlerValue("${topLevelMadeWinningBid}"),
-        top_level_signals->made_winning_bid ? "true" : "false");
-  }
-
-  return GURL(url_string);
-}
-
-void AuctionRunner::Auction::TakeDebugReportUrls(
-    std::vector<GURL>& debug_win_report_urls,
-    std::vector<GURL>& debug_loss_report_urls) {
-  if (!all_bids_scored_)
-    return;
-
-  // Set `winner` to the element of `bid_states_` that won the entire auction,
-  // if there is one.
-  //
-  // In a component auction, the highest bid may have lost the top-level
-  // auction, and we want to report that as a loss. In this case, AuctionResult
-  // will be kComponentLostAuction.
-  //
-  // Also for the top-level auction in the case a component auctions bid won,
-  // the highest bid's BidState and its reporting URLs are stored with the
-  // component auction, so the component auction will be the one populate
-  // `debug_win_report_urls`.
-  BidState* winner = nullptr;
-  if (final_auction_result_ == AuctionResult::kSuccess &&
-      top_bid_->bid->auction == this) {
-    winner = top_bid_->bid->bid_state;
-  }
-
-  // `signals` includes post auction signals from current auction.
-  PostAuctionSignals signals;
-  signals.winning_bid = top_bid_ ? top_bid_->bid->bid : 0.0;
-  signals.highest_scoring_other_bid = highest_scoring_other_bid_;
-  // `top_level_signals` includes post auction signals from top level auction.
-  // Will only will be used in debug report URLs of top level seller and
-  // component sellers.
-  // For now, we're assuming top level auctions to be first-price auction only
-  // (not second-price auction) and it does not need highest_scoring_other_bid.
-  absl::optional<PostAuctionSignals> top_level_signals;
-  if (parent_) {
-    top_level_signals = PostAuctionSignals();
-    top_level_signals->winning_bid =
-        parent_->top_bid_ ? parent_->top_bid_->bid->bid : 0.0;
-  }
-
-  if (!top_bid_) {
-    DCHECK_EQ(highest_scoring_other_bid_, 0);
-    DCHECK(!highest_scoring_other_bid_owner_.has_value());
-  }
-
-  for (BidState& bid_state : bid_states_) {
-    const url::Origin& owner = bid_state.bidder.interest_group.owner;
-    if (top_bid_)
-      signals.made_winning_bid = owner == top_bid_->bid->interest_group->owner;
-
-    if (highest_scoring_other_bid_owner_.has_value()) {
-      DCHECK_GT(highest_scoring_other_bid_, 0);
-      signals.made_highest_scoring_other_bid =
-          owner == highest_scoring_other_bid_owner_.value();
-    }
-    if (parent_ && parent_->top_bid_) {
-      top_level_signals->made_winning_bid =
-          owner == parent_->top_bid_->bid->interest_group->owner;
-    }
-
-    if (&bid_state == winner) {
-      if (winner->bidder_debug_win_report_url.has_value()) {
-        debug_win_report_urls.emplace_back(FillPostAuctionSignals(
-            std::move(winner->bidder_debug_win_report_url).value(), signals));
-      }
-      if (winner->seller_debug_win_report_url.has_value()) {
-        debug_win_report_urls.emplace_back(FillPostAuctionSignals(
-            std::move(winner->seller_debug_win_report_url).value(), signals,
-            top_level_signals));
-      }
-      // `top_level_signals` is passed as parameter `signals` for top level
-      // seller.
-      if (winner->top_level_seller_debug_win_report_url.has_value()) {
-        debug_win_report_urls.emplace_back(FillPostAuctionSignals(
-            std::move(winner->top_level_seller_debug_win_report_url).value(),
-            top_level_signals.value()));
-      }
-      continue;
-    }
-    if (bid_state.bidder_debug_loss_report_url.has_value()) {
-      // Losing bidders should not get highest_scoring_other_bid and
-      // made_highest_scoring_other_bid signals.
-      debug_loss_report_urls.emplace_back(FillPostAuctionSignals(
-          std::move(bid_state.bidder_debug_loss_report_url).value(),
-          PostAuctionSignals(signals.winning_bid, signals.made_winning_bid, 0.0,
-                             false)));
-    }
-    if (bid_state.seller_debug_loss_report_url.has_value()) {
-      debug_loss_report_urls.emplace_back(FillPostAuctionSignals(
-          std::move(bid_state.seller_debug_loss_report_url).value(), signals,
-          top_level_signals));
-    }
-    // `top_level_signals` is passed as parameter `signals` for top level
-    // seller.
-    if (bid_state.top_level_seller_debug_loss_report_url.has_value()) {
-      debug_loss_report_urls.emplace_back(FillPostAuctionSignals(
-          std::move(bid_state.top_level_seller_debug_loss_report_url).value(),
-          top_level_signals.value()));
-    }
-  }
-
-  // Retrieve data from component auctions as well.
-  for (auto& component_auction : component_auctions_) {
-    component_auction->TakeDebugReportUrls(debug_win_report_urls,
-                                           debug_loss_report_urls);
-  }
-}
-
-std::vector<GURL> AuctionRunner::Auction::TakeReportUrls() {
-  DCHECK_EQ(*final_auction_result_, AuctionResult::kSuccess);
-
-  // Retrieve data from winning component auction as well, if a bid from a
-  // component auction won.
-  if (top_bid_->bid->auction != this) {
-    std::vector<GURL> nested_report_urls =
-        top_bid_->bid->auction->TakeReportUrls();
-    report_urls_.insert(report_urls_.begin(), nested_report_urls.begin(),
-                        nested_report_urls.end());
-  }
-  return std::move(report_urls_);
-}
-
-std::vector<std::string> AuctionRunner::Auction::TakeErrors() {
-  for (auto& component_auction : component_auctions_) {
-    std::vector<std::string> errors = component_auction->TakeErrors();
-    errors_.insert(errors_.begin(), errors.begin(), errors.end());
-  }
-  return std::move(errors_);
-}
-
-void AuctionRunner::Auction::TakePostAuctionUpdateOwners(
-    std::vector<url::Origin>& owners) {
-  for (const url::Origin& owner : post_auction_update_owners_) {
-    owners.emplace_back(std::move(owner));
-  }
-
-  for (auto& component_auction : component_auctions_) {
-    component_auction->TakePostAuctionUpdateOwners(owners);
-  }
-}
-
-AuctionRunner::ScoredBid* AuctionRunner::Auction::top_bid() {
-  DCHECK(all_bids_scored_);
-  DCHECK(top_bid_);
-  return top_bid_.get();
-}
-
-void AuctionRunner::Auction::OnInterestGroupRead(
-    std::vector<StorageInterestGroup> interest_groups) {
-  ++num_owners_loaded_;
-  if (interest_groups.empty()) {
-    OnOneLoadCompleted();
-    return;
-  }
-  const url::Origin& owner = interest_groups[0].interest_group.owner;
-  post_auction_update_owners_.push_back(owner);
-  for (const auto& bidder : interest_groups) {
-    // Report freshness metrics.
-    if (bidder.interest_group.daily_update_url.has_value()) {
-      UMA_HISTOGRAM_CUSTOM_COUNTS(
-          "Ads.InterestGroup.Auction.GroupFreshness.WithDailyUpdates",
-          (base::Time::Now() - bidder.last_updated).InMinutes(),
-          kGroupFreshnessMin.InMinutes(), kGroupFreshnessMax.InMinutes(),
-          kGroupFreshnessBuckets);
-    } else {
-      UMA_HISTOGRAM_CUSTOM_COUNTS(
-          "Ads.InterestGroup.Auction.GroupFreshness.NoDailyUpdates",
-          (base::Time::Now() - bidder.last_updated).InMinutes(),
-          kGroupFreshnessMin.InMinutes(), kGroupFreshnessMax.InMinutes(),
-          kGroupFreshnessBuckets);
-    }
-  }
-
-  // Ignore interest groups with no bidding script or no ads.
-  interest_groups.erase(
-      std::remove_if(interest_groups.begin(), interest_groups.end(),
-                     [](const StorageInterestGroup& bidder) {
-                       return !bidder.interest_group.bidding_url ||
-                              bidder.interest_group.ads->empty();
-                     }),
-      interest_groups.end());
-
-  // If there are no interest groups with both a bidding script and ads, nothing
-  // else to do.
-  if (interest_groups.empty()) {
-    OnOneLoadCompleted();
-    return;
-  }
-
-  // Only count owners with interest groups theoretically capable of making
-  // bids as participating in this auction.
-  ++num_owners_with_interest_groups_;
-
-  size_t size_limit = config_->non_shared_params.all_buyers_group_limit;
-  const auto limit_iter =
-      config_->non_shared_params.per_buyer_group_limits.find(owner);
-  if (limit_iter != config_->non_shared_params.per_buyer_group_limits.cend()) {
-    size_limit = static_cast<size_t>(limit_iter->second);
-  }
-  size_limit = std::min(interest_groups.size(), size_limit);
-  if (size_limit == 0) {
-    OnOneLoadCompleted();
-    return;
-  }
-
-  StorageInterestGroupDescByPriority cmp;
-  std::sort(interest_groups.begin(), interest_groups.end(), cmp);
-  // Randomize order of interest groups with lowest allowed priority. This
-  // effectively performs a random sample among interest groups with the same
-  // priority.
-  double min_priority = interest_groups[size_limit - 1].interest_group.priority;
-  auto rand_begin = std::lower_bound(interest_groups.begin(),
-                                     interest_groups.end(), min_priority, cmp);
-  auto rand_end =
-      std::upper_bound(rand_begin, interest_groups.end(), min_priority, cmp);
-  base::RandomShuffle(rand_begin, rand_end);
-  interest_groups.resize(size_limit);
-
-  // Set up remaining interest groups to generate bids.
-  for (auto& bidder : interest_groups) {
-    bid_states_.emplace_back();
-    bid_states_.back().bidder = std::move(bidder);
-  }
-  OnOneLoadCompleted();
-}
-
-void AuctionRunner::Auction::OnComponentInterestGroupsRead(
-    AuctionList::iterator component_auction,
-    bool success) {
-  num_owners_loaded_ += (*component_auction)->num_owners_loaded_;
-  num_owners_with_interest_groups_ +=
-      (*component_auction)->num_owners_with_interest_groups_;
-
-  // Erase component auctions that failed to load anything, so they won't be
-  // invoked in the generate bid phase. This is not a problem in the reporting
-  // phase, as the top-level auction knows which component auction, if any, won.
-  if (!success)
-    component_auctions_.erase(component_auction);
-  OnOneLoadCompleted();
-}
-
-void AuctionRunner::Auction::OnOneLoadCompleted() {
-  DCHECK_GT(num_pending_loads_, 0u);
-  --num_pending_loads_;
-
-  // Wait for more buyers to be loaded, if there are still some pending.
-  if (num_pending_loads_ > 0)
-    return;
-
-  // Record histograms about the interest groups participating in the auction.
-  // TODO(mmenke): Record histograms for component auctions.
-  if (!parent_) {
-    // Only record histograms if there were interest groups that could
-    // theoretically participate in the auction.
-    if (num_owners_loaded_ > 0) {
-      int num_interest_groups = bid_states_.size();
-      size_t num_sellers_with_bidders = 0;
-      for (auto& component_auction : component_auctions_) {
-        // This double-counts interest groups that are participating in multiple
-        // auctions.
-        num_interest_groups += component_auction->bid_states_.size();
-        ++num_sellers_with_bidders;
-      }
-      // If the top-level seller either has interest groups itself, or any of
-      // the component auctions do, then the top-level seller also has bidders.
-      if (num_interest_groups)
-        ++num_sellers_with_bidders;
-
-      UMA_HISTOGRAM_COUNTS_1000("Ads.InterestGroup.Auction.NumInterestGroups",
-                                num_interest_groups);
-      UMA_HISTOGRAM_COUNTS_100(
-          "Ads.InterestGroup.Auction.NumOwnersWithInterestGroups",
-          num_owners_with_interest_groups_);
-
-      UMA_HISTOGRAM_COUNTS_100(
-          "Ads.InterestGroup.Auction.NumSellersWithBidders",
-          num_sellers_with_bidders);
-    }
-  }
-
-  // If there are no bidders in this auction and no component auctions with
-  // bidders, either, fail the auction.
-  if (bid_states_.empty() && component_auctions_.empty()) {
-    OnStartLoadInterestGroupsPhaseComplete(AuctionResult::kNoInterestGroups);
-    return;
-  }
-
-  // There are bidders that can generate bids, so complete without a final
-  // result.
-  OnStartLoadInterestGroupsPhaseComplete(
-      /*auction_result=*/AuctionResult::kSuccess);
-}
-
-void AuctionRunner::Auction::OnStartLoadInterestGroupsPhaseComplete(
-    AuctionResult auction_result) {
-  DCHECK(load_interest_groups_phase_callback_);
-  DCHECK(!final_auction_result_);
-
-  TRACE_EVENT_NESTABLE_ASYNC_END0("fledge", "load_groups_phase", trace_id_);
-
-  // `final_auction_result_` should only be set to kSuccess when the entire
-  // auction is complete.
-  bool success = auction_result == AuctionResult::kSuccess;
-  if (!success)
-    final_auction_result_ = auction_result;
-  std::move(load_interest_groups_phase_callback_).Run(success);
-}
-
-void AuctionRunner::Auction::OnComponentSellerWorkletReceived() {
-  DCHECK_GT(pending_component_seller_worklet_requests_, 0u);
-  --pending_component_seller_worklet_requests_;
-  if (pending_component_seller_worklet_requests_ == 0)
-    RequestSellerWorklet();
-}
-
-void AuctionRunner::Auction::RequestSellerWorklet() {
-  TRACE_EVENT_NESTABLE_ASYNC_BEGIN0("fledge", "request_seller_worklet",
-                                    trace_id_);
-  if (auction_worklet_manager_->RequestSellerWorklet(
-          config_->decision_logic_url, config_->trusted_scoring_signals_url,
-          config_->seller_experiment_group_id,
-          base::BindOnce(&Auction::OnSellerWorkletReceived,
-                         base::Unretained(this)),
-          base::BindOnce(&Auction::OnSellerWorkletFatalError,
-                         base::Unretained(this)),
-          seller_worklet_handle_)) {
-    OnSellerWorkletReceived();
-  }
-}
-
-void AuctionRunner::Auction::OnSellerWorkletReceived() {
-  DCHECK(!seller_worklet_received_);
-
-  TRACE_EVENT_NESTABLE_ASYNC_END0("fledge", "request_seller_worklet",
-                                  trace_id_);
-
-  if (on_seller_receiver_callback_)
-    std::move(on_seller_receiver_callback_).Run();
-
-  seller_worklet_received_ = true;
-
-  auto unscored_bids = std::move(unscored_bids_);
-  for (auto& unscored_bid : unscored_bids) {
-    TRACE_EVENT_NESTABLE_ASYNC_END0("fledge", "Wait_for_seller_worklet",
-                                    *unscored_bid->bid_state->trace_id);
-    ScoreBidIfReady(std::move(unscored_bid));
-  }
-  // No more unscored bids should be added, once the seller worklet has been
-  // received.
-  DCHECK(unscored_bids_.empty());
-}
-
-void AuctionRunner::Auction::RequestBidderWorklets() {
-  // Request processes for all bidder worklets.
-  for (auto& bid_state : bid_states_) {
-    if (RequestBidderWorklet(
-            bid_state,
-            base::BindOnce(&Auction::OnBidderWorkletReceived,
-                           base::Unretained(this), &bid_state),
-            base::BindOnce(&Auction::OnBidderWorkletGenerateBidFatalError,
-                           base::Unretained(this), &bid_state))) {
-      OnBidderWorkletReceived(&bid_state);
-    }
-  }
-}
-
-void AuctionRunner::Auction::OnSellerWorkletFatalError(
-    AuctionWorkletManager::FatalErrorType fatal_error_type,
-    const std::vector<std::string>& errors) {
-  AuctionResult result;
-  switch (fatal_error_type) {
-    case AuctionWorkletManager::FatalErrorType::kScriptLoadFailed:
-      result = AuctionResult::kSellerWorkletLoadFailed;
-      break;
-    case AuctionWorkletManager::FatalErrorType::kWorkletCrash:
-      result = AuctionResult::kSellerWorkletCrashed;
-      break;
-  }
-
-  // The seller worklet can crash in either the bidding or selling phase. Call
-  // the appropriate method depending on the current phase.
-  if (bidding_and_scoring_phase_callback_) {
-    OnBiddingAndScoringComplete(result, errors);
-    return;
-  }
-  OnReportingPhaseComplete(result, errors);
-}
-
-void AuctionRunner::Auction::OnBidderWorkletReceived(BidState* bid_state) {
-  const blink::InterestGroup& interest_group = bid_state->bidder.interest_group;
-
-  bid_state->BeginTracing();
-  TRACE_EVENT_NESTABLE_ASYNC_BEGIN0("fledge", "bidder_worklet_generate_bid",
-                                    *bid_state->trace_id);
-
-  bid_state->worklet_handle->GetBidderWorklet()->GenerateBid(
-      auction_worklet::mojom::BidderWorkletNonSharedParams::New(
-          interest_group.name, interest_group.daily_update_url,
-          interest_group.trusted_bidding_signals_keys,
-          interest_group.user_bidding_signals, interest_group.ads,
-          interest_group.ad_components),
-      config_->non_shared_params.auction_signals, PerBuyerSignals(bid_state),
-      PerBuyerTimeout(bid_state), config_->seller,
-      parent_ ? parent_->config_->seller : absl::optional<url::Origin>(),
-      bid_state->bidder.bidding_browser_signals.Clone(), auction_start_time_,
-      *bid_state->trace_id,
-      base::BindOnce(&Auction::OnGenerateBidComplete,
-                     weak_ptr_factory_.GetWeakPtr(), bid_state));
-
-  // Invoke SendPendingSignalsRequests() asynchronously, if necessary. Do this
-  // asynchronously so that all GenerateBid() calls that share a BidderWorklet
-  // will have been invoked before the first SendPendingSignalsRequests() call.
-  //
-  // This relies on AuctionWorkletManager::Handle invoking all the callbacks
-  // listening for creation of the same BidderWorklet synchronously.
-  if (interest_group.trusted_bidding_signals_keys &&
-      interest_group.trusted_bidding_signals_keys->size() > 0) {
-    base::SequencedTaskRunnerHandle::Get()->PostTask(
-        FROM_HERE, base::BindOnce(&Auction::SendPendingSignalsRequestsForBidder,
-                                  weak_ptr_factory_.GetWeakPtr(), bid_state));
-  }
-}
-
-void AuctionRunner::Auction::SendPendingSignalsRequestsForBidder(
-    BidState* bid_state) {
-  // Don't invoke callback if worklet was unloaded in the meantime.
-  if (bid_state->worklet_handle)
-    bid_state->worklet_handle->GetBidderWorklet()->SendPendingSignalsRequests();
-}
-
-void AuctionRunner::Auction::OnBidderWorkletGenerateBidFatalError(
-    BidState* bid_state,
-    AuctionWorkletManager::FatalErrorType fatal_error_type,
-    const std::vector<std::string>& errors) {
-  if (fatal_error_type ==
-      AuctionWorkletManager::FatalErrorType::kWorkletCrash) {
-    // Ignore default error message in case of crash. Instead, use a more
-    // specific one.
-    OnGenerateBidComplete(
-        bid_state, auction_worklet::mojom::BidderWorkletBidPtr(),
-        /*bidding_signals_data_version=*/0,
-        /*has_bidding_signals_data_version=*/false,
-        /*debug_loss_report_url=*/absl::nullopt,
-        /*debug_win_report_url=*/absl::nullopt,
-        /*set_priority=*/0,
-        /*has_set_priority=*/false,
-        {base::StrCat({bid_state->bidder.interest_group.bidding_url->spec(),
-                       " crashed while trying to run generateBid()."})});
-    return;
-  }
-
-  // Otherwise, use error message from the worklet.
-  OnGenerateBidComplete(bid_state,
-                        auction_worklet::mojom::BidderWorkletBidPtr(),
-                        /*bidding_signals_data_version=*/0,
-                        /*has_bidding_signals_data_version=*/false,
-                        /*debug_loss_report_url=*/absl::nullopt,
-                        /*debug_win_report_url=*/absl::nullopt,
-                        /*set_priority=*/0, /*has_set_priority=*/false, errors);
-}
-
-void AuctionRunner::Auction::OnGenerateBidComplete(
-    BidState* state,
-    auction_worklet::mojom::BidderWorkletBidPtr mojo_bid,
-    uint32_t bidding_signals_data_version,
-    bool has_bidding_signals_data_version,
-    const absl::optional<GURL>& debug_loss_report_url,
-    const absl::optional<GURL>& debug_win_report_url,
-    double set_priority,
-    bool has_set_priority,
-    const std::vector<std::string>& errors) {
-  DCHECK(!state->made_bid);
-  DCHECK_GT(num_bids_not_sent_to_seller_worklet_, 0);
-  DCHECK_GT(outstanding_bids_, 0);
-
-  TRACE_EVENT_NESTABLE_ASYNC_END0("fledge", "bidder_worklet_generate_bid",
-                                  *state->trace_id);
-
-  absl::optional<uint32_t> maybe_bidding_signals_data_version;
-  if (has_bidding_signals_data_version)
-    maybe_bidding_signals_data_version = bidding_signals_data_version;
-
-  if (has_set_priority) {
-    interest_group_manager_->SetInterestGroupPriority(
-        blink::InterestGroupKey(state->bidder.interest_group.owner,
-                                state->bidder.interest_group.name),
-        set_priority);
-  }
-
-  errors_.insert(errors_.end(), errors.begin(), errors.end());
-
-  // Release the worklet. If it wins the auction, it will be requested again to
-  // invoke its ReportWin() method.
-  state->worklet_handle.reset();
-
-  // Ignore invalid bids.
-  std::unique_ptr<Bid> bid;
-  std::string ad_metadata;
-  // `mojo_bid` is null if the worklet doesn't bid, or if the bidder worklet
-  // fails to load / crashes.
-  if (mojo_bid) {
-    bid = TryToCreateBid(std::move(mojo_bid), *state,
-                         maybe_bidding_signals_data_version,
-                         debug_loss_report_url, debug_win_report_url);
-    if (bid)
-      state->bidder_debug_loss_report_url = std::move(debug_loss_report_url);
-  } else {
-    // Bidders who do not bid are allowed to get loss report.
-    state->bidder_debug_loss_report_url = std::move(debug_loss_report_url);
-  }
-
-  if (!bid) {
-    state->EndTracing();
-    OnNoBid();
-    return;
-  }
-
-  state->bidder_debug_win_report_url = std::move(debug_win_report_url);
-  state->made_bid = true;
-  ScoreBidIfReady(std::move(bid));
-}
-
-void AuctionRunner::Auction::OnComponentAuctionComplete(
-    Auction* component_auction,
-    bool success) {
-  if (!success) {
-    OnNoBid();
-    return;
-  }
-
-  // Create a copy of component Auction's bid, replacing values as necessary.
-  const Bid* component_bid = component_auction->top_bid()->bid.get();
-  const auto* modified_bid_params =
-      component_auction->top_bid()->component_auction_modified_bid_params.get();
-  DCHECK(modified_bid_params);
-
-  // Create a new event for the bid, since the component auction's event for it
-  // ended after the component auction scored the bid.
-  component_bid->bid_state->BeginTracing();
-
-  ScoreBidIfReady(std::make_unique<Bid>(
-      modified_bid_params->ad,
-      modified_bid_params->has_bid ? modified_bid_params->bid
-                                   : component_bid->bid,
-      component_bid->render_url, component_bid->ad_components,
-      component_bid->bid_duration, component_bid->bidding_signals_data_version,
-      component_bid->bid_ad, component_bid->bid_state, component_bid->auction));
-}
-
-void AuctionRunner::Auction::OnNoBid() {
-  --num_bids_not_sent_to_seller_worklet_;
-  --outstanding_bids_;
-
-  // If this is the only bid that yet to be sent to the seller worklet, and
-  // the seller worklet has loaded, then tell the seller worklet to send any
-  // pending scoring signals request to complete the auction more quickly.
-  if (num_bids_not_sent_to_seller_worklet_ == 0 && seller_worklet_received_)
-    seller_worklet_handle_->GetSellerWorklet()->SendPendingSignalsRequests();
-
-  MaybeCompleteBiddingAndScoringPhase();
-}
-
-void AuctionRunner::Auction::ScoreBidIfReady(std::unique_ptr<Bid> bid) {
-  DCHECK(bid);
-  DCHECK_GT(num_bids_not_sent_to_seller_worklet_, 0);
-  DCHECK_GT(outstanding_bids_, 0);
-  DCHECK(bid->bid_state->made_bid);
-
-  // If seller worklet hasn't been received yet, wait until it is.
-  if (!seller_worklet_received_) {
-    TRACE_EVENT_NESTABLE_ASYNC_BEGIN0("fledge", "wait_for_seller_worklet",
-                                      *bid->bid_state->trace_id);
-    unscored_bids_.emplace_back(std::move(bid));
-    return;
-  }
-
-  TRACE_EVENT_NESTABLE_ASYNC_BEGIN1(
-      "fledge", "seller_worklet_score_ad", *bid->bid_state->trace_id,
-      "decision_logic_url", config_->decision_logic_url);
-
-  Bid* bid_raw = bid.get();
-  seller_worklet_handle_->GetSellerWorklet()->ScoreAd(
-      bid_raw->ad_metadata, bid_raw->bid, config_->non_shared_params,
-      GetOtherSellerParam(*bid_raw), bid_raw->interest_group->owner,
-      bid_raw->render_url, bid_raw->ad_components,
-      bid_raw->bid_duration.InMilliseconds(), SellerTimeout(),
-      *bid_raw->bid_state->trace_id,
-      base::BindOnce(&Auction::OnBidScored, weak_ptr_factory_.GetWeakPtr(),
-                     std::move(bid)));
-
-  // If this was the last bid that needed to be passed to ScoreAd(), tell the
-  // SellerWorklet no more bids are coming, so it can send a request for any
-  // needed scoring signals now, if needed.
-  --num_bids_not_sent_to_seller_worklet_;
-  if (num_bids_not_sent_to_seller_worklet_ == 0) {
-    seller_worklet_handle_->GetSellerWorklet()->SendPendingSignalsRequests();
-  }
-}
-
-void AuctionRunner::Auction::OnBidScored(
-    std::unique_ptr<Bid> bid,
-    double score,
-    auction_worklet::mojom::ComponentAuctionModifiedBidParamsPtr
-        component_auction_modified_bid_params,
-    uint32_t data_version,
-    bool has_data_version,
-    const absl::optional<GURL>& debug_loss_report_url,
-    const absl::optional<GURL>& debug_win_report_url,
-    const std::vector<std::string>& errors) {
-  TRACE_EVENT_NESTABLE_ASYNC_END0("fledge", "seller_worklet_score_ad",
-                                  *bid->bid_state->trace_id);
-  bid->bid_state->EndTracing();
-
-  --outstanding_bids_;
-
-  // If `debug_loss_report_url` or `debug_win_report_url` is not a valid HTTPS
-  // URL, the auction should fail because the worklet is compromised.
-  if (debug_loss_report_url.has_value() &&
-      !IsUrlValid(debug_loss_report_url.value())) {
-    mojo::ReportBadMessage("Invalid seller debugging loss report URL");
-    OnBiddingAndScoringComplete(AuctionResult::kBadMojoMessage);
-    return;
-  }
-  if (debug_win_report_url.has_value() &&
-      !IsUrlValid(debug_win_report_url.value())) {
-    mojo::ReportBadMessage("Invalid seller debugging win report URL");
-    OnBiddingAndScoringComplete(AuctionResult::kBadMojoMessage);
-    return;
-  }
-  errors_.insert(errors_.end(), errors.begin(), errors.end());
-
-  // Use separate fields for component and top-level seller reports, so both can
-  // send debug reports.
-  if (bid->auction == this) {
-    bid->bid_state->seller_debug_loss_report_url =
-        std::move(debug_loss_report_url);
-    bid->bid_state->seller_debug_win_report_url =
-        std::move(debug_win_report_url);
-  } else {
-    bid->bid_state->top_level_seller_debug_loss_report_url =
-        std::move(debug_loss_report_url);
-    bid->bid_state->top_level_seller_debug_win_report_url =
-        std::move(debug_win_report_url);
-  }
-
-  // A score <= 0 means the seller rejected the bid.
-  if (score <= 0) {
-    MaybeCompleteBiddingAndScoringPhase();
-    return;
-  }
-
-  // If they accept a bid / return a positive score, component auction
-  // SellerWorklets must return a `component_auction_modified_bid_params`, and
-  // top-level auctions must not.
-  if (component_auction_modified_bid_params.is_null() != (parent_ == nullptr)) {
-    mojo::ReportBadMessage("Invalid component_auction_modified_bid_params");
-    OnBiddingAndScoringComplete(AuctionResult::kBadMojoMessage);
-    return;
-  }
-  // If a component seller modified the bid, the new bid must also be valid.
-  if (component_auction_modified_bid_params &&
-      component_auction_modified_bid_params->has_bid &&
-      !IsValidBid(component_auction_modified_bid_params->bid)) {
-    mojo::ReportBadMessage("Invalid component_auction_modified_bid_params bid");
-    OnBiddingAndScoringComplete(AuctionResult::kBadMojoMessage);
-    return;
-  }
-
-  bool is_top_bid = false;
-  const url::Origin& owner = bid->interest_group->owner;
-
-  if (!top_bid_ || score > top_bid_->score) {
-    // If there's no previous top bidder, or the bidder has the highest score,
-    // need to replace the previous top bidder.
-    is_top_bid = true;
-    if (top_bid_) {
-      OnNewHighestScoringOtherBid(top_bid_->score, top_bid_->bid->bid,
-                                  &top_bid_->bid->interest_group->owner);
-    }
-    num_top_bids_ = 1;
-    at_most_one_top_bid_owner_ = true;
-  } else if (score == top_bid_->score) {
-    // If there's a tie, replace the top-bidder with 1-in-`num_top_bids_`
-    // chance. This is the select random value from a stream with fixed
-    // storage problem.
-    ++num_top_bids_;
-    if (1 == base::RandInt(1, num_top_bids_))
-      is_top_bid = true;
-    if (owner != top_bid_->bid->interest_group->owner)
-      at_most_one_top_bid_owner_ = false;
-    // If the top bid is being replaced, need to add the old top bid as a second
-    // highest bid. Otherwise, need to add the current bid as a second highest
-    // bid.
-    double new_highest_scoring_other_bid =
-        is_top_bid ? top_bid_->bid->bid : bid->bid;
-    OnNewHighestScoringOtherBid(
-        score, new_highest_scoring_other_bid,
-        at_most_one_top_bid_owner_ ? &bid->interest_group->owner : nullptr);
-  } else if (score >= second_highest_score_) {
-    // Also use this bid (the most recent one) as highest scoring other bid if
-    // there's a tie for second highest score.
-    OnNewHighestScoringOtherBid(score, bid->bid, &owner);
-  }
-
-  if (is_top_bid) {
-    top_bid_ = std::make_unique<ScoredBid>(
-        score, has_data_version ? data_version : absl::optional<uint32_t>(),
-        std::move(bid), std::move(component_auction_modified_bid_params));
-  }
-
-  MaybeCompleteBiddingAndScoringPhase();
-}
-
-void AuctionRunner::Auction::OnNewHighestScoringOtherBid(
-    double score,
-    double bid_value,
-    const url::Origin* owner) {
-  // Current (the most recent) bid becomes highest scoring other bid.
-  if (score > second_highest_score_) {
-    highest_scoring_other_bid_ = bid_value;
-    num_second_highest_bids_ = 1;
-    // Owner may be false if this is one of the bids tied for first place.
-    if (!owner) {
-      highest_scoring_other_bid_owner_.reset();
-    } else {
-      highest_scoring_other_bid_owner_ = *owner;
-    }
-    second_highest_score_ = score;
-    return;
-  }
-
-  DCHECK_EQ(score, second_highest_score_);
-  if (!owner || *owner != highest_scoring_other_bid_owner_)
-    highest_scoring_other_bid_owner_.reset();
-  ++num_second_highest_bids_;
-  // In case of a tie, randomly pick one. This is the select random value from a
-  // stream with fixed storage problem.
-  if (1 == base::RandInt(1, num_second_highest_bids_))
-    highest_scoring_other_bid_ = bid_value;
-}
-
-absl::optional<std::string> AuctionRunner::Auction::PerBuyerSignals(
-    const BidState* state) {
-  const auto& per_buyer_signals = config_->non_shared_params.per_buyer_signals;
-  if (per_buyer_signals.has_value()) {
-    auto it =
-        per_buyer_signals.value().find(state->bidder.interest_group.owner);
-    if (it != per_buyer_signals.value().end())
-      return it->second;
-  }
-  return absl::nullopt;
-}
-
-absl::optional<base::TimeDelta> AuctionRunner::Auction::PerBuyerTimeout(
-    const BidState* state) {
-  const auto& per_buyer_timeouts =
-      config_->non_shared_params.per_buyer_timeouts;
-  if (per_buyer_timeouts.has_value()) {
-    auto it =
-        per_buyer_timeouts.value().find(state->bidder.interest_group.owner);
-    if (it != per_buyer_timeouts.value().end())
-      return std::min(it->second, kMaxTimeout);
-  }
-  const auto& all_buyers_timeout =
-      config_->non_shared_params.all_buyers_timeout;
-  if (all_buyers_timeout.has_value())
-    return std::min(all_buyers_timeout.value(), kMaxTimeout);
-  return absl::nullopt;
-}
-
-absl::optional<base::TimeDelta> AuctionRunner::Auction::SellerTimeout() {
-  if (config_->non_shared_params.seller_timeout.has_value()) {
-    return std::min(config_->non_shared_params.seller_timeout.value(),
-                    kMaxTimeout);
-  }
-  return absl::nullopt;
-}
-
-void AuctionRunner::Auction::MaybeCompleteBiddingAndScoringPhase() {
-  if (!AllBidsScored())
-    return;
-
-  // Since all bids have been scored, they also should have all been sent to the
-  // SellerWorklet by this point.
-  DCHECK_EQ(0, num_bids_not_sent_to_seller_worklet_);
-
-  all_bids_scored_ = true;
-
-  // If there's no winning bid, fail with kAllBidsRejected if there were any
-  // bids. Otherwise, fail with kNoBids.
-  if (!top_bid_) {
-    for (BidState& bid_state : bid_states_) {
-      if (bid_state.made_bid) {
-        OnBiddingAndScoringComplete(AuctionResult::kAllBidsRejected);
-        return;
-      }
-    }
-    OnBiddingAndScoringComplete(AuctionResult::kNoBids);
-    return;
-  }
-
-  OnBiddingAndScoringComplete(AuctionResult::kSuccess);
-}
-
-void AuctionRunner::Auction::OnBiddingAndScoringComplete(
-    AuctionResult auction_result,
-    const std::vector<std::string>& errors) {
-  DCHECK(bidding_and_scoring_phase_callback_);
-  DCHECK(!final_auction_result_);
-
-  TRACE_EVENT_NESTABLE_ASYNC_END0("fledge", "bidding_and_scoring_phase",
-                                  trace_id_);
-
-  errors_.insert(errors_.end(), errors.begin(), errors.end());
-
-  // If this is a component auction, have to unload the seller worklet handle to
-  // avoid deadlock. Otherwise, loading the top-level seller worklet may be
-  // blocked by component seller worklets taking up all the quota.
-  if (parent_)
-    seller_worklet_handle_.reset();
-
-  // If the seller loaded callback hasn't been invoked yet, call it now. This is
-  // needed in the case the phase ended without receiving the seller worklet
-  // (e.g., in the case no bidder worklet bids).
-  if (on_seller_receiver_callback_)
-    std::move(on_seller_receiver_callback_).Run();
-
-  bool success = auction_result == AuctionResult::kSuccess;
-  if (!success) {
-    // Close all pipes, to prevent any pending callbacks from being invoked if
-    // this phase is being completed due to a fatal error, like the seller
-    // worklet failing to load.
-    ClosePipes();
-
-    // `final_auction_result_` should only be set to kSuccess when the entire
-    // auction is complete.
-    final_auction_result_ = auction_result;
-  }
-
-  // If this is a top-level auction with component auction, update final state
-  // of all successfully completed component auctions with bids that did not win
-  // to reflect a loss.
-  for (auto& component_auction : component_auctions_) {
-    // Leave the state of the winning component auction alone, if the winning
-    // bid is from a component auction.
-    if (top_bid_ && top_bid_->bid->auction == component_auction.get())
-      continue;
-    if (component_auction->final_auction_result_)
-      continue;
-    component_auction->final_auction_result_ =
-        AuctionResult::kComponentLostAuction;
-  }
-
-  std::move(bidding_and_scoring_phase_callback_).Run(success);
-}
-
-void AuctionRunner::Auction::ReportSellerResult(
-    absl::optional<std::string> top_seller_signals) {
-  DCHECK(seller_worklet_handle_);
-  DCHECK(reporting_phase_callback_);
-
-  TRACE_EVENT_NESTABLE_ASYNC_BEGIN0("fledge", "seller_worklet_report_result",
-                                    trace_id_);
-
-  auction_worklet::mojom::ComponentAuctionReportResultParamsPtr
-      browser_signals_component_auction_report_result_params;
-  if (parent_) {
-    DCHECK(top_seller_signals);
-    DCHECK(top_bid_->component_auction_modified_bid_params);
-    browser_signals_component_auction_report_result_params =
-        auction_worklet::mojom::ComponentAuctionReportResultParams::New(
-            /*top_level_seller_signals=*/std::move(top_seller_signals).value(),
-            /*modified_bid=*/
-            top_bid_->component_auction_modified_bid_params->bid,
-            /*has_modified_bid=*/
-            top_bid_->component_auction_modified_bid_params->has_bid);
-  }
-
-  seller_worklet_handle_->GetSellerWorklet()->ReportResult(
-      config_->non_shared_params, GetOtherSellerParam(*top_bid_->bid),
-      top_bid_->bid->interest_group->owner, top_bid_->bid->render_url,
-      top_bid_->bid->bid, top_bid_->score, highest_scoring_other_bid_,
-      std::move(browser_signals_component_auction_report_result_params),
-      top_bid_->scoring_signals_data_version.value_or(0),
-      top_bid_->scoring_signals_data_version.has_value(), trace_id_,
-      base::BindOnce(&Auction::OnReportSellerResultComplete,
-                     weak_ptr_factory_.GetWeakPtr()));
-}
-
-void AuctionRunner::Auction::OnReportSellerResultComplete(
-    const absl::optional<std::string>& signals_for_winner,
-    const absl::optional<GURL>& seller_report_url,
-    const base::flat_map<std::string, GURL>& seller_ad_beacon_map,
-    const std::vector<std::string>& errors) {
-  TRACE_EVENT_NESTABLE_ASYNC_END0("fledge", "seller_worklet_report_result",
-                                  trace_id_);
-
-  // There should be no other report URLs at this point.
-  DCHECK(report_urls_.empty());
-
-  // Release the seller worklet handle. It's no longer needed, and not releasing
-  // it could theoretically trigger deadlock, if holding onto it prevents the
-  // winning component seller from reloading its worklet. It could also trigger
-  // an error if it crashes at this point, failing the auction unnecessarily.
-  seller_worklet_handle_.reset();
-
-  if (!seller_ad_beacon_map.empty()) {
-    for (const auto& element : seller_ad_beacon_map) {
-      if (!IsUrlValid(element.second)) {
-        mojo::ReportBadMessage(base::StrCat(
-            {"Invalid seller beacon URL for '", element.first, "'"}));
-        OnReportingPhaseComplete(AuctionResult::kBadMojoMessage);
-        return;
-      }
-    }
-    ad_beacon_map_.metadata[ReportingDestination::kSeller] =
-        seller_ad_beacon_map;
-  }
-
-  if (seller_report_url) {
-    if (!IsUrlValid(*seller_report_url)) {
-      mojo::ReportBadMessage("Invalid seller report URL");
-      OnReportingPhaseComplete(AuctionResult::kBadMojoMessage);
-      return;
-    }
-
-    report_urls_.push_back(*seller_report_url);
-  }
-
-  errors_.insert(errors_.end(), errors.begin(), errors.end());
-
-  // Treat a null `signals_for_winner` value as a null JS response.
-  //
-  // TODO(mmenke): Consider making `signals_for_winner` itself non-optional, and
-  // clean this up.
-  std::string fixed_up_signals_for_winner = signals_for_winner.value_or("null");
-
-  // If a the winning bid is from a nested component auction, need to call into
-  // that Auction's report logic (which will invoke both that seller's
-  // ReportResult() method, and the bidder's ReportWin()).
-  if (top_bid_->bid->auction != this) {
-    top_bid_->bid->auction->StartReportingPhase(
-        std::move(fixed_up_signals_for_winner),
-        base::BindOnce(&Auction::OnComponentAuctionReportingPhaseComplete,
-                       base::Unretained(this)));
-    return;
-  }
-
-  LoadBidderWorkletToReportBidWin(std::move(fixed_up_signals_for_winner));
-}
-
-void AuctionRunner::Auction::LoadBidderWorkletToReportBidWin(
-    const std::string& signals_for_winner) {
-  // Worklet handle should have been destroyed once the bid was generated.
-  DCHECK(!top_bid_->bid->bid_state->worklet_handle);
-
-  if (RequestBidderWorklet(
-          *top_bid_->bid->bid_state,
-          base::BindOnce(&Auction::ReportBidWin, base::Unretained(this),
-                         signals_for_winner),
-          base::BindOnce(&Auction::OnWinningBidderWorkletFatalError,
-                         base::Unretained(this)))) {
-    ReportBidWin(signals_for_winner);
-  }
-}
-
-void AuctionRunner::Auction::ReportBidWin(
-    const std::string& signals_for_winner) {
-  DCHECK(top_bid_);
-
-  TRACE_EVENT_NESTABLE_ASYNC_BEGIN0("fledge", "bidder_worklet_report_win",
-                                    trace_id_);
-
-  top_bid_->bid->bid_state->worklet_handle->GetBidderWorklet()->ReportWin(
-      top_bid_->bid->interest_group->name,
-      config_->non_shared_params.auction_signals,
-      PerBuyerSignals(top_bid_->bid->bid_state), signals_for_winner,
-      top_bid_->bid->render_url, top_bid_->bid->bid,
-      /*browser_signal_highest_scoring_other_bid=*/highest_scoring_other_bid_,
-      highest_scoring_other_bid_owner_.has_value() &&
-          top_bid_->bid->interest_group->owner ==
-              highest_scoring_other_bid_owner_.value(),
-      config_->seller,
-      parent_ ? parent_->config_->seller : absl::optional<url::Origin>(),
-      top_bid_->bid->bidding_signals_data_version.value_or(0),
-      top_bid_->bid->bidding_signals_data_version.has_value(), trace_id_,
-      base::BindOnce(&Auction::OnReportBidWinComplete,
-                     weak_ptr_factory_.GetWeakPtr()));
-}
-
-void AuctionRunner::Auction::OnReportBidWinComplete(
-    const absl::optional<GURL>& bidder_report_url,
-    const base::flat_map<std::string, GURL>& bidder_ad_beacon_map,
-    const std::vector<std::string>& errors) {
-  // There should be at most one other report URL at this point.
-  DCHECK_LE(report_urls_.size(), 1u);
-
-  TRACE_EVENT_NESTABLE_ASYNC_END0("fledge", "bidder_worklet_report_win",
-                                  trace_id_);
-
-  // The winning bidder worklet is no longer needed. Unload it to prevent a
-  // fatal error notification.
-  top_bid_->bid->bid_state->worklet_handle.reset();
-
-  if (!bidder_ad_beacon_map.empty()) {
-    for (const auto& element : bidder_ad_beacon_map) {
-      if (!IsUrlValid(element.second)) {
-        mojo::ReportBadMessage(base::StrCat(
-            {"Invalid bidder beacon URL for '", element.first, "'"}));
-        OnReportingPhaseComplete(AuctionResult::kBadMojoMessage);
-        return;
-      }
-    }
-    ad_beacon_map_.metadata[ReportingDestination::kBuyer] =
-        bidder_ad_beacon_map;
-  }
-
-  if (bidder_report_url) {
-    if (!IsUrlValid(*bidder_report_url)) {
-      mojo::ReportBadMessage("Invalid bidder report URL");
-      OnReportingPhaseComplete(AuctionResult::kBadMojoMessage);
-      return;
-    }
-
-    report_urls_.push_back(*bidder_report_url);
-  }
-
-  errors_.insert(errors_.end(), errors.begin(), errors.end());
-  OnReportingPhaseComplete(AuctionResult::kSuccess);
-}
-
-void AuctionRunner::Auction::OnWinningComponentSellerWorkletFatalError(
-    AuctionWorkletManager::FatalErrorType fatal_error_type,
-    const std::vector<std::string>& errors) {
-  // Crashes are considered fatal errors, while load errors currently are not.
-  if (fatal_error_type ==
-      AuctionWorkletManager::FatalErrorType::kWorkletCrash) {
-    OnReportingPhaseComplete(
-        AuctionResult::kWinningComponentSellerWorkletCrashed,
-        // Ignore default error message in case of crash. Instead, use a more
-        // specific one.
-        {base::StrCat({config_->decision_logic_url.spec(),
-                       " crashed while trying to run reportResult()."})});
-  } else {
-    // An error while reloading the worklet to call ReportResult() does not
-    // currently fail the auction.
-    OnReportSellerResultComplete(/*signals_for_winner=*/absl::nullopt,
-                                 /*seller_report_url=*/absl::nullopt,
-                                 /*seller_ad_beacon_map=*/{}, errors);
-  }
-}
-
-void AuctionRunner::Auction::OnWinningBidderWorkletFatalError(
-    AuctionWorkletManager::FatalErrorType fatal_error_type,
-    const std::vector<std::string>& errors) {
-  // Crashes are considered fatal errors, while load errors currently are not.
-  if (fatal_error_type ==
-      AuctionWorkletManager::FatalErrorType::kWorkletCrash) {
-    OnReportingPhaseComplete(
-        AuctionResult::kWinningBidderWorkletCrashed,
-        // Ignore default error message in case of crash. Instead, use a more
-        // specific one.
-        {base::StrCat({top_bid_->bid->interest_group->bidding_url->spec(),
-                       " crashed while trying to run reportWin()."})});
-  } else {
-    // An error while reloading the worklet to call ReportWin() does not
-    // currently fail the auction.
-    OnReportBidWinComplete(/*bidder_report_url=*/absl::nullopt,
-                           /*bidder_ad_beacon_map=*/{}, errors);
-  }
-}
-
-void AuctionRunner::Auction::OnComponentAuctionReportingPhaseComplete(
-    bool success) {
-  // Copy ad beacon registry.
-  DCHECK(top_bid_->bid->auction);
-  if (top_bid_->bid->auction->ad_beacon_map_.metadata.count(
-          ReportingDestination::kSeller) > 0) {
-    ad_beacon_map_.metadata[ReportingDestination::kComponentSeller] =
-        top_bid_->bid->auction->ad_beacon_map_
-            .metadata[ReportingDestination::kSeller];
-  }
-  if (top_bid_->bid->auction->ad_beacon_map_.metadata.count(
-          ReportingDestination::kBuyer) > 0) {
-    ad_beacon_map_.metadata[ReportingDestination::kBuyer] =
-        top_bid_->bid->auction->ad_beacon_map_
-            .metadata[ReportingDestination::kBuyer];
-  }
-
-  // Inherit the success or error from the nested auction.
-  OnReportingPhaseComplete(*top_bid_->bid->auction->final_auction_result_);
-}
-
-void AuctionRunner::Auction::OnReportingPhaseComplete(
-    AuctionResult auction_result,
-    const std::vector<std::string>& errors) {
-  DCHECK(reporting_phase_callback_);
-  DCHECK(!final_auction_result_);
-  // There should be at most two report URLs.
-  DCHECK_LE(report_urls_.size(), 2u);
-
-  TRACE_EVENT_NESTABLE_ASYNC_END0("fledge", "reporting_phase", trace_id_);
-
-  errors_.insert(errors_.end(), errors.begin(), errors.end());
-  final_auction_result_ = auction_result;
-
-  // Close all pipes, as they're no longer needed.
-  ClosePipes();
-
-  std::move(reporting_phase_callback_)
-      .Run(auction_result == AuctionResult::kSuccess);
-}
-
-auction_worklet::mojom::ComponentAuctionOtherSellerPtr
-AuctionRunner::Auction::GetOtherSellerParam(const Bid& bid) const {
-  auction_worklet::mojom::ComponentAuctionOtherSellerPtr
-      browser_signals_other_seller;
-  if (parent_) {
-    // This is a component seller scoring a bid from its own auction.
-    // Need to provide the top-level seller origin.
-    browser_signals_other_seller =
-        auction_worklet::mojom::ComponentAuctionOtherSeller::NewTopLevelSeller(
-            parent_->config_->seller);
-  } else if (bid.auction != this) {
-    // This is a top-level seller scoring a bid from a component auction.
-    // Need to provide the component seller origin.
-    browser_signals_other_seller =
-        auction_worklet::mojom::ComponentAuctionOtherSeller::NewComponentSeller(
-            bid.auction->config_->seller);
-  }
-  return browser_signals_other_seller;
-}
-
-bool AuctionRunner::Auction::RequestBidderWorklet(
-    BidState& bid_state,
-    base::OnceClosure worklet_available_callback,
-    AuctionWorkletManager::FatalErrorCallback fatal_error_callback) {
-  DCHECK(!bid_state.worklet_handle);
-
-  const blink::InterestGroup& interest_group = bid_state.bidder.interest_group;
-
-  absl::optional<uint16_t> experiment_group_id = absl::nullopt;
-  auto it = config_->per_buyer_experiment_group_ids.find(interest_group.owner);
-  if (it != config_->per_buyer_experiment_group_ids.end()) {
-    experiment_group_id = it->second;
-  } else {
-    experiment_group_id = config_->all_buyer_experiment_group_id;
-  }
-
-  return auction_worklet_manager_->RequestBidderWorklet(
-      interest_group.bidding_url.value_or(GURL()),
-      interest_group.bidding_wasm_helper_url,
-      interest_group.trusted_bidding_signals_url, experiment_group_id,
-      std::move(worklet_available_callback), std::move(fatal_error_callback),
-      bid_state.worklet_handle);
-}
-
 std::unique_ptr<AuctionRunner> AuctionRunner::CreateAndStart(
     AuctionWorkletManager* auction_worklet_manager,
     InterestGroupManagerImpl* interest_group_manager,
@@ -1667,75 +82,6 @@
                interest_group_manager,
                /*auction_start_time=*/base::Time::Now()) {}
 
-std::unique_ptr<AuctionRunner::Bid> AuctionRunner::Auction::TryToCreateBid(
-    auction_worklet::mojom::BidderWorkletBidPtr mojo_bid,
-    BidState& bid_state,
-    const absl::optional<uint32_t>& bidding_signals_data_version,
-    const absl::optional<GURL>& debug_loss_report_url,
-    const absl::optional<GURL>& debug_win_report_url) {
-  if (!IsValidBid(mojo_bid->bid)) {
-    mojo::ReportBadMessage("Invalid bid value");
-    return nullptr;
-  }
-
-  if (mojo_bid->bid_duration.is_negative()) {
-    mojo::ReportBadMessage("Invalid bid duration");
-    return nullptr;
-  }
-
-  const blink::InterestGroup& interest_group = bid_state.bidder.interest_group;
-  const blink::InterestGroup::Ad* matching_ad =
-      FindMatchingAd(*interest_group.ads, mojo_bid->render_url);
-  if (!matching_ad) {
-    mojo::ReportBadMessage("Bid render URL must be a valid ad URL");
-    return nullptr;
-  }
-
-  // Validate `ad_component` URLs, if present.
-  std::vector<GURL> ad_components;
-  if (mojo_bid->ad_components) {
-    // Only InterestGroups with ad components should return bids with ad
-    // components.
-    if (!interest_group.ad_components) {
-      mojo::ReportBadMessage("Unexpected non-null ad component list");
-      return nullptr;
-    }
-
-    if (mojo_bid->ad_components->size() > blink::kMaxAdAuctionAdComponents) {
-      mojo::ReportBadMessage("Too many ad component URLs");
-      return nullptr;
-    }
-
-    // Validate each ad component URL is valid and appears in the interest
-    // group's `ad_components` field.
-    for (const GURL& ad_component_url : *mojo_bid->ad_components) {
-      if (!FindMatchingAd(*interest_group.ad_components, ad_component_url)) {
-        mojo::ReportBadMessage(
-            "Bid ad components URL must match a valid ad component URL");
-        return nullptr;
-      }
-    }
-    ad_components = *std::move(mojo_bid->ad_components);
-  }
-
-  // Validate `debug_loss_report_url` and `debug_win_report_url`, if present.
-  if (debug_loss_report_url.has_value() &&
-      !IsUrlValid(debug_loss_report_url.value())) {
-    mojo::ReportBadMessage("Invalid bidder debugging loss report URL");
-    return nullptr;
-  }
-  if (debug_win_report_url.has_value() &&
-      !IsUrlValid(debug_win_report_url.value())) {
-    mojo::ReportBadMessage("Invalid bidder debugging win report URL");
-    return nullptr;
-  }
-
-  return std::make_unique<Bid>(
-      std::move(mojo_bid->ad), mojo_bid->bid, std::move(mojo_bid->render_url),
-      std::move(ad_components), mojo_bid->bid_duration,
-      bidding_signals_data_version, matching_ad, &bid_state, this);
-}
-
 void AuctionRunner::StartAuction() {
   auction_.StartLoadInterestGroupsPhase(
       is_interest_group_api_allowed_callback_,
diff --git a/content/browser/interest_group/auction_runner.h b/content/browser/interest_group/auction_runner.h
index a70e58d..04a872d8 100644
--- a/content/browser/interest_group/auction_runner.h
+++ b/content/browser/interest_group/auction_runner.h
@@ -5,25 +5,15 @@
 #ifndef CONTENT_BROWSER_INTEREST_GROUP_AUCTION_RUNNER_H_
 #define CONTENT_BROWSER_INTEREST_GROUP_AUCTION_RUNNER_H_
 
-#include <stdint.h>
-
 #include <memory>
 #include <string>
 #include <vector>
 
 #include "base/callback.h"
-#include "base/containers/flat_map.h"
-#include "base/logging.h"
 #include "base/memory/raw_ptr.h"
-#include "base/memory/weak_ptr.h"
-#include "base/time/time.h"
-#include "content/browser/fenced_frame/fenced_frame_url_mapping.h"
 #include "content/browser/interest_group/auction_worklet_manager.h"
-#include "content/browser/interest_group/interest_group_storage.h"
+#include "content/browser/interest_group/interest_group_auction.h"
 #include "content/common/content_export.h"
-#include "content/public/browser/content_browser_client.h"
-#include "content/services/auction_worklet/public/mojom/bidder_worklet.mojom.h"
-#include "content/services/auction_worklet/public/mojom/seller_worklet.mojom.h"
 #include "services/network/public/mojom/client_security_state.mojom.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/public/common/interest_group/interest_group.h"
@@ -40,39 +30,14 @@
 class InterestGroupManagerImpl;
 
 // An AuctionRunner loads and runs the bidder and seller worklets, along with
-// their reporting phases and produces the result via a callback.
+// their reporting phases and produces the result via a callback. Most of the
+// logic is handled by InterestGroupAuction, with the AuctionRunner handling
+// state transitions and assembling the final results of the auction.
 //
 // All auctions must be created on the same thread. This is just needed because
 // the code to assign unique tracing IDs is not threadsafe.
 class CONTENT_EXPORT AuctionRunner {
  public:
-  // Post auction signals (signals only available after auction completes such
-  // as winning bid) for debug loss/win reporting.
-  struct PostAuctionSignals {
-    PostAuctionSignals() = default;
-
-    // For now, top level post auction signals do not have
-    // `highest_scoring_other_bid` or `made_highest_scoring_other_bid`.
-    PostAuctionSignals(double winning_bid, bool made_winning_bid)
-        : winning_bid(winning_bid), made_winning_bid(made_winning_bid) {}
-
-    PostAuctionSignals(double winning_bid,
-                       bool made_winning_bid,
-                       double highest_scoring_other_bid,
-                       bool made_highest_scoring_other_bid)
-        : winning_bid(winning_bid),
-          made_winning_bid(made_winning_bid),
-          highest_scoring_other_bid(highest_scoring_other_bid),
-          made_highest_scoring_other_bid(made_highest_scoring_other_bid) {}
-
-    ~PostAuctionSignals() = default;
-
-    double winning_bid = 0.0;
-    bool made_winning_bid = false;
-    double highest_scoring_other_bid = 0.0;
-    bool made_highest_scoring_other_bid = false;
-  };
-
   // Invoked when a FLEDGE auction is complete.
   //
   // `winning_group_id` owner and name of the winning interest group (if any).
@@ -108,59 +73,8 @@
   // Returns true if `origin` is allowed to use the interest group API. Will be
   // called on worklet / interest group origins before using them in any
   // interest group API.
-  using IsInterestGroupApiAllowedCallback = base::RepeatingCallback<bool(
-      ContentBrowserClient::InterestGroupApiOperation
-          interest_group_api_operation,
-      const url::Origin& origin)>;
-
-  // Result of an auction or a component auction. Used for histograms. Only
-  // recorded for valid auctions. These are used in histograms, so values of
-  // existing entries must not change when adding/removing values, and obsolete
-  // values must not be reused.
-  enum class AuctionResult {
-    // The auction succeeded, with a winning bidder.
-    kSuccess = 0,
-
-    // The auction was aborted, due to either navigating away from the frame
-    // that started the auction or browser shutdown.
-    kAborted = 1,
-
-    // Bad message received over Mojo. This is potentially a security error.
-    kBadMojoMessage = 2,
-
-    // The user was in no interest groups that could participate in the auction.
-    kNoInterestGroups = 3,
-
-    // The seller worklet failed to load.
-    kSellerWorkletLoadFailed = 4,
-
-    // The seller worklet crashed.
-    kSellerWorkletCrashed = 5,
-
-    // All bidders failed to bid. This happens when all bidders choose not to
-    // bid, fail to load, or crash before making a bid.
-    kNoBids = 6,
-
-    // The seller worklet rejected all bids (of which there was at least one).
-    kAllBidsRejected = 7,
-
-    // The winning bidder worklet crashed. The bidder must have successfully
-    // bid, and the seller must have accepted the bid for this to be logged.
-    kWinningBidderWorkletCrashed = 8,
-
-    // The seller is not allowed to use the interest group API.
-    kSellerRejected = 9,
-
-    // The component auction completed with a winner, but that winner lost the
-    // top-level auction.
-    kComponentLostAuction = 10,
-
-    // The component seller worklet with the winning bidder crashed during the
-    // reporting phase.
-    kWinningComponentSellerWorkletCrashed = 11,
-
-    kMaxValue = kWinningComponentSellerWorkletCrashed
-  };
+  using IsInterestGroupApiAllowedCallback =
+      InterestGroupAuction::IsInterestGroupApiAllowedCallback;
 
   explicit AuctionRunner(const AuctionRunner&) = delete;
   AuctionRunner& operator=(const AuctionRunner&) = delete;
@@ -205,656 +119,6 @@
   void FailAuction();
 
  private:
-  class Auction;
-
-  // TODO(mmenke): Move BidState, Bid, and ScoredBid into Auction.
-  struct BidState {
-    BidState();
-    BidState(BidState&&);
-    ~BidState();
-
-    // Disable copy and assign, since this struct owns a
-    // auction_worklet::mojom::BiddingInterestGroupPtr, and mojo classes are not
-    // copiable.
-    BidState(BidState&) = delete;
-    BidState& operator=(BidState&) = delete;
-
-    // Populates `trace_id` with a new trace ID and logs the first trace event
-    // for it.
-    void BeginTracing();
-
-    // Logs the final event for `trace_id` and clears it. Automatically called
-    // on destruction so trace events are all closed if an auction is cancelled.
-    void EndTracing();
-
-    StorageInterestGroup bidder;
-
-    // Holds a reference to the BidderWorklet, once created.
-    std::unique_ptr<AuctionWorkletManager::WorkletHandle> worklet_handle;
-
-    // Tracing ID associated with the BidState. A nestable async "Bid" trace
-    // event is started for a bid state during the generate and score bid phase
-    // when the worklet is requested, and ended once the bid is score, or the
-    // bidder worklet fails to bid.
-    //
-    // Additionally, if the BidState is a winner of a component auction, another
-    // "Bid" trace event is created when the top-level auction scores the bid,
-    // and ends when scoring is complete.
-    //
-    // Nested events are logged using this ID both by the Auction and by Mojo
-    // bidder and seller worklets, potentially in another process.
-    //
-    // absl::nullopt means no ID is currently assigned, and there's no pending
-    // event.
-    absl::optional<uint64_t> trace_id;
-
-    // True if the worklet successfully made a bid.
-    bool made_bid = false;
-
-    // URLs of forDebuggingOnly.reportAdAuctionLoss(url) and
-    // forDebuggingOnly.reportAdAuctionWin(url) called in generateBid().
-    // They support post auction signal placeholders in their URL string,
-    // for example, "https://example.com/${highestScoringOtherBid}".
-    // Placeholders will be replaced by corresponding values. For a component
-    // auction, post auction signals are only from the component auction, but
-    // not the top-level auction.
-    absl::optional<GURL> bidder_debug_loss_report_url;
-    absl::optional<GURL> bidder_debug_win_report_url;
-
-    // URLs of forDebuggingOnly.reportAdAuctionLoss(url) and
-    // forDebuggingOnly.reportAdAuctionWin(url) called in scoreAd(). In the case
-    // of a component auction, these are the values from component seller that
-    // the scored ad was created in, and post auction signals are from the
-    // component auction.
-    absl::optional<GURL> seller_debug_loss_report_url;
-    absl::optional<GURL> seller_debug_win_report_url;
-
-    // URLs of forDebuggingOnly.reportAdAuctionLoss(url) and
-    // forDebuggingOnly.reportAdAuctionWin(url) called in scoreAd() from the
-    // top-level seller, in the case this bidder was made in a component
-    // auction, won it, and was then scored by the top-level seller.
-    absl::optional<GURL> top_level_seller_debug_win_report_url;
-    absl::optional<GURL> top_level_seller_debug_loss_report_url;
-  };
-
-  // Result of generated a bid. Contains information that needs to score a bid
-  // and is persisted to the end of the auction if the bidder wins. Largely
-  // duplicates auction_worklet::mojom::BidderWorkletBid, with additional
-  // information about the bidder.
-  struct Bid {
-    Bid(std::string ad_metadata,
-        double bid,
-        GURL render_url,
-        std::vector<GURL> ad_components,
-        base::TimeDelta bid_duration,
-        absl::optional<uint32_t> bidding_signals_data_version,
-        const blink::InterestGroup::Ad* bid_ad,
-        BidState* bid_state,
-        Auction* auction);
-
-    Bid(Bid&);
-
-    ~Bid();
-
-    // These are taken directly from the
-    // auction_worklet::mojom::BidderWorkletBid.
-    const std::string ad_metadata;
-    const double bid;
-    const GURL render_url;
-    const std::vector<GURL> ad_components;
-    const base::TimeDelta bid_duration;
-    const absl::optional<uint32_t> bidding_signals_data_version;
-
-    // InterestGroup that made the bid. Owned by the BidState of that
-    // InterestGroup.
-    const raw_ptr<const blink::InterestGroup, DanglingUntriaged> interest_group;
-
-    // Points to the InterestGroupAd within `interest_group`.
-    const raw_ptr<const blink::InterestGroup::Ad, DanglingUntriaged> bid_ad;
-
-    // `bid_state` of the InterestGroup that made the bid. This should not be
-    // written to, except for adding seller debug reporting URLs.
-    const raw_ptr<BidState, DanglingUntriaged> bid_state;
-
-    // The Auction with the interest group that made this bid. Important in the
-    // case of component auctions.
-    const raw_ptr<Auction, DanglingUntriaged> auction;
-  };
-
-  // Combines a Bid with seller score and seller state needed to invoke its
-  // ReportResult() method.
-  struct ScoredBid {
-    ScoredBid(double score,
-              absl::optional<uint32_t> scoring_signals_data_version,
-              std::unique_ptr<Bid> bid,
-              auction_worklet::mojom::ComponentAuctionModifiedBidParamsPtr
-                  component_auction_modified_bid_params);
-    ~ScoredBid();
-
-    // The seller's desirability score for the bid.
-    const double score;
-
-    // The seller's scoring signals version.
-    const absl::optional<uint32_t> scoring_signals_data_version;
-
-    // The bid that came from the bidder or component Auction.
-    const std::unique_ptr<Bid> bid;
-
-    // Modifications that should be applied to `bid` before the parent
-    // auction uses it. Only present for bids in component Auctions. When
-    // the top-level auction creates a ScoredBid represending the result from
-    // a component auction, the params have already been applied to the
-    // underlying Bid, so the params are no longer needed.
-    const auction_worklet::mojom::ComponentAuctionModifiedBidParamsPtr
-        component_auction_modified_bid_params;
-  };
-
-  // Handles running an auction rooted at a given AuctionConfig. Separate from
-  // AuctionRunner so that component auctions can use the same logic as the
-  // top-level auction.
-  //
-  // When complete, Auctions will have three phases, with phase transitions
-  // handled by the parent class. All phases complete asynchronously:
-  //
-  // * Loading interest groups phase: This loads interest groups that can
-  // participate in an auction. Waiting for all component auctions to complete
-  // this phase before advance to the next ensures that if any auctions share
-  // bidder worklets, they'll all be loaded together, and only send out a single
-  // trusted bidding signals request.
-  //
-  // * Bidding/scoring phase: This phase loads bidder and seller worklets,
-  // generates bids, scores bids, and the highest scoring bid for each component
-  // auction is passed to its parent auction, which also scores it. When this
-  // phase completes, the winner will have been decided.
-  //
-  // * ReportResult / ReportWin phase: This phase invokes ReportResult() on
-  // winning seller worklets and ReportWin() in the winning bidder worklet.
-  class Auction {
-   public:
-    // Callback that's called when a phase of the Auction completes. Always
-    // invoked asynchronously.
-    using AuctionPhaseCompletionCallback =
-        base::OnceCallback<void(bool success)>;
-
-    // All passed in raw pointers must remain valid until the Auction is
-    // destroyed. `config` is typically owned by the AuctionRunner's
-    // `owned_auction_config_` field. `parent` should be the parent Auction if
-    // this is a component auction, and null, otherwise.
-    Auction(const blink::AuctionConfig* config,
-            const Auction* parent,
-            AuctionWorkletManager* auction_worklet_manager,
-            InterestGroupManagerImpl* interest_group_manager,
-            base::Time auction_start_time);
-
-    Auction(const Auction&) = delete;
-    Auction& operator=(const Auction&) = delete;
-
-    ~Auction();
-
-    // Starts loading the interest groups that can participate in an auction.
-    //
-    // Both seller and buyer origins are filtered by
-    // `is_interest_group_api_allowed`, and any any not allowed to use the API
-    // are excluded from participating in the auction.
-    //
-    // Invokes `load_interest_groups_phase_callback` asynchronously on
-    // completion. Passes it false if there are no interest groups that may
-    // participate in the auction (possibly because sellers aren't allowed to
-    // participate in the auction)
-    void StartLoadInterestGroupsPhase(
-        IsInterestGroupApiAllowedCallback
-            is_interest_group_api_allowed_callback,
-        AuctionPhaseCompletionCallback load_interest_groups_phase_callback);
-
-    // Starts bidding and scoring phase of the auction.
-    //
-    // `on_seller_receiver_callback`, if non-null, is invoked once the seller
-    // worklet has been received, or if the seller worklet is no longer needed
-    // (e.g., if all bidders fail to bid before the seller worklet has
-    // been received). This is needed so that in the case of component auctions,
-    // the top-level seller worklet will only be requested once all component
-    // seller worklets have been received, to prevent deadlock (the top-level
-    // auction could be waiting on a bid from a seller, while the top-level
-    // seller worklet being is blocking a component seller worklet from being
-    // created, due to the process limit). Unlike other callbacks,
-    // `on_seller_receiver_callback` may be called synchronously.
-    //
-    // `bidding_and_scoring_phase_callback` is invoked asynchronously when
-    // either the auction has failed to produce a winner, or the auction has a
-    // winner. `success` is true only when there is a winner.
-    void StartBiddingAndScoringPhase(
-        base::OnceClosure on_seller_receiver_callback,
-        AuctionPhaseCompletionCallback bidding_and_scoring_phase_callback);
-
-    // Starts the reporting phase of the auction. Callback is invoked
-    // asynchronously when either the auction has encountered a fatal error, or
-    // when all reporting URLs (if any) have been retrieved from the applicable
-    // worklets. `success` is true if the final status of the auction is
-    // `kSuccess`.
-    //
-    // If this is a component auction, `top_seller_signals` must populated and
-    // be the output from the top-level seller's reportResult() method.
-    void StartReportingPhase(
-        absl::optional<std::string> top_seller_signals,
-        AuctionPhaseCompletionCallback reporting_phase_callback);
-
-    // Close all Mojo pipes and release all weak pointers. Called when an
-    // auction fails and on auction complete.
-    void ClosePipes();
-
-    // Returns all interest groups that bid in an auction. Expected to be called
-    // after the bidding and scoring phase completes, but before the reporting
-    // phase. Returns an empty set if the auction failed for any reason other
-    // than the seller rejecting all bids.
-    //
-    // TODO(mmenke): Consider calling this after the reporting phase.
-    void GetInterestGroupsThatBid(
-        blink::InterestGroupSet& interest_groups) const;
-
-    // Retrieves any debug reporting URLs. May only be called once, since it
-    // takes ownership of stored reporting URLs.
-    void TakeDebugReportUrls(std::vector<GURL>& debug_win_report_urls,
-                             std::vector<GURL>& debug_loss_report_urls);
-
-    // Retrieves the ad beacon map. May only be called once, since it takes
-    // ownership of the stored ad beacon map.
-    ReportingMetadata TakeAdBeaconMap() { return std::move(ad_beacon_map_); }
-
-    // Retrieves any reporting URLs returned by ReportWin() and ReportResult()
-    // methods. May only be called after an auction has completed successfully.
-    // May only be called once, since it takes ownership of stored reporting
-    // URLs.
-    std::vector<GURL> TakeReportUrls();
-
-    // Retrieves any errors from the auction. May only be called once, since it
-    // takes ownership of stored errors.
-    std::vector<std::string> TakeErrors();
-
-    // Retrieves (by appending) all owners of interest groups that participated
-    // in this auction (or any of its child auctions) that successfully loaded
-    // at least one interest group. May only be called after the auction has
-    // completed, for either success or failure. Duplication is possible,
-    // particularly if an owner is listed in multiple auction components. May
-    // only be called once, since it moves the stored origins.
-    void TakePostAuctionUpdateOwners(std::vector<url::Origin>& owners);
-
-    // Returns the top bid of the auction. May only be invoked after the
-    // bidding and scoring phase has completed successfully.
-    ScoredBid* top_bid();
-
-   private:
-    using AuctionList = std::list<std::unique_ptr<Auction>>;
-
-    // ---------------------------------
-    // Load interest group phase methods
-    // ---------------------------------
-
-    // Invoked whenever the interest groups for a buyer have loaded. Adds
-    // `interest_groups` to `bid_states_`.
-    void OnInterestGroupRead(std::vector<StorageInterestGroup> interest_groups);
-
-    // Invoked when the interest groups for an entire component auction have
-    // loaded. If `success` is false, removes the component auction.
-    void OnComponentInterestGroupsRead(AuctionList::iterator component_auction,
-                                       bool success);
-
-    // Invoked when the interest groups for a buyer or for an entire component
-    // auction have loaded. Completes the loading phase if no pending loads
-    // remain.
-    void OnOneLoadCompleted();
-
-    // Invoked once the interest group load phase has completed. Never called
-    // synchronously from StartLoadInterestGroupsPhase(), to avoid reentrancy
-    // (AuctionRunner::callback_ cannot be invoked until
-    // AuctionRunner::CreateAndStart() completes). `auction_result` is the
-    // result of trying to load the interest groups that can participate in the
-    // auction. It's AuctionResult::kSuccess if there are interest groups that
-    // can take part in the auction, and a failure value otherwise.
-    void OnStartLoadInterestGroupsPhaseComplete(AuctionResult auction_result);
-
-    // -------------------------------------
-    // Generate and score bids phase methods
-    // -------------------------------------
-
-    // Called when a component auction has received a worklet. Calls
-    // RequestSellerWorklet() if all component auctions have received worklets.
-    // See StartBiddingAndScoringPhase() for discussion of this.
-    void OnComponentSellerWorkletReceived();
-
-    // Requests a seller worklet from the AuctionWorkletManager.
-    void RequestSellerWorklet();
-
-    // Called when RequestSellerWorklet() returns. Starts scoring bids, if there
-    // are any.
-    void OnSellerWorkletReceived();
-
-    // Requests bidder worklets from the AuctionWorkletManager for all bidders.
-    void RequestBidderWorklets();
-
-    // Invoked by the AuctionWorkletManager on fatal errors, at any point after
-    // a SellerWorklet has been provided. Results in auction immediately
-    // failing. Unlike most other methods, may be invoked during either the
-    // generate bid phase or the reporting phase, since the seller worklet is
-    // not unloaded between the two phases.
-    void OnSellerWorkletFatalError(
-        AuctionWorkletManager::FatalErrorType fatal_error_type,
-        const std::vector<std::string>& errors);
-
-    // Invoked whenever the AuctionWorkletManager has provided a BidderWorket
-    // for the bidder identified by `bid_state`. Starts generating a bid.
-    void OnBidderWorkletReceived(BidState* bid_state);
-
-    // Calls SendPendingSignalsRequests() for the BidderWorklet of `bid_state`,
-    // if it hasn't been destroyed. This is done asynchronously, so that
-    // BidStates that share a BidderWorklet all call GenerateBid() before this
-    // is invoked for all of them.
-    //
-    // This does result in invoking SendPendingSignalsRequests() multiple times
-    // for BidStates that share BidderWorklets, though that should be fairly low
-    // overhead.
-    void SendPendingSignalsRequestsForBidder(BidState* bid_state);
-
-    // Called when the `bid_state` BidderWorklet crashes or fails to load.
-    // Invokes OnGenerateBidComplete() for the worklet with a failure.
-    void OnBidderWorkletGenerateBidFatalError(
-        BidState* bid_state,
-        AuctionWorkletManager::FatalErrorType fatal_error_type,
-        const std::vector<std::string>& errors);
-
-    // Called once a bid has been generated, or has failed to be generated.
-    // Releases the BidderWorklet handle and instructs the SellerWorklet to
-    // start scoring the bid, if there is one.
-    void OnGenerateBidComplete(
-        BidState* state,
-        auction_worklet::mojom::BidderWorkletBidPtr bid,
-        uint32_t bidding_signals_data_version,
-        bool has_bidding_signals_data_version,
-        const absl::optional<GURL>& debug_loss_report_url,
-        const absl::optional<GURL>& debug_win_report_url,
-        double set_priority,
-        bool has_set_priority,
-        const std::vector<std::string>& errors);
-
-    // True if all bid results and the seller script load are complete.
-    bool AllBidsScored() const { return outstanding_bids_ == 0; }
-
-    // Invoked when a component auction completes. If `success` is true, gets
-    // the Bid from `component_auction` and passes a copy of it to ScoreBid().
-    void OnComponentAuctionComplete(Auction* component_auction, bool success);
-
-    // Called when either a bidder worklet's GenerateBid() method or a component
-    // seller worklet's bid and scoring phase completes without creating a bid
-    // (this includes worklet crashes and load failures).
-    void OnNoBid();
-
-    // Validates that `mojo_bid` is valid and, if it is, creates a Bid
-    // corresponding to it, consuming it. Returns nullptr and calls
-    // ReportBadMessage() if it's not valid. Does not mutate `bid_state`, but
-    // the returned Bid has a non-const pointer to it.
-    std::unique_ptr<Bid> TryToCreateBid(
-        auction_worklet::mojom::BidderWorkletBidPtr mojo_bid,
-        BidState& bid_state,
-        const absl::optional<uint32_t>& bidding_signals_data_version,
-        const absl::optional<GURL>& debug_loss_report_url,
-        const absl::optional<GURL>& debug_win_report_url);
-
-    // Calls into the seller asynchronously to score the passed in bid.
-    void ScoreBidIfReady(std::unique_ptr<Bid> bid);
-
-    // Callback from ScoreBid().
-    void OnBidScored(
-        std::unique_ptr<Bid> bid,
-        double score,
-        auction_worklet::mojom::ComponentAuctionModifiedBidParamsPtr
-            component_auction_modified_bid_params,
-        uint32_t scoring_signals_data_version,
-        bool has_scoring_signals_data_version,
-        const absl::optional<GURL>& debug_loss_report_url,
-        const absl::optional<GURL>& debug_win_report_url,
-        const std::vector<std::string>& errors);
-
-    // Invoked when the bid becomes the new highest scoring other bid, to handle
-    // calculation of post auction signals. `owner` is nullptr in the event the
-    // bid is tied with the top bid, and they have different origins.
-    void OnNewHighestScoringOtherBid(double score,
-                                     double bid_value,
-                                     const url::Origin* owner);
-
-    absl::optional<std::string> PerBuyerSignals(const BidState* state);
-    absl::optional<base::TimeDelta> PerBuyerTimeout(const BidState* state);
-    absl::optional<base::TimeDelta> SellerTimeout();
-
-    // If there are no `outstanding_bids_`, completes the bidding and scoring
-    // phase.
-    void MaybeCompleteBiddingAndScoringPhase();
-
-    // Invoked when the bidding and scoring phase of an auction completes.
-    // `auction_result` is AuctionResult::kSuccess if the auction has a winner,
-    // and some other value otherwise. Appends `errors` to `errors_`.
-    void OnBiddingAndScoringComplete(
-        AuctionResult auction_result,
-        const std::vector<std::string>& errors = {});
-
-    // -----------------------
-    // Reporting phase methods
-    // -----------------------
-
-    // Sequence of asynchronous methods to call into the seller and then bidder
-    // worklet to report a win. Will ultimately invoke
-    // `reporting_phase_callback_`, which will delete the auction.
-    void ReportSellerResult(absl::optional<std::string> top_seller_signals);
-    void OnReportSellerResultComplete(
-        const absl::optional<std::string>& signals_for_winner,
-        const absl::optional<GURL>& seller_report_url,
-        const base::flat_map<std::string, GURL>& seller_ad_beacon_map,
-        const std::vector<std::string>& error_msgs);
-    void LoadBidderWorkletToReportBidWin(const std::string& signals_for_winner);
-    void ReportBidWin(const std::string& signals_for_winner);
-    void OnReportBidWinComplete(
-        const absl::optional<GURL>& bidder_report_url,
-        const base::flat_map<std::string, GURL>& bidder_ad_beacon_map,
-        const std::vector<std::string>& error_msgs);
-
-    // Called when the component SellerWorklet with the bidder that won an
-    // auction has an out-of-band fatal error during the ReportResult() call.
-    void OnWinningComponentSellerWorkletFatalError(
-        AuctionWorkletManager::FatalErrorType fatal_error_type,
-        const std::vector<std::string>& errors);
-
-    // Called when the BidderWorklet that won an auction has an out-of-band
-    // fatal error during the ReportWin() call.
-    void OnWinningBidderWorkletFatalError(
-        AuctionWorkletManager::FatalErrorType fatal_error_type,
-        const std::vector<std::string>& errors);
-
-    // Invoked when the nested component auction with the winning bid's
-    // reporting phase is complete. Completes the reporting phase for `this`.
-    void OnComponentAuctionReportingPhaseComplete(bool success);
-
-    // Called when the final phase of the auction completes. Unconditionally
-    // sets `final_auction_result`, even if `auction_result` is
-    // AuctionResult::kSuccess, unlike other phase completion methods. Appends
-    // `errors` to `errors_`.
-    void OnReportingPhaseComplete(AuctionResult auction_result,
-                                  const std::vector<std::string>& errors = {});
-
-    // -----------------------------------
-    // Methods not associated with a phase
-    // -----------------------------------
-
-    // Creates a ComponentAuctionOtherSeller to pass to SellerWorklets when
-    // dealing with `bid`. If `this` is a component auction, returns an object
-    // with a `top_level_seller`. If this is a top-level auction and `bid` comes
-    // from a component auction, returns an object with a `component_seller` to
-    // `bid's` seller.
-    auction_worklet::mojom::ComponentAuctionOtherSellerPtr GetOtherSellerParam(
-        const Bid& bid) const;
-
-    // Requests a WorkletHandle for the interest group identified by
-    // `bid_state`, using the provided callbacks. Returns true if a worklet was
-    // received synchronously.
-    [[nodiscard]] bool RequestBidderWorklet(
-        BidState& bid_state,
-        base::OnceClosure worklet_available_callback,
-        AuctionWorkletManager::FatalErrorCallback fatal_error_callback);
-
-    // Replace `${}` placeholders in debug report URLs for post auction signals
-    // if exist.
-    GURL FillPostAuctionSignals(const GURL& url,
-                                const PostAuctionSignals& signals,
-                                const absl::optional<PostAuctionSignals>&
-                                    top_level_signals = absl::nullopt);
-
-    // Tracing ID associated with the Auction. A nestable async "Auction" trace
-    // event lasts for the lifetime of `this`. Sequential events that apply to
-    // the entire auction are logged using this ID, including potentially
-    // out-of-process events by bidder and seller worklet reporting methods.
-    const uint64_t trace_id_;
-
-    const raw_ptr<AuctionWorkletManager> auction_worklet_manager_;
-    const raw_ptr<InterestGroupManagerImpl> interest_group_manager_;
-
-    // Configuration of this auction.
-    raw_ptr<const blink::AuctionConfig> config_;
-    // If this is a component auction, the parent Auction. Null, otherwise.
-    const raw_ptr<const Auction> parent_;
-
-    // Component auctions that are part of this auction. This auction manages
-    // their state transition, and their bids may participate in this auction as
-    // well. Component auctions that fail in the load phase are removed from
-    // this list, to avoid trying to load their worklets during the scoring
-    // phase.
-    AuctionList component_auctions_;
-
-    // Final result of the auction, once completed. Null before completion.
-    absl::optional<AuctionResult> final_auction_result_;
-
-    // Each phases uses its own callback, to make sure that the right callback
-    // is invoked when the phase completes.
-    AuctionPhaseCompletionCallback load_interest_groups_phase_callback_;
-    AuctionPhaseCompletionCallback bidding_and_scoring_phase_callback_;
-    AuctionPhaseCompletionCallback reporting_phase_callback_;
-
-    // Invoked in the bidding and scoring phase, once the seller worklet has
-    // loaded. May be null.
-    base::OnceClosure on_seller_receiver_callback_;
-
-    // The number of buyers and component auctions with pending interest group
-    // loads from storage. Decremented each time either the interest groups for
-    // a buyer or all buyers for a component are read.
-    // `load_interest_groups_phase_callback` is invoked once this hits 0.
-    size_t num_pending_loads_ = 0;
-
-    // True once a seller worklet has been received from the
-    // AuctionWorkletManager.
-    bool seller_worklet_received_ = false;
-
-    // Number of bids that have yet to be sent to the SellerWorklet. This
-    // includes BidderWorklets that have not yet been loaded, those whose
-    // GenerateBid() method is currently being run, and those that are waiting
-    // on the seller worklet to load, as well as component auctions that are
-    // still running. When this reaches 0, the SellerWorklet's
-    // SendPendingSignalsRequests() should be invoked, so it can send any
-    // pending scoring signals requests.
-    int num_bids_not_sent_to_seller_worklet_;
-
-    // Number of bids which the seller has not yet finished scoring. This
-    // includes bids included in `num_bids_not_sent_to_seller_worklet_`, as well
-    // as any bids waiting on the seller worklet to load, and bids the seller
-    // worklet is currently scoring. When this reaches 0, the bid with the
-    // highest score is the winner, and bidding and scoring phase is completed.
-    int outstanding_bids_;
-
-    // The number of `component_auctions_` that have yet to request seller
-    // worklets. Once it hits 0, the seller worklet for `this` is loaded. See
-    // StartBiddingAndScoringPhase() for more details.
-    size_t pending_component_seller_worklet_requests_ = 0;
-
-    // State of all loaded interest groups.
-    std::vector<BidState> bid_states_;
-
-    // Bids waiting on the seller worklet to load before scoring. Does not
-    // include bids that are currently waiting on the worklet's ScoreAd() method
-    // to complete.
-    std::vector<std::unique_ptr<Bid>> unscored_bids_;
-
-    // The time the auction started. Use a single base time for all Worklets, to
-    // present a more consistent view of the universe.
-    const base::Time auction_start_time_;
-
-    // The number of buyers in the AuctionConfig that passed the
-    // IsInterestGroupApiAllowedCallback filter and interest groups were found
-    // for. Includes buyers from nested component auctions. Double-counts buyers
-    // in multiple Auctions.
-    int num_owners_loaded_ = 0;
-
-    // The number of buyers with InterestGroups participating in an auction.
-    // Includes buyers from nested component auctions. Double-counts buyers in
-    // multiple Auctions.
-    int num_owners_with_interest_groups_ = 0;
-
-    // A list of all buyer owners that participated in this auction and had at
-    // least one interest group. These owners will have their interest groups
-    // updated after a successful auction, barring rate-limiting.
-    std::vector<url::Origin> post_auction_update_owners_;
-
-    // A list of all interest groups that need to have their priority adjusted.
-    // The new rates will be committed after a successful auction.
-    std::vector<std::pair<blink::InterestGroupKey, double>>
-        post_auction_priority_updates_;
-
-    // The highest scoring bid so far. Null if no bid has been accepted yet.
-    std::unique_ptr<ScoredBid> top_bid_;
-    // Number of bidders with the same score as `top_bidder`.
-    size_t num_top_bids_ = 0;
-    // Number of bidders with the same score as `second_highest_score_`. If the
-    // second highest score matches the highest score, this does not include the
-    // top bid.
-    size_t num_second_highest_bids_ = 0;
-
-    // The numeric value of the bid that got the second highest score. When
-    // there's a tie for the second highest score, one of the second highest
-    // scoring bids is randomly chosen.
-    double highest_scoring_other_bid_ = 0.0;
-    double second_highest_score_ = 0.0;
-    // Whether all bids of the highest score are from the same interest group
-    // owner.
-    bool at_most_one_top_bid_owner_ = true;
-    // Will be null in the end if there are interest groups having the second
-    // highest score with different owners. That includes the top bid itself, in
-    // the case there's a tie for the top bid.
-    absl::optional<url::Origin> highest_scoring_other_bid_owner_;
-
-    // Holds a reference to the SellerWorklet used by the auction.
-    std::unique_ptr<AuctionWorkletManager::WorkletHandle>
-        seller_worklet_handle_;
-
-    // Report URLs from reportResult() and reportWin() methods. An auction's
-    // report URL from reportResult() comes before the URL from its reportWin()
-    // method if there is one. Returned to `callback_` to deal with, so the
-    // auction itself can be deleted at the end of the auction.
-    std::vector<GURL> report_urls_;
-
-    // All errors reported by worklets thus far.
-    std::vector<std::string> errors_;
-
-    // Ad Beacon URL mapping generated from reportResult() or reportWin() from
-    // this auction and its components. Destination is relative to this auction.
-    // Returned to `callback_` to deal with, so the Auction itself can be
-    // deleted at the end of the auction.
-    ReportingMetadata ad_beacon_map_;
-
-    // This is set to true if the scoring phase ran and was able to score all
-    // bids that were made (of which there may have been none). This is used to
-    // gate accessors that should return nothing if the entire auction failed
-    // (e.g., don't want to report bids as having "lost" an auction if the
-    // seller failed to load, since neither the bids nor the bidders were the
-    // problem).
-    bool all_bids_scored_ = false;
-
-    base::WeakPtrFactory<Auction> weak_ptr_factory_{this};
-  };
-
   AuctionRunner(
       AuctionWorkletManager* auction_worklet_manager,
       InterestGroupManagerImpl* interest_group_manager,
@@ -902,7 +166,7 @@
   blink::AuctionConfig owned_auction_config_;
   RunAuctionCallback callback_;
 
-  Auction auction_;
+  InterestGroupAuction auction_;
 };
 
 }  // namespace content
diff --git a/content/browser/interest_group/auction_runner_unittest.cc b/content/browser/interest_group/auction_runner_unittest.cc
index d87a32f..a5a221a 100644
--- a/content/browser/interest_group/auction_runner_unittest.cc
+++ b/content/browser/interest_group/auction_runner_unittest.cc
@@ -3,7 +3,6 @@
 // found in the LICENSE file.
 
 #include "content/browser/interest_group/auction_runner.h"
-#include "build/build_config.h"
 
 #include <stdint.h>
 
@@ -27,10 +26,12 @@
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
 #include "base/time/time.h"
+#include "build/build_config.h"
 #include "content/browser/interest_group/auction_process_manager.h"
 #include "content/browser/interest_group/auction_worklet_manager.h"
 #include "content/browser/interest_group/debuggable_auction_worklet.h"
 #include "content/browser/interest_group/debuggable_auction_worklet_tracker.h"
+#include "content/browser/interest_group/interest_group_auction.h"
 #include "content/browser/interest_group/interest_group_manager_impl.h"
 #include "content/browser/interest_group/interest_group_storage.h"
 #include "content/public/browser/site_instance.h"
@@ -61,7 +62,7 @@
 namespace {
 
 using InterestGroupKey = blink::InterestGroupKey;
-using PostAuctionSignals = AuctionRunner::PostAuctionSignals;
+using PostAuctionSignals = InterestGroupAuction::PostAuctionSignals;
 using blink::mojom::ReportingDestination;
 
 const std::string kBidder1Name{"Ad Platform"};
@@ -1794,7 +1795,7 @@
   // Check histogram values. If `expected_interest_groups` or `expected_owners`
   // is null, expect the auction to be aborted before the corresponding
   // histograms are recorded.
-  void CheckHistograms(AuctionRunner::AuctionResult expected_result,
+  void CheckHistograms(InterestGroupAuction::AuctionResult expected_result,
                        absl::optional<int> expected_interest_groups,
                        absl::optional<int> expected_owners,
                        absl::optional<int> expected_sellers) {
@@ -1830,14 +1831,15 @@
 
     histogram_tester_->ExpectTotalCount(
         "Ads.InterestGroup.Auction.AbortTime",
-        expected_result == AuctionRunner::AuctionResult::kAborted);
+        expected_result == InterestGroupAuction::AuctionResult::kAborted);
     histogram_tester_->ExpectTotalCount(
         "Ads.InterestGroup.Auction.CompletedWithoutWinnerTime",
-        expected_result == AuctionRunner::AuctionResult::kNoBids ||
-            expected_result == AuctionRunner::AuctionResult::kAllBidsRejected);
+        expected_result == InterestGroupAuction::AuctionResult::kNoBids ||
+            expected_result ==
+                InterestGroupAuction::AuctionResult::kAllBidsRejected);
     histogram_tester_->ExpectTotalCount(
         "Ads.InterestGroup.Auction.AuctionWithWinnerTime",
-        expected_result == AuctionRunner::AuctionResult::kSuccess);
+        expected_result == InterestGroupAuction::AuctionResult::kSuccess);
   }
 
   AuctionRunner::IsInterestGroupApiAllowedCallback
@@ -2047,7 +2049,7 @@
   EXPECT_EQ(0u, result_.bidder1_prev_wins.size());
   EXPECT_EQ(-1, result_.bidder2_bid_count);
   EXPECT_EQ(0u, result_.bidder2_prev_wins.size());
-  CheckHistograms(AuctionRunner::AuctionResult::kNoInterestGroups,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kNoInterestGroups,
                   /*expected_interest_groups=*/absl::nullopt,
                   /*expected_owners=*/absl::nullopt,
                   /*expected_sellers=*/absl::nullopt);
@@ -2069,7 +2071,7 @@
   EXPECT_EQ(0u, result_.bidder1_prev_wins.size());
   EXPECT_EQ(-1, result_.bidder2_bid_count);
   EXPECT_EQ(0u, result_.bidder2_prev_wins.size());
-  CheckHistograms(AuctionRunner::AuctionResult::kNoInterestGroups,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kNoInterestGroups,
                   /*expected_interest_groups=*/absl::nullopt,
                   /*expected_owners=*/absl::nullopt,
                   /*expected_sellers=*/absl::nullopt);
@@ -2089,7 +2091,7 @@
   EXPECT_EQ(0u, result_.bidder1_prev_wins.size());
   EXPECT_EQ(-1, result_.bidder2_bid_count);
   EXPECT_EQ(0u, result_.bidder2_prev_wins.size());
-  CheckHistograms(AuctionRunner::AuctionResult::kNoInterestGroups,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kNoInterestGroups,
                   /*expected_interest_groups=*/absl::nullopt,
                   /*expected_owners=*/absl::nullopt,
                   /*expected_sellers=*/absl::nullopt);
@@ -2111,7 +2113,7 @@
   EXPECT_EQ(0u, result_.bidder1_prev_wins.size());
   EXPECT_EQ(-1, result_.bidder2_bid_count);
   EXPECT_EQ(0u, result_.bidder2_prev_wins.size());
-  CheckHistograms(AuctionRunner::AuctionResult::kNoInterestGroups,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kNoInterestGroups,
                   /*expected_interest_groups=*/absl::nullopt,
                   /*expected_owners=*/absl::nullopt,
                   /*expected_sellers=*/absl::nullopt);
@@ -2131,7 +2133,7 @@
   EXPECT_EQ(0u, result_.bidder1_prev_wins.size());
   EXPECT_EQ(-1, result_.bidder2_bid_count);
   EXPECT_EQ(0u, result_.bidder2_prev_wins.size());
-  CheckHistograms(AuctionRunner::AuctionResult::kNoInterestGroups,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kNoInterestGroups,
                   /*expected_interest_groups=*/0, /*expected_owners=*/0,
                   /*expected_sellers=*/0);
 }
@@ -2155,7 +2157,7 @@
   EXPECT_EQ(0u, result_.bidder1_prev_wins.size());
   EXPECT_EQ(-1, result_.bidder2_bid_count);
   EXPECT_EQ(0u, result_.bidder2_prev_wins.size());
-  CheckHistograms(AuctionRunner::AuctionResult::kNoInterestGroups,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kNoInterestGroups,
                   /*expected_interest_groups=*/0, /*expected_owners=*/0,
                   /*expected_sellers=*/0);
 }
@@ -2179,7 +2181,7 @@
   EXPECT_EQ(3u, result_.bidder1_prev_wins.size());
   EXPECT_EQ(-1, result_.bidder2_bid_count);
   EXPECT_EQ(0u, result_.bidder2_prev_wins.size());
-  CheckHistograms(AuctionRunner::AuctionResult::kNoInterestGroups,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kNoInterestGroups,
                   /*expected_interest_groups=*/0, /*expected_owners=*/0,
                   /*expected_sellers=*/0);
 }
@@ -2203,7 +2205,7 @@
   EXPECT_EQ(3u, result_.bidder1_prev_wins.size());
   EXPECT_EQ(-1, result_.bidder2_bid_count);
   EXPECT_EQ(0u, result_.bidder2_prev_wins.size());
-  CheckHistograms(AuctionRunner::AuctionResult::kNoInterestGroups,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kNoInterestGroups,
                   /*expected_interest_groups=*/0, /*expected_owners=*/0,
                   /*expected_sellers=*/0);
 }
@@ -2227,7 +2229,7 @@
   EXPECT_EQ(3u, result_.bidder1_prev_wins.size());
   EXPECT_EQ(-1, result_.bidder2_bid_count);
   EXPECT_EQ(0u, result_.bidder2_prev_wins.size());
-  CheckHistograms(AuctionRunner::AuctionResult::kNoInterestGroups,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kNoInterestGroups,
                   /*expected_interest_groups=*/0, /*expected_owners=*/0,
                   /*expected_sellers=*/0);
 }
@@ -2273,7 +2275,7 @@
             result_.bidder1_prev_wins[3]->ad_json);
   EXPECT_EQ(-1, result_.bidder2_bid_count);
   EXPECT_EQ(0u, result_.bidder2_prev_wins.size());
-  CheckHistograms(AuctionRunner::AuctionResult::kSuccess,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kSuccess,
                   /*expected_interest_groups=*/1, /*expected_owners=*/1,
                   /*expected_sellers=*/1);
   EXPECT_THAT(observer_log_,
@@ -2427,7 +2429,7 @@
   EXPECT_EQ(R"({"render_url":"https://ad2.com/"})",
             res.bidder2_prev_wins[3]->ad_json);
   EXPECT_THAT(res.errors, testing::ElementsAre());
-  CheckHistograms(AuctionRunner::AuctionResult::kSuccess,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kSuccess,
                   /*expected_interest_groups=*/2, /*expected_owners=*/2,
                   /*expected_sellers=*/1);
   EXPECT_THAT(observer_log_,
@@ -2765,7 +2767,7 @@
   ASSERT_EQ(4u, result_.bidder2_prev_wins.size());
   EXPECT_EQ(R"({"render_url":"https://ad2.com/"})",
             result_.bidder2_prev_wins[3]->ad_json);
-  CheckHistograms(AuctionRunner::AuctionResult::kSuccess,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kSuccess,
                   /*expected_interest_groups=*/2, /*expected_owners=*/2,
                   /*expected_sellers=*/3);
 }
@@ -2805,7 +2807,7 @@
   ASSERT_EQ(4u, result_.bidder2_prev_wins.size());
   EXPECT_EQ(R"({"render_url":"https://ad2.com/"})",
             result_.bidder2_prev_wins[3]->ad_json);
-  CheckHistograms(AuctionRunner::AuctionResult::kSuccess,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kSuccess,
                   /*expected_interest_groups=*/2, /*expected_owners=*/2,
                   /*expected_sellers=*/1);
 }
@@ -2845,7 +2847,7 @@
   ASSERT_EQ(4u, result_.bidder2_prev_wins.size());
   EXPECT_EQ(R"({"render_url":"https://ad2.com/"})",
             result_.bidder2_prev_wins[3]->ad_json);
-  CheckHistograms(AuctionRunner::AuctionResult::kSuccess,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kSuccess,
                   /*expected_interest_groups=*/2, /*expected_owners=*/2,
                   /*expected_sellers=*/2);
 }
@@ -2890,7 +2892,7 @@
   ASSERT_EQ(4u, result_.bidder2_prev_wins.size());
   EXPECT_EQ(R"({"render_url":"https://ad2.com/"})",
             result_.bidder2_prev_wins[3]->ad_json);
-  CheckHistograms(AuctionRunner::AuctionResult::kSuccess,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kSuccess,
                   /*expected_interest_groups=*/2, /*expected_owners=*/2,
                   /*expected_sellers=*/2);
 }
@@ -3006,7 +3008,7 @@
             result_.bidder1_prev_wins[3]->ad_json);
   // Currently an interest groups participating twice in an auction is counted
   // twice.
-  CheckHistograms(AuctionRunner::AuctionResult::kSuccess,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kSuccess,
                   /*expected_interest_groups=*/2, /*expected_owners=*/2,
                   /*expected_sellers=*/2);
 
@@ -3062,7 +3064,7 @@
             result_.bidder1_prev_wins[3]->ad_json);
   // Currently a bidder participating twice in an auction is counted as two
   // participating interest groups.
-  CheckHistograms(AuctionRunner::AuctionResult::kSuccess,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kSuccess,
                   /*expected_interest_groups=*/3, /*expected_owners=*/3,
                   /*expected_sellers=*/3);
 }
@@ -3122,7 +3124,7 @@
   EXPECT_THAT(result_.errors, testing::ElementsAre());
 
   EXPECT_EQ("https://ad1.com/", result_.ad_url);
-  CheckHistograms(AuctionRunner::AuctionResult::kSuccess,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kSuccess,
                   /*expected_interest_groups=*/2, /*expected_owners=*/2,
                   /*expected_sellers=*/2);
 }
@@ -3169,7 +3171,7 @@
             result_.bidder1_prev_wins[3]->ad_json);
   EXPECT_EQ(6, result_.bidder2_bid_count);
   EXPECT_EQ(3u, result_.bidder2_prev_wins.size());
-  CheckHistograms(AuctionRunner::AuctionResult::kSuccess,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kSuccess,
                   /*expected_interest_groups=*/2, /*expected_owners=*/2,
                   /*expected_sellers=*/2);
 }
@@ -3269,7 +3271,7 @@
               ReportingDestination::kBuyer,
               testing::ElementsAre(testing::Pair(
                   "click", GURL("https://buyer-reporting.example.com/4"))))));
-  CheckHistograms(AuctionRunner::AuctionResult::kSuccess,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kSuccess,
                   /*expected_interest_groups=*/1, /*expected_owners=*/1,
                   /*expected_sellers=*/2);
 }
@@ -3368,7 +3370,7 @@
               ReportingDestination::kBuyer,
               testing::ElementsAre(testing::Pair(
                   "click", GURL("https://buyer-reporting.example.com/4"))))));
-  CheckHistograms(AuctionRunner::AuctionResult::kSuccess,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kSuccess,
                   /*expected_interest_groups=*/1, /*expected_owners=*/1,
                   /*expected_sellers=*/2);
 }
@@ -3392,7 +3394,7 @@
   EXPECT_EQ(3u, result_.bidder1_prev_wins.size());
   EXPECT_EQ(5, result_.bidder2_bid_count);
   EXPECT_EQ(3u, result_.bidder2_prev_wins.size());
-  CheckHistograms(AuctionRunner::AuctionResult::kSellerRejected,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kSellerRejected,
                   /*expected_interest_groups=*/absl::nullopt,
                   /*expected_owners=*/absl::nullopt,
                   /*expected_sellers=*/absl::nullopt);
@@ -3425,7 +3427,7 @@
   EXPECT_EQ(3u, result_.bidder1_prev_wins.size());
   EXPECT_EQ(5, result_.bidder2_bid_count);
   EXPECT_EQ(3u, result_.bidder2_prev_wins.size());
-  CheckHistograms(AuctionRunner::AuctionResult::kNoInterestGroups,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kNoInterestGroups,
                   /*expected_interest_groups=*/absl::nullopt,
                   /*expected_owners=*/absl::nullopt,
                   /*expected_sellers=*/absl::nullopt);
@@ -3481,7 +3483,7 @@
             result_.bidder1_prev_wins[3]->ad_json);
   EXPECT_EQ(5, result_.bidder2_bid_count);
   EXPECT_EQ(3u, result_.bidder2_prev_wins.size());
-  CheckHistograms(AuctionRunner::AuctionResult::kSuccess,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kSuccess,
                   /*expected_interest_groups=*/1, /*expected_owners=*/1,
                   /*expected_sellers=*/2);
 }
@@ -3506,7 +3508,7 @@
   EXPECT_EQ(3u, result_.bidder1_prev_wins.size());
   EXPECT_EQ(5, result_.bidder2_bid_count);
   EXPECT_EQ(3u, result_.bidder2_prev_wins.size());
-  CheckHistograms(AuctionRunner::AuctionResult::kNoInterestGroups,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kNoInterestGroups,
                   /*expected_interest_groups=*/absl::nullopt,
                   /*expected_owners=*/absl::nullopt,
                   /*expected_sellers=*/absl::nullopt);
@@ -3561,7 +3563,7 @@
             result_.bidder1_prev_wins[3]->ad_json);
   EXPECT_EQ(5, result_.bidder2_bid_count);
   EXPECT_EQ(3u, result_.bidder2_prev_wins.size());
-  CheckHistograms(AuctionRunner::AuctionResult::kSuccess,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kSuccess,
                   /*expected_interest_groups=*/1, /*expected_owners=*/1,
                   /*expected_sellers=*/1);
 
@@ -3595,7 +3597,7 @@
   EXPECT_EQ(3u, result_.bidder1_prev_wins.size());
   EXPECT_EQ(5, result_.bidder2_bid_count);
   EXPECT_EQ(3u, result_.bidder2_prev_wins.size());
-  CheckHistograms(AuctionRunner::AuctionResult::kNoInterestGroups,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kNoInterestGroups,
                   /*expected_interest_groups=*/absl::nullopt,
                   /*expected_owners=*/absl::nullopt,
                   /*expected_sellers=*/absl::nullopt);
@@ -3646,7 +3648,7 @@
             result_.bidder1_prev_wins[3]->ad_json);
   EXPECT_EQ(5, result_.bidder2_bid_count);
   EXPECT_EQ(3u, result_.bidder2_prev_wins.size());
-  CheckHistograms(AuctionRunner::AuctionResult::kSuccess,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kSuccess,
                   /*expected_interest_groups=*/1, /*expected_owners=*/1,
                   /*expected_sellers=*/2);
 }
@@ -3685,7 +3687,7 @@
   EXPECT_THAT(result_.errors, testing::ElementsAre());
   EXPECT_EQ(InterestGroupKey(kBidder2, kBidder2Name), result_.winning_group_id);
   EXPECT_EQ(GURL("https://ad2.com/"), result_.ad_url);
-  CheckHistograms(AuctionRunner::AuctionResult::kSuccess,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kSuccess,
                   /*expected_interest_groups=*/2, /*expected_owners=*/2,
                   /*expected_sellers=*/1);
 }
@@ -3740,7 +3742,7 @@
       res.errors,
       testing::ElementsAre("Failed to load https://anotheradthing.com/bids.js "
                            "HTTP status = 404 Not Found."));
-  CheckHistograms(AuctionRunner::AuctionResult::kSuccess,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kSuccess,
                   /*expected_interest_groups=*/2, /*expected_owners=*/2,
                   /*expected_sellers=*/1);
 
@@ -3796,7 +3798,7 @@
   // The bid send to the failing component seller worklet isn't counted,
   // regardless of whether the bid completed before the worklet failed to load.
   EXPECT_EQ(5, result_.bidder2_bid_count);
-  CheckHistograms(AuctionRunner::AuctionResult::kSuccess,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kSuccess,
                   /*expected_interest_groups=*/2, /*expected_owners=*/2,
                   /*expected_sellers=*/3);
 }
@@ -3854,7 +3856,7 @@
   EXPECT_THAT(res.errors,
               testing::ElementsAre("https://anotheradthing.com/bids.js "
                                    "`generateBid` is not a function."));
-  CheckHistograms(AuctionRunner::AuctionResult::kSuccess,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kSuccess,
                   /*expected_interest_groups=*/2, /*expected_owners=*/2,
                   /*expected_sellers=*/1);
 }
@@ -3892,7 +3894,7 @@
                   "HTTP status = 404 Not Found.",
                   "Failed to load https://anotheradthing.com/bids.js "
                   "HTTP status = 404 Not Found."));
-  CheckHistograms(AuctionRunner::AuctionResult::kNoBids,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kNoBids,
                   /*expected_interest_groups=*/2, /*expected_owners=*/2,
                   /*expected_sellers=*/1);
 }
@@ -3933,7 +3935,7 @@
           "https://adplatform.com/offers.js `generateBid` is not a function.",
           "https://anotheradthing.com/bids.js `generateBid` is not a "
           "function."));
-  CheckHistograms(AuctionRunner::AuctionResult::kNoBids,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kNoBids,
                   /*expected_interest_groups=*/2, /*expected_owners=*/2,
                   /*expected_sellers=*/1);
 }
@@ -3981,7 +3983,7 @@
                               "`scoreAd` is not a function.",
                               "https://adstuff.publisher1.com/auction.js "
                               "`scoreAd` is not a function."));
-  CheckHistograms(AuctionRunner::AuctionResult::kAllBidsRejected,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kAllBidsRejected,
                   /*expected_interest_groups=*/2, /*expected_owners=*/2,
                   /*expected_sellers=*/1);
 }
@@ -4037,7 +4039,7 @@
   EXPECT_EQ(6, res.bidder2_bid_count);
   EXPECT_EQ(3u, res.bidder2_prev_wins.size());
   EXPECT_THAT(res.errors, testing::ElementsAre());
-  CheckHistograms(AuctionRunner::AuctionResult::kSuccess,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kSuccess,
                   /*expected_interest_groups=*/2, /*expected_owners=*/2,
                   /*expected_sellers=*/1);
 }
@@ -4063,7 +4065,7 @@
               testing::ElementsAre(
                   "Failed to load https://adstuff.publisher1.com/auction.js "
                   "HTTP status = 404 Not Found."));
-  CheckHistograms(AuctionRunner::AuctionResult::kSellerWorkletLoadFailed,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kSellerWorkletLoadFailed,
                   /*expected_interest_groups=*/2, /*expected_owners=*/2,
                   /*expected_sellers=*/1);
 }
@@ -4117,7 +4119,7 @@
   EXPECT_EQ(R"({"render_url":"https://ad2.com/"})",
             res.bidder2_prev_wins[3]->ad_json);
   EXPECT_THAT(res.errors, testing::ElementsAre());
-  CheckHistograms(AuctionRunner::AuctionResult::kSuccess,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kSuccess,
                   /*expected_interest_groups=*/2, /*expected_owners=*/2,
                   /*expected_sellers=*/1);
 }
@@ -4177,7 +4179,7 @@
                               "https://anotheradthing.com/"
                               "signals2?hostname=publisher1.com&keys=l1,l2 "
                               "HTTP status = 404 Not Found."));
-  CheckHistograms(AuctionRunner::AuctionResult::kSuccess,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kSuccess,
                   /*expected_interest_groups=*/2, /*expected_owners=*/2,
                   /*expected_sellers=*/1);
 }
@@ -4227,7 +4229,7 @@
   EXPECT_EQ(R"({"render_url":"https://ad2.com/"})",
             res.bidder2_prev_wins[3]->ad_json);
   EXPECT_THAT(res.errors, testing::ElementsAre());
-  CheckHistograms(AuctionRunner::AuctionResult::kSuccess,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kSuccess,
                   /*expected_interest_groups=*/2, /*expected_owners=*/2,
                   /*expected_sellers=*/1);
 }
@@ -4278,7 +4280,7 @@
   EXPECT_EQ(R"({"render_url":"https://ad2.com/"})",
             res.bidder2_prev_wins[3]->ad_json);
   EXPECT_THAT(res.errors, testing::ElementsAre());
-  CheckHistograms(AuctionRunner::AuctionResult::kSuccess,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kSuccess,
                   /*expected_interest_groups=*/2, /*expected_owners=*/2,
                   /*expected_sellers=*/1);
 }
@@ -4324,7 +4326,7 @@
   EXPECT_EQ(R"({"render_url":"https://ad2.com/"})",
             res.bidder2_prev_wins[3]->ad_json);
   EXPECT_THAT(res.errors, testing::ElementsAre());
-  CheckHistograms(AuctionRunner::AuctionResult::kSuccess,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kSuccess,
                   /*expected_interest_groups=*/2, /*expected_owners=*/2,
                   /*expected_sellers=*/1);
 }
@@ -4380,7 +4382,7 @@
   EXPECT_THAT(res.errors, testing::ElementsAre(base::StringPrintf(
                               "%s `reportResult` is not a function.",
                               kSellerUrl.spec().c_str())));
-  CheckHistograms(AuctionRunner::AuctionResult::kSuccess,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kSuccess,
                   /*expected_interest_groups=*/2, /*expected_owners=*/2,
                   /*expected_sellers=*/1);
 }
@@ -4505,7 +4507,7 @@
             result_.bidder1_prev_wins[3]->ad_json);
   EXPECT_EQ(6, result_.bidder2_bid_count);
   ASSERT_EQ(3u, result_.bidder2_prev_wins.size());
-  CheckHistograms(AuctionRunner::AuctionResult::kSuccess,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kSuccess,
                   /*expected_interest_groups=*/2, /*expected_owners=*/2,
                   /*expected_sellers=*/1);
 }
@@ -4663,7 +4665,7 @@
       ASSERT_EQ(4u, result_.bidder2_prev_wins.size());
       EXPECT_EQ(R"({"render_url":"https://ad2.com/"})",
                 result_.bidder2_prev_wins[3]->ad_json);
-      CheckHistograms(AuctionRunner::AuctionResult::kSuccess,
+      CheckHistograms(InterestGroupAuction::AuctionResult::kSuccess,
                       /*expected_interest_groups=*/2,
                       /*expected_owners=*/2, /*expected_sellers=*/1);
     }
@@ -4833,7 +4835,7 @@
                   testing::ElementsAre(testing::Pair(
                       "click",
                       GURL("https://buyer-reporting.example.com/4"))))));
-      CheckHistograms(AuctionRunner::AuctionResult::kSuccess,
+      CheckHistograms(InterestGroupAuction::AuctionResult::kSuccess,
                       /*expected_interest_groups=*/2, /*expected_owners=*/2,
                       /*expected_sellers=*/3);
     }
@@ -4882,7 +4884,7 @@
   EXPECT_EQ(3u, result_.bidder1_prev_wins.size());
   EXPECT_EQ(5, result_.bidder2_bid_count);
   ASSERT_EQ(3u, result_.bidder2_prev_wins.size());
-  CheckHistograms(AuctionRunner::AuctionResult::kSellerWorkletLoadFailed,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kSellerWorkletLoadFailed,
                   /*expected_interest_groups=*/2, /*expected_owners=*/2,
                   /*expected_sellers=*/1);
 }
@@ -4986,7 +4988,7 @@
               ReportingDestination::kBuyer,
               testing::ElementsAre(testing::Pair(
                   "click", GURL("https://buyer-reporting.example.com/4"))))));
-  CheckHistograms(AuctionRunner::AuctionResult::kSuccess,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kSuccess,
                   /*expected_interest_groups=*/2, /*expected_owners=*/2,
                   /*expected_sellers=*/3);
 }
@@ -5134,7 +5136,7 @@
   EXPECT_EQ(5, result_.bidder2_bid_count);
   EXPECT_EQ(3u, result_.bidder2_prev_wins.size());
 
-  CheckHistograms(AuctionRunner::AuctionResult::kNoBids,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kNoBids,
                   /*expected_interest_groups=*/2, /*expected_owners=*/2,
                   /*expected_sellers=*/1);
 }
@@ -5236,7 +5238,7 @@
     ASSERT_EQ(4u, result_.bidder2_prev_wins.size());
     EXPECT_EQ(R"({"render_url":"https://ad2.com/"})",
               result_.bidder2_prev_wins[3]->ad_json);
-    CheckHistograms(AuctionRunner::AuctionResult::kSuccess,
+    CheckHistograms(InterestGroupAuction::AuctionResult::kSuccess,
                     /*expected_interest_groups=*/2, /*expected_owners=*/2,
                     /*expected_sellers=*/1);
   }
@@ -5312,9 +5314,10 @@
   EXPECT_EQ(3u, result_.bidder1_prev_wins.size());
   EXPECT_EQ(6, result_.bidder2_bid_count);
   EXPECT_EQ(3u, result_.bidder2_prev_wins.size());
-  CheckHistograms(AuctionRunner::AuctionResult::kWinningBidderWorkletCrashed,
-                  /*expected_interest_groups=*/2, /*expected_owners=*/2,
-                  /*expected_sellers=*/1);
+  CheckHistograms(
+      InterestGroupAuction::AuctionResult::kWinningBidderWorkletCrashed,
+      /*expected_interest_groups=*/2, /*expected_owners=*/2,
+      /*expected_sellers=*/1);
 }
 
 // Should not have any debugging win/loss report URLs after auction when feature
@@ -5450,7 +5453,7 @@
       EXPECT_EQ(6, result_.bidder2_bid_count);
       EXPECT_EQ(3u, result_.bidder2_prev_wins.size());
     }
-    CheckHistograms(AuctionRunner::AuctionResult::kSellerWorkletCrashed,
+    CheckHistograms(InterestGroupAuction::AuctionResult::kSellerWorkletCrashed,
                     /*expected_interest_groups=*/2, /*expected_owners=*/2,
                     /*expected_sellers=*/1);
   }
@@ -5485,7 +5488,7 @@
                              kBidder2Url.spec().c_str())));
   EXPECT_FALSE(result_.ad_url);
 
-  CheckHistograms(AuctionRunner::AuctionResult::kNoBids,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kNoBids,
                   /*expected_interest_groups=*/2, /*expected_owners=*/2,
                   /*expected_sellers=*/3);
 }
@@ -5583,7 +5586,7 @@
                                             GURL("https://report3.test/")));
   EXPECT_EQ(5, result_.bidder1_bid_count);
   EXPECT_EQ(6, result_.bidder2_bid_count);
-  CheckHistograms(AuctionRunner::AuctionResult::kSuccess,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kSuccess,
                   /*expected_interest_groups=*/2, /*expected_owners=*/2,
                   /*expected_sellers=*/2);
 }
@@ -5684,10 +5687,10 @@
                       kComponentSeller1Url.spec().c_str())));
       EXPECT_FALSE(result_.ad_url);
       EXPECT_EQ(6, result_.bidder1_bid_count);
-      CheckHistograms(
-          AuctionRunner::AuctionResult::kWinningComponentSellerWorkletCrashed,
-          /*expected_interest_groups=*/2, /*expected_owners=*/2,
-          /*expected_sellers=*/2);
+      CheckHistograms(InterestGroupAuction::AuctionResult::
+                          kWinningComponentSellerWorkletCrashed,
+                      /*expected_interest_groups=*/2, /*expected_owners=*/2,
+                      /*expected_sellers=*/2);
     } else if (test_case == TestCase::kLoadError) {
       // A load error in the winning component seller worklet will cause the
       // auction to continue to completion.
@@ -5711,7 +5714,7 @@
                   testing::UnorderedElementsAre(GURL("https://report1.test/"),
                                                 GURL("https://report3.test/")));
       EXPECT_EQ(6, result_.bidder1_bid_count);
-      CheckHistograms(AuctionRunner::AuctionResult::kSuccess,
+      CheckHistograms(InterestGroupAuction::AuctionResult::kSuccess,
                       /*expected_interest_groups=*/2, /*expected_owners=*/2,
                       /*expected_sellers=*/2);
     } else if (test_case == TestCase::kScriptError) {
@@ -5738,7 +5741,7 @@
                   testing::UnorderedElementsAre(GURL("https://report1.test/"),
                                                 GURL("https://report3.test/")));
       EXPECT_EQ(6, result_.bidder1_bid_count);
-      CheckHistograms(AuctionRunner::AuctionResult::kSuccess,
+      CheckHistograms(InterestGroupAuction::AuctionResult::kSuccess,
                       /*expected_interest_groups=*/2, /*expected_owners=*/2,
                       /*expected_sellers=*/2);
     }
@@ -5780,7 +5783,7 @@
   EXPECT_FALSE(result_.ad_url);
   EXPECT_EQ(5, result_.bidder1_bid_count);
   EXPECT_EQ(5, result_.bidder2_bid_count);
-  CheckHistograms(AuctionRunner::AuctionResult::kNoBids,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kNoBids,
                   /*expected_interest_groups=*/2, /*expected_owners=*/2,
                   /*expected_sellers=*/3);
 }
@@ -5874,7 +5877,7 @@
 
     // The component auction failed with a Mojo error, but the top-level auction
     // sees that as no bids.
-    CheckHistograms(AuctionRunner::AuctionResult::kNoBids,
+    CheckHistograms(InterestGroupAuction::AuctionResult::kNoBids,
                     /*expected_interest_groups=*/2, /*expected_owners=*/2,
                     /*expected_sellers=*/2);
   }
@@ -5932,7 +5935,7 @@
   EXPECT_EQ(5, result_.bidder1_bid_count);
   EXPECT_EQ(5, result_.bidder2_bid_count);
 
-  CheckHistograms(AuctionRunner::AuctionResult::kBadMojoMessage,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kBadMojoMessage,
                   /*expected_interest_groups=*/2, /*expected_owners=*/2,
                   /*expected_sellers=*/1);
 }
@@ -6004,7 +6007,7 @@
       ASSERT_EQ(4u, result_.bidder1_prev_wins.size());
       EXPECT_EQ(R"({"render_url":"https://ad1.com/","metadata":{"ads": true}})",
                 result_.bidder1_prev_wins[3]->ad_json);
-      CheckHistograms(AuctionRunner::AuctionResult::kSuccess,
+      CheckHistograms(InterestGroupAuction::AuctionResult::kSuccess,
                       /*expected_interest_groups=*/1,
                       /*expected_owners=*/1, /*expected_sellers=*/1);
     } else {
@@ -6023,7 +6026,7 @@
       EXPECT_TRUE(result_.ad_beacon_map.metadata.empty());
       EXPECT_EQ(5, result_.bidder1_bid_count);
       EXPECT_EQ(3u, result_.bidder1_prev_wins.size());
-      CheckHistograms(AuctionRunner::AuctionResult::kNoBids,
+      CheckHistograms(InterestGroupAuction::AuctionResult::kNoBids,
                       /*expected_interest_groups=*/1, /*expected_owners=*/1,
                       /*expected_sellers=*/1);
     }
@@ -6095,7 +6098,7 @@
       ASSERT_EQ(4u, result_.bidder1_prev_wins.size());
       EXPECT_EQ(R"({"render_url":"https://ad1.com/","metadata":{"ads": true}})",
                 result_.bidder1_prev_wins[3]->ad_json);
-      CheckHistograms(AuctionRunner::AuctionResult::kSuccess,
+      CheckHistograms(InterestGroupAuction::AuctionResult::kSuccess,
                       /*expected_interest_groups=*/1,
                       /*expected_owners=*/1, /*expected_sellers=*/1);
     } else {
@@ -6114,7 +6117,7 @@
       EXPECT_TRUE(result_.ad_beacon_map.metadata.empty());
       EXPECT_EQ(5, result_.bidder1_bid_count);
       EXPECT_EQ(3u, result_.bidder1_prev_wins.size());
-      CheckHistograms(AuctionRunner::AuctionResult::kNoBids,
+      CheckHistograms(InterestGroupAuction::AuctionResult::kNoBids,
                       /*expected_interest_groups=*/1, /*expected_owners=*/1,
                       /*expected_sellers=*/1);
     }
@@ -6267,7 +6270,7 @@
     EXPECT_EQ(3u, result_.bidder1_prev_wins.size());
     EXPECT_EQ(5, result_.bidder2_bid_count);
     EXPECT_EQ(3u, result_.bidder2_prev_wins.size());
-    CheckHistograms(AuctionRunner::AuctionResult::kNoBids,
+    CheckHistograms(InterestGroupAuction::AuctionResult::kNoBids,
                     /*expected_interest_groups=*/2, /*expected_owners=*/2,
                     /*expected_sellers=*/1);
   }
@@ -6322,7 +6325,7 @@
   EXPECT_EQ(3u, result_.bidder1_prev_wins.size());
   EXPECT_EQ(5, result_.bidder2_bid_count);
   EXPECT_EQ(3u, result_.bidder2_prev_wins.size());
-  CheckHistograms(AuctionRunner::AuctionResult::kBadMojoMessage,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kBadMojoMessage,
                   /*expected_interest_groups=*/2, /*expected_owners=*/2,
                   /*expected_sellers=*/1);
 }
@@ -6378,7 +6381,7 @@
   EXPECT_EQ(3u, result_.bidder1_prev_wins.size());
   EXPECT_EQ(5, result_.bidder2_bid_count);
   EXPECT_EQ(3u, result_.bidder2_prev_wins.size());
-  CheckHistograms(AuctionRunner::AuctionResult::kBadMojoMessage,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kBadMojoMessage,
                   /*expected_interest_groups=*/2, /*expected_owners=*/2,
                   /*expected_sellers=*/1);
 }
@@ -6464,7 +6467,7 @@
   EXPECT_EQ(3u, result_.bidder1_prev_wins.size());
   EXPECT_EQ(5, result_.bidder2_bid_count);
   EXPECT_EQ(3u, result_.bidder2_prev_wins.size());
-  CheckHistograms(AuctionRunner::AuctionResult::kBadMojoMessage,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kBadMojoMessage,
                   /*expected_interest_groups=*/2, /*expected_owners=*/2,
                   /*expected_sellers=*/2);
 }
@@ -6522,7 +6525,7 @@
   EXPECT_EQ(3u, result_.bidder1_prev_wins.size());
   EXPECT_EQ(5, result_.bidder2_bid_count);
   EXPECT_EQ(3u, result_.bidder2_prev_wins.size());
-  CheckHistograms(AuctionRunner::AuctionResult::kBadMojoMessage,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kBadMojoMessage,
                   /*expected_interest_groups=*/2, /*expected_owners=*/2,
                   /*expected_sellers=*/1);
 }
@@ -6582,7 +6585,7 @@
   EXPECT_EQ(3u, result_.bidder1_prev_wins.size());
   EXPECT_EQ(5, result_.bidder2_bid_count);
   EXPECT_EQ(3u, result_.bidder2_prev_wins.size());
-  CheckHistograms(AuctionRunner::AuctionResult::kBadMojoMessage,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kBadMojoMessage,
                   /*expected_interest_groups=*/2, /*expected_owners=*/2,
                   /*expected_sellers=*/1);
 }
@@ -6643,7 +6646,7 @@
   ASSERT_EQ(4u, result_.bidder2_prev_wins.size());
   EXPECT_EQ(R"({"render_url":"https://ad2.com/"})",
             result_.bidder2_prev_wins[3]->ad_json);
-  CheckHistograms(AuctionRunner::AuctionResult::kSuccess,
+  CheckHistograms(InterestGroupAuction::AuctionResult::kSuccess,
                   /*expected_interest_groups=*/2, /*expected_owners=*/2,
                   /*expected_sellers=*/1);
 }
@@ -6746,7 +6749,7 @@
     EXPECT_TRUE(result_.ad_beacon_map.metadata.empty());
     EXPECT_EQ(6, result_.bidder1_bid_count);
     EXPECT_EQ(6, result_.bidder2_bid_count);
-    CheckHistograms(AuctionRunner::AuctionResult::kSuccess,
+    CheckHistograms(InterestGroupAuction::AuctionResult::kSuccess,
                     /*expected_interest_groups=*/2, /*expected_owners=*/2,
                     /*expected_sellers=*/1);
   }
diff --git a/content/browser/interest_group/interest_group_auction.cc b/content/browser/interest_group/interest_group_auction.cc
new file mode 100644
index 0000000..ba85de5
--- /dev/null
+++ b/content/browser/interest_group/interest_group_auction.cc
@@ -0,0 +1,1686 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/browser/interest_group/interest_group_auction.h"
+
+#include <stdint.h>
+
+#include <algorithm>
+#include <string>
+#include <vector>
+
+#include "base/callback.h"
+#include "base/containers/cxx20_erase_vector.h"
+#include "base/location.h"
+#include "base/memory/ptr_util.h"
+#include "base/metrics/histogram_macros.h"
+#include "base/rand_util.h"
+#include "base/strings/escape.h"
+#include "base/strings/strcat.h"
+#include "base/strings/string_number_conversions.h"
+#include "base/threading/sequenced_task_runner_handle.h"
+#include "base/time/time.h"
+#include "base/trace_event/trace_event.h"
+#include "base/trace_event/trace_id_helper.h"
+#include "content/browser/interest_group/auction_process_manager.h"
+#include "content/browser/interest_group/auction_url_loader_factory_proxy.h"
+#include "content/browser/interest_group/auction_worklet_manager.h"
+#include "content/browser/interest_group/debuggable_auction_worklet.h"
+#include "content/browser/interest_group/interest_group_manager_impl.h"
+#include "content/browser/interest_group/storage_interest_group.h"
+#include "content/public/browser/content_browser_client.h"
+#include "content/services/auction_worklet/public/mojom/bidder_worklet.mojom.h"
+#include "content/services/auction_worklet/public/mojom/seller_worklet.mojom.h"
+#include "services/network/public/mojom/client_security_state.mojom.h"
+#include "services/network/public/mojom/url_loader_factory.mojom-forward.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
+#include "third_party/blink/public/common/interest_group/ad_auction_constants.h"
+#include "third_party/blink/public/common/interest_group/auction_config.h"
+#include "third_party/blink/public/common/interest_group/interest_group.h"
+#include "third_party/blink/public/mojom/interest_group/interest_group_types.mojom.h"
+#include "url/gurl.h"
+#include "url/origin.h"
+
+namespace content {
+
+namespace {
+
+using blink::mojom::ReportingDestination;
+constexpr base::TimeDelta kMaxTimeout = base::Milliseconds(500);
+
+// For group freshness metrics.
+constexpr base::TimeDelta kGroupFreshnessMin = base::Minutes(1);
+constexpr base::TimeDelta kGroupFreshnessMax = base::Days(30);
+constexpr int kGroupFreshnessBuckets = 100;
+
+// All URLs received from worklets must be valid HTTPS URLs. It's up to callers
+// to call ReportBadMessage() on invalid URLs.
+bool IsUrlValid(const GURL& url) {
+  return url.is_valid() && url.SchemeIs(url::kHttpsScheme);
+}
+
+// Finds InterestGroup::Ad in `ads` that matches `render_url`, if any. Returns
+// nullptr if `render_url` is invalid.
+const blink::InterestGroup::Ad* FindMatchingAd(
+    const std::vector<blink::InterestGroup::Ad>& ads,
+    const GURL& render_url) {
+  // TODO(mmenke): Validate render URLs on load and make this a DCHECK just
+  // before the return instead, since then `ads` will necessarily only contain
+  // valid URLs at that point.
+  if (!IsUrlValid(render_url))
+    return nullptr;
+
+  for (const auto& ad : ads) {
+    if (ad.render_url == render_url) {
+      return &ad;
+    }
+  }
+
+  return nullptr;
+}
+
+// Checks that `bid` is a valid bid value for an auction.
+bool IsValidBid(double bid) {
+  return !std::isnan(bid) && std::isfinite(bid) && bid > 0;
+}
+
+struct StorageInterestGroupDescByPriority {
+  bool operator()(const StorageInterestGroup& a,
+                  const StorageInterestGroup& b) {
+    return a.interest_group.priority > b.interest_group.priority;
+  }
+  bool operator()(const StorageInterestGroup& a, double b_priority) {
+    return a.interest_group.priority > b_priority;
+  }
+  bool operator()(double a_priority, const StorageInterestGroup& b) {
+    return a_priority > b.interest_group.priority;
+  }
+};
+
+}  // namespace
+
+InterestGroupAuction::BidState::BidState() = default;
+
+InterestGroupAuction::BidState::~BidState() {
+  if (trace_id.has_value())
+    EndTracing();
+}
+
+InterestGroupAuction::BidState::BidState(BidState&&) = default;
+
+void InterestGroupAuction::BidState::BeginTracing() {
+  DCHECK(!trace_id.has_value());
+
+  trace_id = base::trace_event::GetNextGlobalTraceId();
+
+  const blink::InterestGroup& interest_group = bidder.interest_group;
+  TRACE_EVENT_NESTABLE_ASYNC_BEGIN2("fledge", "bid", *trace_id, "bidding_url",
+                                    interest_group.bidding_url,
+                                    "interest_group_name", interest_group.name);
+}
+
+void InterestGroupAuction::BidState::EndTracing() {
+  DCHECK(trace_id.has_value());
+
+  TRACE_EVENT_NESTABLE_ASYNC_END0("fledge", "bid", *trace_id);
+  trace_id = absl::nullopt;
+}
+
+InterestGroupAuction::Bid::Bid(
+    std::string ad_metadata,
+    double bid,
+    GURL render_url,
+    std::vector<GURL> ad_components,
+    base::TimeDelta bid_duration,
+    absl::optional<uint32_t> bidding_signals_data_version,
+    const blink::InterestGroup::Ad* bid_ad,
+    BidState* bid_state,
+    InterestGroupAuction* auction)
+    : ad_metadata(std::move(ad_metadata)),
+      bid(bid),
+      render_url(std::move(render_url)),
+      ad_components(std::move(ad_components)),
+      bid_duration(bid_duration),
+      bidding_signals_data_version(bidding_signals_data_version),
+      interest_group(&bid_state->bidder.interest_group),
+      bid_ad(bid_ad),
+      bid_state(bid_state),
+      auction(auction) {
+  DCHECK(IsValidBid(bid));
+}
+
+InterestGroupAuction::Bid::Bid(Bid&) = default;
+
+InterestGroupAuction::Bid::~Bid() = default;
+
+InterestGroupAuction::ScoredBid::ScoredBid(
+    double score,
+    absl::optional<uint32_t> scoring_signals_data_version,
+    std::unique_ptr<Bid> bid,
+    auction_worklet::mojom::ComponentAuctionModifiedBidParamsPtr
+        component_auction_modified_bid_params)
+    : score(score),
+      scoring_signals_data_version(scoring_signals_data_version),
+      bid(std::move(bid)),
+      component_auction_modified_bid_params(
+          std::move(component_auction_modified_bid_params)) {
+  DCHECK_GT(score, 0);
+}
+
+InterestGroupAuction::ScoredBid::~ScoredBid() = default;
+
+InterestGroupAuction::InterestGroupAuction(
+    const blink::AuctionConfig* config,
+    const InterestGroupAuction* parent,
+    AuctionWorkletManager* auction_worklet_manager,
+    InterestGroupManagerImpl* interest_group_manager,
+    base::Time auction_start_time)
+    : trace_id_(base::trace_event::GetNextGlobalTraceId()),
+      auction_worklet_manager_(auction_worklet_manager),
+      interest_group_manager_(interest_group_manager),
+      config_(config),
+      parent_(parent),
+      auction_start_time_(auction_start_time) {
+  TRACE_EVENT_NESTABLE_ASYNC_BEGIN1("fledge", "auction", trace_id_,
+                                    "decision_logic_url",
+                                    config_->decision_logic_url);
+
+  for (const auto& component_auction_config :
+       config->non_shared_params.component_auctions) {
+    // Nested component auctions are not supported.
+    DCHECK(!parent_);
+    component_auctions_.emplace_back(std::make_unique<InterestGroupAuction>(
+        &component_auction_config, /*parent=*/this, auction_worklet_manager,
+        interest_group_manager, auction_start_time));
+  }
+}
+
+InterestGroupAuction::~InterestGroupAuction() {
+  TRACE_EVENT_NESTABLE_ASYNC_END0("fledge", "auction", trace_id_);
+
+  if (!final_auction_result_)
+    final_auction_result_ = AuctionResult::kAborted;
+
+  // TODO(mmenke): Record histograms for component auctions.
+  if (!parent_) {
+    UMA_HISTOGRAM_ENUMERATION("Ads.InterestGroup.Auction.Result",
+                              *final_auction_result_);
+
+    // Only record time of full auctions and aborts.
+    switch (*final_auction_result_) {
+      case AuctionResult::kAborted:
+        UMA_HISTOGRAM_MEDIUM_TIMES("Ads.InterestGroup.Auction.AbortTime",
+                                   base::Time::Now() - auction_start_time_);
+        break;
+      case AuctionResult::kNoBids:
+      case AuctionResult::kAllBidsRejected:
+        UMA_HISTOGRAM_MEDIUM_TIMES(
+            "Ads.InterestGroup.Auction.CompletedWithoutWinnerTime",
+            base::Time::Now() - auction_start_time_);
+        break;
+      case AuctionResult::kSuccess:
+        UMA_HISTOGRAM_MEDIUM_TIMES(
+            "Ads.InterestGroup.Auction.AuctionWithWinnerTime",
+            base::Time::Now() - auction_start_time_);
+        break;
+      default:
+        break;
+    }
+  }
+}
+
+void InterestGroupAuction::StartLoadInterestGroupsPhase(
+    IsInterestGroupApiAllowedCallback is_interest_group_api_allowed_callback,
+    AuctionPhaseCompletionCallback load_interest_groups_phase_callback) {
+  DCHECK(is_interest_group_api_allowed_callback);
+  DCHECK(load_interest_groups_phase_callback);
+  DCHECK(bid_states_.empty());
+  DCHECK(!load_interest_groups_phase_callback_);
+  DCHECK(!bidding_and_scoring_phase_callback_);
+  DCHECK(!reporting_phase_callback_);
+  DCHECK(!final_auction_result_);
+  DCHECK_EQ(num_pending_loads_, 0u);
+
+  TRACE_EVENT_NESTABLE_ASYNC_BEGIN0("fledge", "load_groups_phase", trace_id_);
+
+  load_interest_groups_phase_callback_ =
+      std::move(load_interest_groups_phase_callback);
+
+  // If the seller can't participate in the auction, fail the auction.
+  if (!is_interest_group_api_allowed_callback.Run(
+          ContentBrowserClient::InterestGroupApiOperation::kSell,
+          config_->seller)) {
+    base::SequencedTaskRunnerHandle::Get()->PostTask(
+        FROM_HERE,
+        base::BindOnce(
+            &InterestGroupAuction::OnStartLoadInterestGroupsPhaseComplete,
+            weak_ptr_factory_.GetWeakPtr(), AuctionResult::kSellerRejected));
+    return;
+  }
+
+  for (auto component_auction = component_auctions_.begin();
+       component_auction != component_auctions_.end(); ++component_auction) {
+    (*component_auction)
+        ->StartLoadInterestGroupsPhase(
+            is_interest_group_api_allowed_callback,
+            base::BindOnce(&InterestGroupAuction::OnComponentInterestGroupsRead,
+                           weak_ptr_factory_.GetWeakPtr(), component_auction));
+    ++num_pending_loads_;
+  }
+
+  if (config_->non_shared_params.interest_group_buyers) {
+    for (const auto& buyer :
+         *config_->non_shared_params.interest_group_buyers) {
+      if (!is_interest_group_api_allowed_callback.Run(
+              ContentBrowserClient::InterestGroupApiOperation::kBuy, buyer)) {
+        continue;
+      }
+      interest_group_manager_->GetInterestGroupsForOwner(
+          buyer, base::BindOnce(&InterestGroupAuction::OnInterestGroupRead,
+                                weak_ptr_factory_.GetWeakPtr()));
+      ++num_pending_loads_;
+    }
+  }
+
+  // Fail if there are no pending loads.
+  if (num_pending_loads_ == 0) {
+    base::SequencedTaskRunnerHandle::Get()->PostTask(
+        FROM_HERE,
+        base::BindOnce(
+            &InterestGroupAuction::OnStartLoadInterestGroupsPhaseComplete,
+            weak_ptr_factory_.GetWeakPtr(), AuctionResult::kNoInterestGroups));
+  }
+}
+
+void InterestGroupAuction::StartBiddingAndScoringPhase(
+    base::OnceClosure on_seller_receiver_callback,
+    AuctionPhaseCompletionCallback bidding_and_scoring_phase_callback) {
+  DCHECK(bidding_and_scoring_phase_callback);
+  DCHECK(!bid_states_.empty() || !component_auctions_.empty());
+  DCHECK(!on_seller_receiver_callback_);
+  DCHECK(!load_interest_groups_phase_callback_);
+  DCHECK(!bidding_and_scoring_phase_callback_);
+  DCHECK(!reporting_phase_callback_);
+  DCHECK(!final_auction_result_);
+  DCHECK(!top_bid_);
+  DCHECK_EQ(pending_component_seller_worklet_requests_, 0u);
+
+  TRACE_EVENT_NESTABLE_ASYNC_BEGIN0("fledge", "bidding_and_scoring_phase",
+                                    trace_id_);
+
+  on_seller_receiver_callback_ = std::move(on_seller_receiver_callback);
+  bidding_and_scoring_phase_callback_ =
+      std::move(bidding_and_scoring_phase_callback);
+
+  num_bids_not_sent_to_seller_worklet_ =
+      bid_states_.size() + component_auctions_.size();
+  outstanding_bids_ = num_bids_not_sent_to_seller_worklet_;
+
+  // Need to start loading worklets before any bids can be generated or scored.
+
+  if (component_auctions_.empty()) {
+    // If there are no component auctions, request the seller worklet.
+    // Otherwise, the seller worklet will be requested once all component
+    // auctions have received their own seller worklets.
+    RequestSellerWorklet();
+  } else {
+    // Since component auctions may invoke OnComponentSellerWorkletReceived()
+    // synchronously, it's important to set this to the total number of
+    // component auctions before invoking StartBiddingAndScoringPhase() on any
+    // component auction.
+    pending_component_seller_worklet_requests_ = component_auctions_.size();
+    for (auto& component_auction : component_auctions_) {
+      component_auction->StartBiddingAndScoringPhase(
+          base::BindOnce(
+              &InterestGroupAuction::OnComponentSellerWorkletReceived,
+              base::Unretained(this)),
+          base::BindOnce(&InterestGroupAuction::OnComponentAuctionComplete,
+                         base::Unretained(this), component_auction.get()));
+    }
+  }
+  RequestBidderWorklets();
+}
+
+void InterestGroupAuction::StartReportingPhase(
+    absl::optional<std::string> top_seller_signals,
+    AuctionPhaseCompletionCallback reporting_phase_callback) {
+  DCHECK(reporting_phase_callback);
+  DCHECK(!load_interest_groups_phase_callback_);
+  DCHECK(!bidding_and_scoring_phase_callback_);
+  DCHECK(!reporting_phase_callback_);
+  DCHECK(!final_auction_result_);
+  DCHECK(top_bid_);
+
+  TRACE_EVENT_NESTABLE_ASYNC_BEGIN0("fledge", "reporting_phase", trace_id_);
+
+  reporting_phase_callback_ = std::move(reporting_phase_callback);
+
+  // Component auctions unload their seller worklets on completion, so need to
+  // reload the seller worklet in the case of a component auction.
+  if (!seller_worklet_handle_) {
+    DCHECK(parent_);
+    DCHECK(top_seller_signals);
+    if (!auction_worklet_manager_->RequestSellerWorklet(
+            config_->decision_logic_url, config_->trusted_scoring_signals_url,
+            config_->seller_experiment_group_id,
+            base::BindOnce(&InterestGroupAuction::ReportSellerResult,
+                           base::Unretained(this), top_seller_signals),
+            base::BindOnce(&InterestGroupAuction::
+                               OnWinningComponentSellerWorkletFatalError,
+                           base::Unretained(this)),
+            seller_worklet_handle_)) {
+      return;
+    }
+  } else {
+    DCHECK(!parent_);
+    DCHECK(!top_seller_signals);
+  }
+  ReportSellerResult(std::move(top_seller_signals));
+}
+
+void InterestGroupAuction::ClosePipes() {
+  // This is needed in addition to closing worklet pipes since the callbacks
+  // passed to Mojo aren't currently cancellable.
+  weak_ptr_factory_.InvalidateWeakPtrs();
+
+  for (BidState& bid_state : bid_states_) {
+    bid_state.worklet_handle.reset();
+  }
+  seller_worklet_handle_.reset();
+
+  // Close pipes for component auctions as well.
+  for (auto& component_auction : component_auctions_) {
+    component_auction->ClosePipes();
+  }
+}
+
+void InterestGroupAuction::GetInterestGroupsThatBid(
+    blink::InterestGroupSet& interest_groups) const {
+  if (!all_bids_scored_)
+    return;
+
+  for (const BidState& bid_state : bid_states_) {
+    if (bid_state.made_bid) {
+      interest_groups.emplace(bid_state.bidder.interest_group.owner,
+                              bid_state.bidder.interest_group.name);
+    }
+  }
+
+  // Retrieve data from component auctions as well.
+  for (auto& component_auction : component_auctions_) {
+    component_auction->GetInterestGroupsThatBid(interest_groups);
+  }
+}
+
+GURL InterestGroupAuction::FillPostAuctionSignals(
+    const GURL& url,
+    const PostAuctionSignals& signals,
+    const absl::optional<PostAuctionSignals>& top_level_signals) {
+  // TODO(qingxinwu): Round `winning_bid` and `highest_scoring_other_bid` to two
+  // most-significant digits. Maybe same to corresponding browser signals of
+  // reportWin()/reportResult().
+  std::string url_string = url.spec();
+  base::ReplaceSubstringsAfterOffset(
+      &url_string, 0, base::EscapeExternalHandlerValue("${winningBid}"),
+      base::NumberToString(signals.winning_bid));
+  base::ReplaceSubstringsAfterOffset(
+      &url_string, 0, base::EscapeExternalHandlerValue("${madeWinningBid}"),
+      signals.made_winning_bid ? "true" : "false");
+  base::ReplaceSubstringsAfterOffset(
+      &url_string, 0,
+      base::EscapeExternalHandlerValue("${highestScoringOtherBid}"),
+      base::NumberToString(signals.highest_scoring_other_bid));
+  base::ReplaceSubstringsAfterOffset(
+      &url_string, 0,
+      base::EscapeExternalHandlerValue("${madeHighestScoringOtherBid}"),
+      signals.made_highest_scoring_other_bid ? "true" : "false");
+
+  // For component auction sellers only, which get post auction signals from
+  // both their own component auctions and top level auction.
+  // For now, we're assuming top level auctions to be first-price auction only
+  // (not second-price auction) and it does not need highest_scoring_other_bid.
+  if (top_level_signals.has_value()) {
+    base::ReplaceSubstringsAfterOffset(
+        &url_string, 0,
+        base::EscapeExternalHandlerValue("${topLevelWinningBid}"),
+        base::NumberToString(top_level_signals->winning_bid));
+    base::ReplaceSubstringsAfterOffset(
+        &url_string, 0,
+        base::EscapeExternalHandlerValue("${topLevelMadeWinningBid}"),
+        top_level_signals->made_winning_bid ? "true" : "false");
+  }
+
+  return GURL(url_string);
+}
+
+void InterestGroupAuction::TakeDebugReportUrls(
+    std::vector<GURL>& debug_win_report_urls,
+    std::vector<GURL>& debug_loss_report_urls) {
+  if (!all_bids_scored_)
+    return;
+
+  // Set `winner` to the element of `bid_states_` that won the entire auction,
+  // if there is one.
+  //
+  // In a component auction, the highest bid may have lost the top-level
+  // auction, and we want to report that as a loss. In this case, AuctionResult
+  // will be kComponentLostAuction.
+  //
+  // Also for the top-level auction in the case a component auctions bid won,
+  // the highest bid's BidState and its reporting URLs are stored with the
+  // component auction, so the component auction will be the one populate
+  // `debug_win_report_urls`.
+  BidState* winner = nullptr;
+  if (final_auction_result_ == AuctionResult::kSuccess &&
+      top_bid_->bid->auction == this) {
+    winner = top_bid_->bid->bid_state;
+  }
+
+  // `signals` includes post auction signals from current auction.
+  PostAuctionSignals signals;
+  signals.winning_bid = top_bid_ ? top_bid_->bid->bid : 0.0;
+  signals.highest_scoring_other_bid = highest_scoring_other_bid_;
+  // `top_level_signals` includes post auction signals from top level auction.
+  // Will only will be used in debug report URLs of top level seller and
+  // component sellers.
+  // For now, we're assuming top level auctions to be first-price auction only
+  // (not second-price auction) and it does not need highest_scoring_other_bid.
+  absl::optional<PostAuctionSignals> top_level_signals;
+  if (parent_) {
+    top_level_signals = PostAuctionSignals();
+    top_level_signals->winning_bid =
+        parent_->top_bid_ ? parent_->top_bid_->bid->bid : 0.0;
+  }
+
+  if (!top_bid_) {
+    DCHECK_EQ(highest_scoring_other_bid_, 0);
+    DCHECK(!highest_scoring_other_bid_owner_.has_value());
+  }
+
+  for (BidState& bid_state : bid_states_) {
+    const url::Origin& owner = bid_state.bidder.interest_group.owner;
+    if (top_bid_)
+      signals.made_winning_bid = owner == top_bid_->bid->interest_group->owner;
+
+    if (highest_scoring_other_bid_owner_.has_value()) {
+      DCHECK_GT(highest_scoring_other_bid_, 0);
+      signals.made_highest_scoring_other_bid =
+          owner == highest_scoring_other_bid_owner_.value();
+    }
+    if (parent_ && parent_->top_bid_) {
+      top_level_signals->made_winning_bid =
+          owner == parent_->top_bid_->bid->interest_group->owner;
+    }
+
+    if (&bid_state == winner) {
+      if (winner->bidder_debug_win_report_url.has_value()) {
+        debug_win_report_urls.emplace_back(FillPostAuctionSignals(
+            std::move(winner->bidder_debug_win_report_url).value(), signals));
+      }
+      if (winner->seller_debug_win_report_url.has_value()) {
+        debug_win_report_urls.emplace_back(FillPostAuctionSignals(
+            std::move(winner->seller_debug_win_report_url).value(), signals,
+            top_level_signals));
+      }
+      // `top_level_signals` is passed as parameter `signals` for top level
+      // seller.
+      if (winner->top_level_seller_debug_win_report_url.has_value()) {
+        debug_win_report_urls.emplace_back(FillPostAuctionSignals(
+            std::move(winner->top_level_seller_debug_win_report_url).value(),
+            top_level_signals.value()));
+      }
+      continue;
+    }
+    if (bid_state.bidder_debug_loss_report_url.has_value()) {
+      // Losing bidders should not get highest_scoring_other_bid and
+      // made_highest_scoring_other_bid signals.
+      debug_loss_report_urls.emplace_back(FillPostAuctionSignals(
+          std::move(bid_state.bidder_debug_loss_report_url).value(),
+          PostAuctionSignals(signals.winning_bid, signals.made_winning_bid, 0.0,
+                             false)));
+    }
+    if (bid_state.seller_debug_loss_report_url.has_value()) {
+      debug_loss_report_urls.emplace_back(FillPostAuctionSignals(
+          std::move(bid_state.seller_debug_loss_report_url).value(), signals,
+          top_level_signals));
+    }
+    // `top_level_signals` is passed as parameter `signals` for top level
+    // seller.
+    if (bid_state.top_level_seller_debug_loss_report_url.has_value()) {
+      debug_loss_report_urls.emplace_back(FillPostAuctionSignals(
+          std::move(bid_state.top_level_seller_debug_loss_report_url).value(),
+          top_level_signals.value()));
+    }
+  }
+
+  // Retrieve data from component auctions as well.
+  for (auto& component_auction : component_auctions_) {
+    component_auction->TakeDebugReportUrls(debug_win_report_urls,
+                                           debug_loss_report_urls);
+  }
+}
+
+std::vector<GURL> InterestGroupAuction::TakeReportUrls() {
+  DCHECK_EQ(*final_auction_result_, AuctionResult::kSuccess);
+
+  // Retrieve data from winning component auction as well, if a bid from a
+  // component auction won.
+  if (top_bid_->bid->auction != this) {
+    std::vector<GURL> nested_report_urls =
+        top_bid_->bid->auction->TakeReportUrls();
+    report_urls_.insert(report_urls_.begin(), nested_report_urls.begin(),
+                        nested_report_urls.end());
+  }
+  return std::move(report_urls_);
+}
+
+std::vector<std::string> InterestGroupAuction::TakeErrors() {
+  for (auto& component_auction : component_auctions_) {
+    std::vector<std::string> errors = component_auction->TakeErrors();
+    errors_.insert(errors_.begin(), errors.begin(), errors.end());
+  }
+  return std::move(errors_);
+}
+
+void InterestGroupAuction::TakePostAuctionUpdateOwners(
+    std::vector<url::Origin>& owners) {
+  for (const url::Origin& owner : post_auction_update_owners_) {
+    owners.emplace_back(std::move(owner));
+  }
+
+  for (auto& component_auction : component_auctions_) {
+    component_auction->TakePostAuctionUpdateOwners(owners);
+  }
+}
+
+InterestGroupAuction::ScoredBid* InterestGroupAuction::top_bid() {
+  DCHECK(all_bids_scored_);
+  DCHECK(top_bid_);
+  return top_bid_.get();
+}
+
+void InterestGroupAuction::OnInterestGroupRead(
+    std::vector<StorageInterestGroup> interest_groups) {
+  ++num_owners_loaded_;
+  if (interest_groups.empty()) {
+    OnOneLoadCompleted();
+    return;
+  }
+  const url::Origin& owner = interest_groups[0].interest_group.owner;
+  post_auction_update_owners_.push_back(owner);
+  for (const auto& bidder : interest_groups) {
+    // Report freshness metrics.
+    if (bidder.interest_group.daily_update_url.has_value()) {
+      UMA_HISTOGRAM_CUSTOM_COUNTS(
+          "Ads.InterestGroup.Auction.GroupFreshness.WithDailyUpdates",
+          (base::Time::Now() - bidder.last_updated).InMinutes(),
+          kGroupFreshnessMin.InMinutes(), kGroupFreshnessMax.InMinutes(),
+          kGroupFreshnessBuckets);
+    } else {
+      UMA_HISTOGRAM_CUSTOM_COUNTS(
+          "Ads.InterestGroup.Auction.GroupFreshness.NoDailyUpdates",
+          (base::Time::Now() - bidder.last_updated).InMinutes(),
+          kGroupFreshnessMin.InMinutes(), kGroupFreshnessMax.InMinutes(),
+          kGroupFreshnessBuckets);
+    }
+  }
+
+  // Ignore interest groups with no bidding script or no ads.
+  interest_groups.erase(
+      std::remove_if(interest_groups.begin(), interest_groups.end(),
+                     [](const StorageInterestGroup& bidder) {
+                       return !bidder.interest_group.bidding_url ||
+                              bidder.interest_group.ads->empty();
+                     }),
+      interest_groups.end());
+
+  // If there are no interest groups with both a bidding script and ads, nothing
+  // else to do.
+  if (interest_groups.empty()) {
+    OnOneLoadCompleted();
+    return;
+  }
+
+  // Only count owners with interest groups theoretically capable of making
+  // bids as participating in this auction.
+  ++num_owners_with_interest_groups_;
+
+  size_t size_limit = config_->non_shared_params.all_buyers_group_limit;
+  const auto limit_iter =
+      config_->non_shared_params.per_buyer_group_limits.find(owner);
+  if (limit_iter != config_->non_shared_params.per_buyer_group_limits.cend()) {
+    size_limit = static_cast<size_t>(limit_iter->second);
+  }
+  size_limit = std::min(interest_groups.size(), size_limit);
+  if (size_limit == 0) {
+    OnOneLoadCompleted();
+    return;
+  }
+
+  StorageInterestGroupDescByPriority cmp;
+  std::sort(interest_groups.begin(), interest_groups.end(), cmp);
+  // Randomize order of interest groups with lowest allowed priority. This
+  // effectively performs a random sample among interest groups with the same
+  // priority.
+  double min_priority = interest_groups[size_limit - 1].interest_group.priority;
+  auto rand_begin = std::lower_bound(interest_groups.begin(),
+                                     interest_groups.end(), min_priority, cmp);
+  auto rand_end =
+      std::upper_bound(rand_begin, interest_groups.end(), min_priority, cmp);
+  base::RandomShuffle(rand_begin, rand_end);
+  interest_groups.resize(size_limit);
+
+  // Set up remaining interest groups to generate bids.
+  for (auto& bidder : interest_groups) {
+    bid_states_.emplace_back();
+    bid_states_.back().bidder = std::move(bidder);
+  }
+  OnOneLoadCompleted();
+}
+
+void InterestGroupAuction::OnComponentInterestGroupsRead(
+    AuctionList::iterator component_auction,
+    bool success) {
+  num_owners_loaded_ += (*component_auction)->num_owners_loaded_;
+  num_owners_with_interest_groups_ +=
+      (*component_auction)->num_owners_with_interest_groups_;
+
+  // Erase component auctions that failed to load anything, so they won't be
+  // invoked in the generate bid phase. This is not a problem in the reporting
+  // phase, as the top-level auction knows which component auction, if any, won.
+  if (!success)
+    component_auctions_.erase(component_auction);
+  OnOneLoadCompleted();
+}
+
+void InterestGroupAuction::OnOneLoadCompleted() {
+  DCHECK_GT(num_pending_loads_, 0u);
+  --num_pending_loads_;
+
+  // Wait for more buyers to be loaded, if there are still some pending.
+  if (num_pending_loads_ > 0)
+    return;
+
+  // Record histograms about the interest groups participating in the auction.
+  // TODO(mmenke): Record histograms for component auctions.
+  if (!parent_) {
+    // Only record histograms if there were interest groups that could
+    // theoretically participate in the auction.
+    if (num_owners_loaded_ > 0) {
+      int num_interest_groups = bid_states_.size();
+      size_t num_sellers_with_bidders = 0;
+      for (auto& component_auction : component_auctions_) {
+        // This double-counts interest groups that are participating in multiple
+        // auctions.
+        num_interest_groups += component_auction->bid_states_.size();
+        ++num_sellers_with_bidders;
+      }
+      // If the top-level seller either has interest groups itself, or any of
+      // the component auctions do, then the top-level seller also has bidders.
+      if (num_interest_groups)
+        ++num_sellers_with_bidders;
+
+      UMA_HISTOGRAM_COUNTS_1000("Ads.InterestGroup.Auction.NumInterestGroups",
+                                num_interest_groups);
+      UMA_HISTOGRAM_COUNTS_100(
+          "Ads.InterestGroup.Auction.NumOwnersWithInterestGroups",
+          num_owners_with_interest_groups_);
+
+      UMA_HISTOGRAM_COUNTS_100(
+          "Ads.InterestGroup.Auction.NumSellersWithBidders",
+          num_sellers_with_bidders);
+    }
+  }
+
+  // If there are no bidders in this auction and no component auctions with
+  // bidders, either, fail the auction.
+  if (bid_states_.empty() && component_auctions_.empty()) {
+    OnStartLoadInterestGroupsPhaseComplete(AuctionResult::kNoInterestGroups);
+    return;
+  }
+
+  // There are bidders that can generate bids, so complete without a final
+  // result.
+  OnStartLoadInterestGroupsPhaseComplete(
+      /*auction_result=*/AuctionResult::kSuccess);
+}
+
+void InterestGroupAuction::OnStartLoadInterestGroupsPhaseComplete(
+    AuctionResult auction_result) {
+  DCHECK(load_interest_groups_phase_callback_);
+  DCHECK(!final_auction_result_);
+
+  TRACE_EVENT_NESTABLE_ASYNC_END0("fledge", "load_groups_phase", trace_id_);
+
+  // `final_auction_result_` should only be set to kSuccess when the entire
+  // auction is complete.
+  bool success = auction_result == AuctionResult::kSuccess;
+  if (!success)
+    final_auction_result_ = auction_result;
+  std::move(load_interest_groups_phase_callback_).Run(success);
+}
+
+void InterestGroupAuction::OnComponentSellerWorkletReceived() {
+  DCHECK_GT(pending_component_seller_worklet_requests_, 0u);
+  --pending_component_seller_worklet_requests_;
+  if (pending_component_seller_worklet_requests_ == 0)
+    RequestSellerWorklet();
+}
+
+void InterestGroupAuction::RequestSellerWorklet() {
+  TRACE_EVENT_NESTABLE_ASYNC_BEGIN0("fledge", "request_seller_worklet",
+                                    trace_id_);
+  if (auction_worklet_manager_->RequestSellerWorklet(
+          config_->decision_logic_url, config_->trusted_scoring_signals_url,
+          config_->seller_experiment_group_id,
+          base::BindOnce(&InterestGroupAuction::OnSellerWorkletReceived,
+                         base::Unretained(this)),
+          base::BindOnce(&InterestGroupAuction::OnSellerWorkletFatalError,
+                         base::Unretained(this)),
+          seller_worklet_handle_)) {
+    OnSellerWorkletReceived();
+  }
+}
+
+void InterestGroupAuction::OnSellerWorkletReceived() {
+  DCHECK(!seller_worklet_received_);
+
+  TRACE_EVENT_NESTABLE_ASYNC_END0("fledge", "request_seller_worklet",
+                                  trace_id_);
+
+  if (on_seller_receiver_callback_)
+    std::move(on_seller_receiver_callback_).Run();
+
+  seller_worklet_received_ = true;
+
+  auto unscored_bids = std::move(unscored_bids_);
+  for (auto& unscored_bid : unscored_bids) {
+    TRACE_EVENT_NESTABLE_ASYNC_END0("fledge", "Wait_for_seller_worklet",
+                                    *unscored_bid->bid_state->trace_id);
+    ScoreBidIfReady(std::move(unscored_bid));
+  }
+  // No more unscored bids should be added, once the seller worklet has been
+  // received.
+  DCHECK(unscored_bids_.empty());
+}
+
+void InterestGroupAuction::RequestBidderWorklets() {
+  // Request processes for all bidder worklets.
+  for (auto& bid_state : bid_states_) {
+    if (RequestBidderWorklet(
+            bid_state,
+            base::BindOnce(&InterestGroupAuction::OnBidderWorkletReceived,
+                           base::Unretained(this), &bid_state),
+            base::BindOnce(
+                &InterestGroupAuction::OnBidderWorkletGenerateBidFatalError,
+                base::Unretained(this), &bid_state))) {
+      OnBidderWorkletReceived(&bid_state);
+    }
+  }
+}
+
+void InterestGroupAuction::OnSellerWorkletFatalError(
+    AuctionWorkletManager::FatalErrorType fatal_error_type,
+    const std::vector<std::string>& errors) {
+  AuctionResult result;
+  switch (fatal_error_type) {
+    case AuctionWorkletManager::FatalErrorType::kScriptLoadFailed:
+      result = AuctionResult::kSellerWorkletLoadFailed;
+      break;
+    case AuctionWorkletManager::FatalErrorType::kWorkletCrash:
+      result = AuctionResult::kSellerWorkletCrashed;
+      break;
+  }
+
+  // The seller worklet can crash in either the bidding or selling phase. Call
+  // the appropriate method depending on the current phase.
+  if (bidding_and_scoring_phase_callback_) {
+    OnBiddingAndScoringComplete(result, errors);
+    return;
+  }
+  OnReportingPhaseComplete(result, errors);
+}
+
+void InterestGroupAuction::OnBidderWorkletReceived(BidState* bid_state) {
+  const blink::InterestGroup& interest_group = bid_state->bidder.interest_group;
+
+  bid_state->BeginTracing();
+  TRACE_EVENT_NESTABLE_ASYNC_BEGIN0("fledge", "bidder_worklet_generate_bid",
+                                    *bid_state->trace_id);
+
+  bid_state->worklet_handle->GetBidderWorklet()->GenerateBid(
+      auction_worklet::mojom::BidderWorkletNonSharedParams::New(
+          interest_group.name, interest_group.daily_update_url,
+          interest_group.trusted_bidding_signals_keys,
+          interest_group.user_bidding_signals, interest_group.ads,
+          interest_group.ad_components),
+      config_->non_shared_params.auction_signals, PerBuyerSignals(bid_state),
+      PerBuyerTimeout(bid_state), config_->seller,
+      parent_ ? parent_->config_->seller : absl::optional<url::Origin>(),
+      bid_state->bidder.bidding_browser_signals.Clone(), auction_start_time_,
+      *bid_state->trace_id,
+      base::BindOnce(&InterestGroupAuction::OnGenerateBidComplete,
+                     weak_ptr_factory_.GetWeakPtr(), bid_state));
+
+  // Invoke SendPendingSignalsRequests() asynchronously, if necessary. Do this
+  // asynchronously so that all GenerateBid() calls that share a BidderWorklet
+  // will have been invoked before the first SendPendingSignalsRequests() call.
+  //
+  // This relies on AuctionWorkletManager::Handle invoking all the callbacks
+  // listening for creation of the same BidderWorklet synchronously.
+  if (interest_group.trusted_bidding_signals_keys &&
+      interest_group.trusted_bidding_signals_keys->size() > 0) {
+    base::SequencedTaskRunnerHandle::Get()->PostTask(
+        FROM_HERE,
+        base::BindOnce(
+            &InterestGroupAuction::SendPendingSignalsRequestsForBidder,
+            weak_ptr_factory_.GetWeakPtr(), bid_state));
+  }
+}
+
+void InterestGroupAuction::SendPendingSignalsRequestsForBidder(
+    BidState* bid_state) {
+  // Don't invoke callback if worklet was unloaded in the meantime.
+  if (bid_state->worklet_handle)
+    bid_state->worklet_handle->GetBidderWorklet()->SendPendingSignalsRequests();
+}
+
+void InterestGroupAuction::OnBidderWorkletGenerateBidFatalError(
+    BidState* bid_state,
+    AuctionWorkletManager::FatalErrorType fatal_error_type,
+    const std::vector<std::string>& errors) {
+  if (fatal_error_type ==
+      AuctionWorkletManager::FatalErrorType::kWorkletCrash) {
+    // Ignore default error message in case of crash. Instead, use a more
+    // specific one.
+    OnGenerateBidComplete(
+        bid_state, auction_worklet::mojom::BidderWorkletBidPtr(),
+        /*bidding_signals_data_version=*/0,
+        /*has_bidding_signals_data_version=*/false,
+        /*debug_loss_report_url=*/absl::nullopt,
+        /*debug_win_report_url=*/absl::nullopt,
+        /*set_priority=*/0,
+        /*has_set_priority=*/false,
+        {base::StrCat({bid_state->bidder.interest_group.bidding_url->spec(),
+                       " crashed while trying to run generateBid()."})});
+    return;
+  }
+
+  // Otherwise, use error message from the worklet.
+  OnGenerateBidComplete(bid_state,
+                        auction_worklet::mojom::BidderWorkletBidPtr(),
+                        /*bidding_signals_data_version=*/0,
+                        /*has_bidding_signals_data_version=*/false,
+                        /*debug_loss_report_url=*/absl::nullopt,
+                        /*debug_win_report_url=*/absl::nullopt,
+                        /*set_priority=*/0, /*has_set_priority=*/false, errors);
+}
+
+void InterestGroupAuction::OnGenerateBidComplete(
+    BidState* state,
+    auction_worklet::mojom::BidderWorkletBidPtr mojo_bid,
+    uint32_t bidding_signals_data_version,
+    bool has_bidding_signals_data_version,
+    const absl::optional<GURL>& debug_loss_report_url,
+    const absl::optional<GURL>& debug_win_report_url,
+    double set_priority,
+    bool has_set_priority,
+    const std::vector<std::string>& errors) {
+  DCHECK(!state->made_bid);
+  DCHECK_GT(num_bids_not_sent_to_seller_worklet_, 0);
+  DCHECK_GT(outstanding_bids_, 0);
+
+  TRACE_EVENT_NESTABLE_ASYNC_END0("fledge", "bidder_worklet_generate_bid",
+                                  *state->trace_id);
+
+  absl::optional<uint32_t> maybe_bidding_signals_data_version;
+  if (has_bidding_signals_data_version)
+    maybe_bidding_signals_data_version = bidding_signals_data_version;
+
+  if (has_set_priority) {
+    interest_group_manager_->SetInterestGroupPriority(
+        blink::InterestGroupKey(state->bidder.interest_group.owner,
+                                state->bidder.interest_group.name),
+        set_priority);
+  }
+
+  errors_.insert(errors_.end(), errors.begin(), errors.end());
+
+  // Release the worklet. If it wins the auction, it will be requested again to
+  // invoke its ReportWin() method.
+  state->worklet_handle.reset();
+
+  // Ignore invalid bids.
+  std::unique_ptr<Bid> bid;
+  std::string ad_metadata;
+  // `mojo_bid` is null if the worklet doesn't bid, or if the bidder worklet
+  // fails to load / crashes.
+  if (mojo_bid) {
+    bid = TryToCreateBid(std::move(mojo_bid), *state,
+                         maybe_bidding_signals_data_version,
+                         debug_loss_report_url, debug_win_report_url);
+    if (bid)
+      state->bidder_debug_loss_report_url = std::move(debug_loss_report_url);
+  } else {
+    // Bidders who do not bid are allowed to get loss report.
+    state->bidder_debug_loss_report_url = std::move(debug_loss_report_url);
+  }
+
+  if (!bid) {
+    state->EndTracing();
+    OnNoBid();
+    return;
+  }
+
+  state->bidder_debug_win_report_url = std::move(debug_win_report_url);
+  state->made_bid = true;
+  ScoreBidIfReady(std::move(bid));
+}
+
+void InterestGroupAuction::OnComponentAuctionComplete(
+    InterestGroupAuction* component_auction,
+    bool success) {
+  if (!success) {
+    OnNoBid();
+    return;
+  }
+
+  // Create a copy of component Auction's bid, replacing values as necessary.
+  const Bid* component_bid = component_auction->top_bid()->bid.get();
+  const auto* modified_bid_params =
+      component_auction->top_bid()->component_auction_modified_bid_params.get();
+  DCHECK(modified_bid_params);
+
+  // Create a new event for the bid, since the component auction's event for it
+  // ended after the component auction scored the bid.
+  component_bid->bid_state->BeginTracing();
+
+  ScoreBidIfReady(std::make_unique<Bid>(
+      modified_bid_params->ad,
+      modified_bid_params->has_bid ? modified_bid_params->bid
+                                   : component_bid->bid,
+      component_bid->render_url, component_bid->ad_components,
+      component_bid->bid_duration, component_bid->bidding_signals_data_version,
+      component_bid->bid_ad, component_bid->bid_state, component_bid->auction));
+}
+
+void InterestGroupAuction::OnNoBid() {
+  --num_bids_not_sent_to_seller_worklet_;
+  --outstanding_bids_;
+
+  // If this is the only bid that yet to be sent to the seller worklet, and
+  // the seller worklet has loaded, then tell the seller worklet to send any
+  // pending scoring signals request to complete the auction more quickly.
+  if (num_bids_not_sent_to_seller_worklet_ == 0 && seller_worklet_received_)
+    seller_worklet_handle_->GetSellerWorklet()->SendPendingSignalsRequests();
+
+  MaybeCompleteBiddingAndScoringPhase();
+}
+
+void InterestGroupAuction::ScoreBidIfReady(std::unique_ptr<Bid> bid) {
+  DCHECK(bid);
+  DCHECK_GT(num_bids_not_sent_to_seller_worklet_, 0);
+  DCHECK_GT(outstanding_bids_, 0);
+  DCHECK(bid->bid_state->made_bid);
+
+  // If seller worklet hasn't been received yet, wait until it is.
+  if (!seller_worklet_received_) {
+    TRACE_EVENT_NESTABLE_ASYNC_BEGIN0("fledge", "wait_for_seller_worklet",
+                                      *bid->bid_state->trace_id);
+    unscored_bids_.emplace_back(std::move(bid));
+    return;
+  }
+
+  TRACE_EVENT_NESTABLE_ASYNC_BEGIN1(
+      "fledge", "seller_worklet_score_ad", *bid->bid_state->trace_id,
+      "decision_logic_url", config_->decision_logic_url);
+
+  Bid* bid_raw = bid.get();
+  seller_worklet_handle_->GetSellerWorklet()->ScoreAd(
+      bid_raw->ad_metadata, bid_raw->bid, config_->non_shared_params,
+      GetOtherSellerParam(*bid_raw), bid_raw->interest_group->owner,
+      bid_raw->render_url, bid_raw->ad_components,
+      bid_raw->bid_duration.InMilliseconds(), SellerTimeout(),
+      *bid_raw->bid_state->trace_id,
+      base::BindOnce(&InterestGroupAuction::OnBidScored,
+                     weak_ptr_factory_.GetWeakPtr(), std::move(bid)));
+
+  // If this was the last bid that needed to be passed to ScoreAd(), tell the
+  // SellerWorklet no more bids are coming, so it can send a request for any
+  // needed scoring signals now, if needed.
+  --num_bids_not_sent_to_seller_worklet_;
+  if (num_bids_not_sent_to_seller_worklet_ == 0) {
+    seller_worklet_handle_->GetSellerWorklet()->SendPendingSignalsRequests();
+  }
+}
+
+void InterestGroupAuction::OnBidScored(
+    std::unique_ptr<Bid> bid,
+    double score,
+    auction_worklet::mojom::ComponentAuctionModifiedBidParamsPtr
+        component_auction_modified_bid_params,
+    uint32_t data_version,
+    bool has_data_version,
+    const absl::optional<GURL>& debug_loss_report_url,
+    const absl::optional<GURL>& debug_win_report_url,
+    const std::vector<std::string>& errors) {
+  TRACE_EVENT_NESTABLE_ASYNC_END0("fledge", "seller_worklet_score_ad",
+                                  *bid->bid_state->trace_id);
+  bid->bid_state->EndTracing();
+
+  --outstanding_bids_;
+
+  // If `debug_loss_report_url` or `debug_win_report_url` is not a valid HTTPS
+  // URL, the auction should fail because the worklet is compromised.
+  if (debug_loss_report_url.has_value() &&
+      !IsUrlValid(debug_loss_report_url.value())) {
+    mojo::ReportBadMessage("Invalid seller debugging loss report URL");
+    OnBiddingAndScoringComplete(AuctionResult::kBadMojoMessage);
+    return;
+  }
+  if (debug_win_report_url.has_value() &&
+      !IsUrlValid(debug_win_report_url.value())) {
+    mojo::ReportBadMessage("Invalid seller debugging win report URL");
+    OnBiddingAndScoringComplete(AuctionResult::kBadMojoMessage);
+    return;
+  }
+  errors_.insert(errors_.end(), errors.begin(), errors.end());
+
+  // Use separate fields for component and top-level seller reports, so both can
+  // send debug reports.
+  if (bid->auction == this) {
+    bid->bid_state->seller_debug_loss_report_url =
+        std::move(debug_loss_report_url);
+    bid->bid_state->seller_debug_win_report_url =
+        std::move(debug_win_report_url);
+  } else {
+    bid->bid_state->top_level_seller_debug_loss_report_url =
+        std::move(debug_loss_report_url);
+    bid->bid_state->top_level_seller_debug_win_report_url =
+        std::move(debug_win_report_url);
+  }
+
+  // A score <= 0 means the seller rejected the bid.
+  if (score <= 0) {
+    MaybeCompleteBiddingAndScoringPhase();
+    return;
+  }
+
+  // If they accept a bid / return a positive score, component auction
+  // SellerWorklets must return a `component_auction_modified_bid_params`, and
+  // top-level auctions must not.
+  if (component_auction_modified_bid_params.is_null() != (parent_ == nullptr)) {
+    mojo::ReportBadMessage("Invalid component_auction_modified_bid_params");
+    OnBiddingAndScoringComplete(AuctionResult::kBadMojoMessage);
+    return;
+  }
+  // If a component seller modified the bid, the new bid must also be valid.
+  if (component_auction_modified_bid_params &&
+      component_auction_modified_bid_params->has_bid &&
+      !IsValidBid(component_auction_modified_bid_params->bid)) {
+    mojo::ReportBadMessage("Invalid component_auction_modified_bid_params bid");
+    OnBiddingAndScoringComplete(AuctionResult::kBadMojoMessage);
+    return;
+  }
+
+  bool is_top_bid = false;
+  const url::Origin& owner = bid->interest_group->owner;
+
+  if (!top_bid_ || score > top_bid_->score) {
+    // If there's no previous top bidder, or the bidder has the highest score,
+    // need to replace the previous top bidder.
+    is_top_bid = true;
+    if (top_bid_) {
+      OnNewHighestScoringOtherBid(top_bid_->score, top_bid_->bid->bid,
+                                  &top_bid_->bid->interest_group->owner);
+    }
+    num_top_bids_ = 1;
+    at_most_one_top_bid_owner_ = true;
+  } else if (score == top_bid_->score) {
+    // If there's a tie, replace the top-bidder with 1-in-`num_top_bids_`
+    // chance. This is the select random value from a stream with fixed
+    // storage problem.
+    ++num_top_bids_;
+    if (1 == base::RandInt(1, num_top_bids_))
+      is_top_bid = true;
+    if (owner != top_bid_->bid->interest_group->owner)
+      at_most_one_top_bid_owner_ = false;
+    // If the top bid is being replaced, need to add the old top bid as a second
+    // highest bid. Otherwise, need to add the current bid as a second highest
+    // bid.
+    double new_highest_scoring_other_bid =
+        is_top_bid ? top_bid_->bid->bid : bid->bid;
+    OnNewHighestScoringOtherBid(
+        score, new_highest_scoring_other_bid,
+        at_most_one_top_bid_owner_ ? &bid->interest_group->owner : nullptr);
+  } else if (score >= second_highest_score_) {
+    // Also use this bid (the most recent one) as highest scoring other bid if
+    // there's a tie for second highest score.
+    OnNewHighestScoringOtherBid(score, bid->bid, &owner);
+  }
+
+  if (is_top_bid) {
+    top_bid_ = std::make_unique<ScoredBid>(
+        score, has_data_version ? data_version : absl::optional<uint32_t>(),
+        std::move(bid), std::move(component_auction_modified_bid_params));
+  }
+
+  MaybeCompleteBiddingAndScoringPhase();
+}
+
+void InterestGroupAuction::OnNewHighestScoringOtherBid(
+    double score,
+    double bid_value,
+    const url::Origin* owner) {
+  // Current (the most recent) bid becomes highest scoring other bid.
+  if (score > second_highest_score_) {
+    highest_scoring_other_bid_ = bid_value;
+    num_second_highest_bids_ = 1;
+    // Owner may be false if this is one of the bids tied for first place.
+    if (!owner) {
+      highest_scoring_other_bid_owner_.reset();
+    } else {
+      highest_scoring_other_bid_owner_ = *owner;
+    }
+    second_highest_score_ = score;
+    return;
+  }
+
+  DCHECK_EQ(score, second_highest_score_);
+  if (!owner || *owner != highest_scoring_other_bid_owner_)
+    highest_scoring_other_bid_owner_.reset();
+  ++num_second_highest_bids_;
+  // In case of a tie, randomly pick one. This is the select random value from a
+  // stream with fixed storage problem.
+  if (1 == base::RandInt(1, num_second_highest_bids_))
+    highest_scoring_other_bid_ = bid_value;
+}
+
+absl::optional<std::string> InterestGroupAuction::PerBuyerSignals(
+    const BidState* state) {
+  const auto& per_buyer_signals = config_->non_shared_params.per_buyer_signals;
+  if (per_buyer_signals.has_value()) {
+    auto it =
+        per_buyer_signals.value().find(state->bidder.interest_group.owner);
+    if (it != per_buyer_signals.value().end())
+      return it->second;
+  }
+  return absl::nullopt;
+}
+
+absl::optional<base::TimeDelta> InterestGroupAuction::PerBuyerTimeout(
+    const BidState* state) {
+  const auto& per_buyer_timeouts =
+      config_->non_shared_params.per_buyer_timeouts;
+  if (per_buyer_timeouts.has_value()) {
+    auto it =
+        per_buyer_timeouts.value().find(state->bidder.interest_group.owner);
+    if (it != per_buyer_timeouts.value().end())
+      return std::min(it->second, kMaxTimeout);
+  }
+  const auto& all_buyers_timeout =
+      config_->non_shared_params.all_buyers_timeout;
+  if (all_buyers_timeout.has_value())
+    return std::min(all_buyers_timeout.value(), kMaxTimeout);
+  return absl::nullopt;
+}
+
+absl::optional<base::TimeDelta> InterestGroupAuction::SellerTimeout() {
+  if (config_->non_shared_params.seller_timeout.has_value()) {
+    return std::min(config_->non_shared_params.seller_timeout.value(),
+                    kMaxTimeout);
+  }
+  return absl::nullopt;
+}
+
+void InterestGroupAuction::MaybeCompleteBiddingAndScoringPhase() {
+  if (!AllBidsScored())
+    return;
+
+  // Since all bids have been scored, they also should have all been sent to the
+  // SellerWorklet by this point.
+  DCHECK_EQ(0, num_bids_not_sent_to_seller_worklet_);
+
+  all_bids_scored_ = true;
+
+  // If there's no winning bid, fail with kAllBidsRejected if there were any
+  // bids. Otherwise, fail with kNoBids.
+  if (!top_bid_) {
+    for (BidState& bid_state : bid_states_) {
+      if (bid_state.made_bid) {
+        OnBiddingAndScoringComplete(AuctionResult::kAllBidsRejected);
+        return;
+      }
+    }
+    OnBiddingAndScoringComplete(AuctionResult::kNoBids);
+    return;
+  }
+
+  OnBiddingAndScoringComplete(AuctionResult::kSuccess);
+}
+
+void InterestGroupAuction::OnBiddingAndScoringComplete(
+    AuctionResult auction_result,
+    const std::vector<std::string>& errors) {
+  DCHECK(bidding_and_scoring_phase_callback_);
+  DCHECK(!final_auction_result_);
+
+  TRACE_EVENT_NESTABLE_ASYNC_END0("fledge", "bidding_and_scoring_phase",
+                                  trace_id_);
+
+  errors_.insert(errors_.end(), errors.begin(), errors.end());
+
+  // If this is a component auction, have to unload the seller worklet handle to
+  // avoid deadlock. Otherwise, loading the top-level seller worklet may be
+  // blocked by component seller worklets taking up all the quota.
+  if (parent_)
+    seller_worklet_handle_.reset();
+
+  // If the seller loaded callback hasn't been invoked yet, call it now. This is
+  // needed in the case the phase ended without receiving the seller worklet
+  // (e.g., in the case no bidder worklet bids).
+  if (on_seller_receiver_callback_)
+    std::move(on_seller_receiver_callback_).Run();
+
+  bool success = auction_result == AuctionResult::kSuccess;
+  if (!success) {
+    // Close all pipes, to prevent any pending callbacks from being invoked if
+    // this phase is being completed due to a fatal error, like the seller
+    // worklet failing to load.
+    ClosePipes();
+
+    // `final_auction_result_` should only be set to kSuccess when the entire
+    // auction is complete.
+    final_auction_result_ = auction_result;
+  }
+
+  // If this is a top-level auction with component auction, update final state
+  // of all successfully completed component auctions with bids that did not win
+  // to reflect a loss.
+  for (auto& component_auction : component_auctions_) {
+    // Leave the state of the winning component auction alone, if the winning
+    // bid is from a component auction.
+    if (top_bid_ && top_bid_->bid->auction == component_auction.get())
+      continue;
+    if (component_auction->final_auction_result_)
+      continue;
+    component_auction->final_auction_result_ =
+        AuctionResult::kComponentLostAuction;
+  }
+
+  std::move(bidding_and_scoring_phase_callback_).Run(success);
+}
+
+void InterestGroupAuction::ReportSellerResult(
+    absl::optional<std::string> top_seller_signals) {
+  DCHECK(seller_worklet_handle_);
+  DCHECK(reporting_phase_callback_);
+
+  TRACE_EVENT_NESTABLE_ASYNC_BEGIN0("fledge", "seller_worklet_report_result",
+                                    trace_id_);
+
+  auction_worklet::mojom::ComponentAuctionReportResultParamsPtr
+      browser_signals_component_auction_report_result_params;
+  if (parent_) {
+    DCHECK(top_seller_signals);
+    DCHECK(top_bid_->component_auction_modified_bid_params);
+    browser_signals_component_auction_report_result_params =
+        auction_worklet::mojom::ComponentAuctionReportResultParams::New(
+            /*top_level_seller_signals=*/std::move(top_seller_signals).value(),
+            /*modified_bid=*/
+            top_bid_->component_auction_modified_bid_params->bid,
+            /*has_modified_bid=*/
+            top_bid_->component_auction_modified_bid_params->has_bid);
+  }
+
+  seller_worklet_handle_->GetSellerWorklet()->ReportResult(
+      config_->non_shared_params, GetOtherSellerParam(*top_bid_->bid),
+      top_bid_->bid->interest_group->owner, top_bid_->bid->render_url,
+      top_bid_->bid->bid, top_bid_->score, highest_scoring_other_bid_,
+      std::move(browser_signals_component_auction_report_result_params),
+      top_bid_->scoring_signals_data_version.value_or(0),
+      top_bid_->scoring_signals_data_version.has_value(), trace_id_,
+      base::BindOnce(&InterestGroupAuction::OnReportSellerResultComplete,
+                     weak_ptr_factory_.GetWeakPtr()));
+}
+
+void InterestGroupAuction::OnReportSellerResultComplete(
+    const absl::optional<std::string>& signals_for_winner,
+    const absl::optional<GURL>& seller_report_url,
+    const base::flat_map<std::string, GURL>& seller_ad_beacon_map,
+    const std::vector<std::string>& errors) {
+  TRACE_EVENT_NESTABLE_ASYNC_END0("fledge", "seller_worklet_report_result",
+                                  trace_id_);
+
+  // There should be no other report URLs at this point.
+  DCHECK(report_urls_.empty());
+
+  // Release the seller worklet handle. It's no longer needed, and not releasing
+  // it could theoretically trigger deadlock, if holding onto it prevents the
+  // winning component seller from reloading its worklet. It could also trigger
+  // an error if it crashes at this point, failing the auction unnecessarily.
+  seller_worklet_handle_.reset();
+
+  if (!seller_ad_beacon_map.empty()) {
+    for (const auto& element : seller_ad_beacon_map) {
+      if (!IsUrlValid(element.second)) {
+        mojo::ReportBadMessage(base::StrCat(
+            {"Invalid seller beacon URL for '", element.first, "'"}));
+        OnReportingPhaseComplete(AuctionResult::kBadMojoMessage);
+        return;
+      }
+    }
+    ad_beacon_map_.metadata[ReportingDestination::kSeller] =
+        seller_ad_beacon_map;
+  }
+
+  if (seller_report_url) {
+    if (!IsUrlValid(*seller_report_url)) {
+      mojo::ReportBadMessage("Invalid seller report URL");
+      OnReportingPhaseComplete(AuctionResult::kBadMojoMessage);
+      return;
+    }
+
+    report_urls_.push_back(*seller_report_url);
+  }
+
+  errors_.insert(errors_.end(), errors.begin(), errors.end());
+
+  // Treat a null `signals_for_winner` value as a null JS response.
+  //
+  // TODO(mmenke): Consider making `signals_for_winner` itself non-optional, and
+  // clean this up.
+  std::string fixed_up_signals_for_winner = signals_for_winner.value_or("null");
+
+  // If a the winning bid is from a nested component auction, need to call into
+  // that Auction's report logic (which will invoke both that seller's
+  // ReportResult() method, and the bidder's ReportWin()).
+  if (top_bid_->bid->auction != this) {
+    top_bid_->bid->auction->StartReportingPhase(
+        std::move(fixed_up_signals_for_winner),
+        base::BindOnce(
+            &InterestGroupAuction::OnComponentAuctionReportingPhaseComplete,
+            base::Unretained(this)));
+    return;
+  }
+
+  LoadBidderWorkletToReportBidWin(std::move(fixed_up_signals_for_winner));
+}
+
+void InterestGroupAuction::LoadBidderWorkletToReportBidWin(
+    const std::string& signals_for_winner) {
+  // Worklet handle should have been destroyed once the bid was generated.
+  DCHECK(!top_bid_->bid->bid_state->worklet_handle);
+
+  if (RequestBidderWorklet(
+          *top_bid_->bid->bid_state,
+          base::BindOnce(&InterestGroupAuction::ReportBidWin,
+                         base::Unretained(this), signals_for_winner),
+          base::BindOnce(
+              &InterestGroupAuction::OnWinningBidderWorkletFatalError,
+              base::Unretained(this)))) {
+    ReportBidWin(signals_for_winner);
+  }
+}
+
+void InterestGroupAuction::ReportBidWin(const std::string& signals_for_winner) {
+  DCHECK(top_bid_);
+
+  TRACE_EVENT_NESTABLE_ASYNC_BEGIN0("fledge", "bidder_worklet_report_win",
+                                    trace_id_);
+
+  top_bid_->bid->bid_state->worklet_handle->GetBidderWorklet()->ReportWin(
+      top_bid_->bid->interest_group->name,
+      config_->non_shared_params.auction_signals,
+      PerBuyerSignals(top_bid_->bid->bid_state), signals_for_winner,
+      top_bid_->bid->render_url, top_bid_->bid->bid,
+      /*browser_signal_highest_scoring_other_bid=*/highest_scoring_other_bid_,
+      highest_scoring_other_bid_owner_.has_value() &&
+          top_bid_->bid->interest_group->owner ==
+              highest_scoring_other_bid_owner_.value(),
+      config_->seller,
+      parent_ ? parent_->config_->seller : absl::optional<url::Origin>(),
+      top_bid_->bid->bidding_signals_data_version.value_or(0),
+      top_bid_->bid->bidding_signals_data_version.has_value(), trace_id_,
+      base::BindOnce(&InterestGroupAuction::OnReportBidWinComplete,
+                     weak_ptr_factory_.GetWeakPtr()));
+}
+
+void InterestGroupAuction::OnReportBidWinComplete(
+    const absl::optional<GURL>& bidder_report_url,
+    const base::flat_map<std::string, GURL>& bidder_ad_beacon_map,
+    const std::vector<std::string>& errors) {
+  // There should be at most one other report URL at this point.
+  DCHECK_LE(report_urls_.size(), 1u);
+
+  TRACE_EVENT_NESTABLE_ASYNC_END0("fledge", "bidder_worklet_report_win",
+                                  trace_id_);
+
+  // The winning bidder worklet is no longer needed. Unload it to prevent a
+  // fatal error notification.
+  top_bid_->bid->bid_state->worklet_handle.reset();
+
+  if (!bidder_ad_beacon_map.empty()) {
+    for (const auto& element : bidder_ad_beacon_map) {
+      if (!IsUrlValid(element.second)) {
+        mojo::ReportBadMessage(base::StrCat(
+            {"Invalid bidder beacon URL for '", element.first, "'"}));
+        OnReportingPhaseComplete(AuctionResult::kBadMojoMessage);
+        return;
+      }
+    }
+    ad_beacon_map_.metadata[ReportingDestination::kBuyer] =
+        bidder_ad_beacon_map;
+  }
+
+  if (bidder_report_url) {
+    if (!IsUrlValid(*bidder_report_url)) {
+      mojo::ReportBadMessage("Invalid bidder report URL");
+      OnReportingPhaseComplete(AuctionResult::kBadMojoMessage);
+      return;
+    }
+
+    report_urls_.push_back(*bidder_report_url);
+  }
+
+  errors_.insert(errors_.end(), errors.begin(), errors.end());
+  OnReportingPhaseComplete(AuctionResult::kSuccess);
+}
+
+void InterestGroupAuction::OnWinningComponentSellerWorkletFatalError(
+    AuctionWorkletManager::FatalErrorType fatal_error_type,
+    const std::vector<std::string>& errors) {
+  // Crashes are considered fatal errors, while load errors currently are not.
+  if (fatal_error_type ==
+      AuctionWorkletManager::FatalErrorType::kWorkletCrash) {
+    OnReportingPhaseComplete(
+        AuctionResult::kWinningComponentSellerWorkletCrashed,
+        // Ignore default error message in case of crash. Instead, use a more
+        // specific one.
+        {base::StrCat({config_->decision_logic_url.spec(),
+                       " crashed while trying to run reportResult()."})});
+  } else {
+    // An error while reloading the worklet to call ReportResult() does not
+    // currently fail the auction.
+    OnReportSellerResultComplete(/*signals_for_winner=*/absl::nullopt,
+                                 /*seller_report_url=*/absl::nullopt,
+                                 /*seller_ad_beacon_map=*/{}, errors);
+  }
+}
+
+void InterestGroupAuction::OnWinningBidderWorkletFatalError(
+    AuctionWorkletManager::FatalErrorType fatal_error_type,
+    const std::vector<std::string>& errors) {
+  // Crashes are considered fatal errors, while load errors currently are not.
+  if (fatal_error_type ==
+      AuctionWorkletManager::FatalErrorType::kWorkletCrash) {
+    OnReportingPhaseComplete(
+        AuctionResult::kWinningBidderWorkletCrashed,
+        // Ignore default error message in case of crash. Instead, use a more
+        // specific one.
+        {base::StrCat({top_bid_->bid->interest_group->bidding_url->spec(),
+                       " crashed while trying to run reportWin()."})});
+  } else {
+    // An error while reloading the worklet to call ReportWin() does not
+    // currently fail the auction.
+    OnReportBidWinComplete(/*bidder_report_url=*/absl::nullopt,
+                           /*bidder_ad_beacon_map=*/{}, errors);
+  }
+}
+
+void InterestGroupAuction::OnComponentAuctionReportingPhaseComplete(
+    bool success) {
+  // Copy ad beacon registry.
+  DCHECK(top_bid_->bid->auction);
+  if (top_bid_->bid->auction->ad_beacon_map_.metadata.count(
+          ReportingDestination::kSeller) > 0) {
+    ad_beacon_map_.metadata[ReportingDestination::kComponentSeller] =
+        top_bid_->bid->auction->ad_beacon_map_
+            .metadata[ReportingDestination::kSeller];
+  }
+  if (top_bid_->bid->auction->ad_beacon_map_.metadata.count(
+          ReportingDestination::kBuyer) > 0) {
+    ad_beacon_map_.metadata[ReportingDestination::kBuyer] =
+        top_bid_->bid->auction->ad_beacon_map_
+            .metadata[ReportingDestination::kBuyer];
+  }
+
+  // Inherit the success or error from the nested auction.
+  OnReportingPhaseComplete(*top_bid_->bid->auction->final_auction_result_);
+}
+
+void InterestGroupAuction::OnReportingPhaseComplete(
+    AuctionResult auction_result,
+    const std::vector<std::string>& errors) {
+  DCHECK(reporting_phase_callback_);
+  DCHECK(!final_auction_result_);
+  // There should be at most two report URLs.
+  DCHECK_LE(report_urls_.size(), 2u);
+
+  TRACE_EVENT_NESTABLE_ASYNC_END0("fledge", "reporting_phase", trace_id_);
+
+  errors_.insert(errors_.end(), errors.begin(), errors.end());
+  final_auction_result_ = auction_result;
+
+  // Close all pipes, as they're no longer needed.
+  ClosePipes();
+
+  std::move(reporting_phase_callback_)
+      .Run(auction_result == AuctionResult::kSuccess);
+}
+
+auction_worklet::mojom::ComponentAuctionOtherSellerPtr
+InterestGroupAuction::GetOtherSellerParam(const Bid& bid) const {
+  auction_worklet::mojom::ComponentAuctionOtherSellerPtr
+      browser_signals_other_seller;
+  if (parent_) {
+    // This is a component seller scoring a bid from its own auction.
+    // Need to provide the top-level seller origin.
+    browser_signals_other_seller =
+        auction_worklet::mojom::ComponentAuctionOtherSeller::NewTopLevelSeller(
+            parent_->config_->seller);
+  } else if (bid.auction != this) {
+    // This is a top-level seller scoring a bid from a component auction.
+    // Need to provide the component seller origin.
+    browser_signals_other_seller =
+        auction_worklet::mojom::ComponentAuctionOtherSeller::NewComponentSeller(
+            bid.auction->config_->seller);
+  }
+  return browser_signals_other_seller;
+}
+
+bool InterestGroupAuction::RequestBidderWorklet(
+    BidState& bid_state,
+    base::OnceClosure worklet_available_callback,
+    AuctionWorkletManager::FatalErrorCallback fatal_error_callback) {
+  DCHECK(!bid_state.worklet_handle);
+
+  const blink::InterestGroup& interest_group = bid_state.bidder.interest_group;
+
+  absl::optional<uint16_t> experiment_group_id = absl::nullopt;
+  auto it = config_->per_buyer_experiment_group_ids.find(interest_group.owner);
+  if (it != config_->per_buyer_experiment_group_ids.end()) {
+    experiment_group_id = it->second;
+  } else {
+    experiment_group_id = config_->all_buyer_experiment_group_id;
+  }
+
+  return auction_worklet_manager_->RequestBidderWorklet(
+      interest_group.bidding_url.value_or(GURL()),
+      interest_group.bidding_wasm_helper_url,
+      interest_group.trusted_bidding_signals_url, experiment_group_id,
+      std::move(worklet_available_callback), std::move(fatal_error_callback),
+      bid_state.worklet_handle);
+}
+
+std::unique_ptr<InterestGroupAuction::Bid> InterestGroupAuction::TryToCreateBid(
+    auction_worklet::mojom::BidderWorkletBidPtr mojo_bid,
+    BidState& bid_state,
+    const absl::optional<uint32_t>& bidding_signals_data_version,
+    const absl::optional<GURL>& debug_loss_report_url,
+    const absl::optional<GURL>& debug_win_report_url) {
+  if (!IsValidBid(mojo_bid->bid)) {
+    mojo::ReportBadMessage("Invalid bid value");
+    return nullptr;
+  }
+
+  if (mojo_bid->bid_duration.is_negative()) {
+    mojo::ReportBadMessage("Invalid bid duration");
+    return nullptr;
+  }
+
+  const blink::InterestGroup& interest_group = bid_state.bidder.interest_group;
+  const blink::InterestGroup::Ad* matching_ad =
+      FindMatchingAd(*interest_group.ads, mojo_bid->render_url);
+  if (!matching_ad) {
+    mojo::ReportBadMessage("Bid render URL must be a valid ad URL");
+    return nullptr;
+  }
+
+  // Validate `ad_component` URLs, if present.
+  std::vector<GURL> ad_components;
+  if (mojo_bid->ad_components) {
+    // Only InterestGroups with ad components should return bids with ad
+    // components.
+    if (!interest_group.ad_components) {
+      mojo::ReportBadMessage("Unexpected non-null ad component list");
+      return nullptr;
+    }
+
+    if (mojo_bid->ad_components->size() > blink::kMaxAdAuctionAdComponents) {
+      mojo::ReportBadMessage("Too many ad component URLs");
+      return nullptr;
+    }
+
+    // Validate each ad component URL is valid and appears in the interest
+    // group's `ad_components` field.
+    for (const GURL& ad_component_url : *mojo_bid->ad_components) {
+      if (!FindMatchingAd(*interest_group.ad_components, ad_component_url)) {
+        mojo::ReportBadMessage(
+            "Bid ad components URL must match a valid ad component URL");
+        return nullptr;
+      }
+    }
+    ad_components = *std::move(mojo_bid->ad_components);
+  }
+
+  // Validate `debug_loss_report_url` and `debug_win_report_url`, if present.
+  if (debug_loss_report_url.has_value() &&
+      !IsUrlValid(debug_loss_report_url.value())) {
+    mojo::ReportBadMessage("Invalid bidder debugging loss report URL");
+    return nullptr;
+  }
+  if (debug_win_report_url.has_value() &&
+      !IsUrlValid(debug_win_report_url.value())) {
+    mojo::ReportBadMessage("Invalid bidder debugging win report URL");
+    return nullptr;
+  }
+
+  return std::make_unique<Bid>(
+      std::move(mojo_bid->ad), mojo_bid->bid, std::move(mojo_bid->render_url),
+      std::move(ad_components), mojo_bid->bid_duration,
+      bidding_signals_data_version, matching_ad, &bid_state, this);
+}
+
+}  // namespace content
diff --git a/content/browser/interest_group/interest_group_auction.h b/content/browser/interest_group/interest_group_auction.h
new file mode 100644
index 0000000..fc4ae68
--- /dev/null
+++ b/content/browser/interest_group/interest_group_auction.h
@@ -0,0 +1,771 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_BROWSER_INTEREST_GROUP_INTEREST_GROUP_AUCTION_H_
+#define CONTENT_BROWSER_INTEREST_GROUP_INTEREST_GROUP_AUCTION_H_
+
+#include <stdint.h>
+
+#include <memory>
+#include <string>
+#include <vector>
+
+#include "base/callback.h"
+#include "base/containers/flat_map.h"
+#include "base/logging.h"
+#include "base/memory/raw_ptr.h"
+#include "base/memory/weak_ptr.h"
+#include "base/time/time.h"
+#include "content/browser/fenced_frame/fenced_frame_url_mapping.h"
+#include "content/browser/interest_group/auction_worklet_manager.h"
+#include "content/browser/interest_group/interest_group_storage.h"
+#include "content/common/content_export.h"
+#include "content/public/browser/content_browser_client.h"
+#include "content/services/auction_worklet/public/mojom/bidder_worklet.mojom.h"
+#include "content/services/auction_worklet/public/mojom/seller_worklet.mojom.h"
+#include "services/network/public/mojom/client_security_state.mojom.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
+#include "third_party/blink/public/common/interest_group/interest_group.h"
+#include "third_party/blink/public/mojom/interest_group/interest_group_types.mojom.h"
+#include "url/gurl.h"
+#include "url/origin.h"
+
+namespace blink {
+struct AuctionConfig;
+}
+
+namespace content {
+
+class InterestGroupManagerImpl;
+
+// An InterestGroupAuction Handles running an auction, or a component auction.
+// Consumers should use AuctionRunner, which sets up InterestGroupAuction and
+// extracts their results. Separate from AuctionRunner so that nested
+// InterestGroupAuction can handle component auctions as well as top-level
+// auction.
+//
+// Auctions have three phases, with phase transitions handled by the owner. All
+// phases complete asynchronously:
+//
+// * Loading interest groups phase: This loads interest groups that can
+// participate in an auction. Waiting for all component auctions to complete
+// this phase before advancing to the next ensures that if any auctions share
+// bidder worklets, they'll all be loaded together, and only send out a single
+// trusted bidding signals request.
+//
+// * Bidding/scoring phase: This phase loads bidder and seller worklets,
+// generates bids, scores bids, and the highest scoring bid for each component
+// auction is passed to its parent auction, which also scores it. When this
+// phase completes, the winner will have been decided.
+//
+// * ReportResult / ReportWin phase: This phase invokes ReportResult() on
+// winning seller worklets and ReportWin() in the winning bidder worklet.
+class CONTENT_EXPORT InterestGroupAuction {
+ public:
+  // Post auction signals (signals only available after auction completes such
+  // as winning bid) for debug loss/win reporting.
+  struct PostAuctionSignals {
+    PostAuctionSignals() = default;
+
+    // For now, top level post auction signals do not have
+    // `highest_scoring_other_bid` or `made_highest_scoring_other_bid`.
+    PostAuctionSignals(double winning_bid, bool made_winning_bid)
+        : winning_bid(winning_bid), made_winning_bid(made_winning_bid) {}
+
+    PostAuctionSignals(double winning_bid,
+                       bool made_winning_bid,
+                       double highest_scoring_other_bid,
+                       bool made_highest_scoring_other_bid)
+        : winning_bid(winning_bid),
+          made_winning_bid(made_winning_bid),
+          highest_scoring_other_bid(highest_scoring_other_bid),
+          made_highest_scoring_other_bid(made_highest_scoring_other_bid) {}
+
+    ~PostAuctionSignals() = default;
+
+    double winning_bid = 0.0;
+    bool made_winning_bid = false;
+    double highest_scoring_other_bid = 0.0;
+    bool made_highest_scoring_other_bid = false;
+  };
+
+  // Returns true if `origin` is allowed to use the interest group API. Will be
+  // called on worklet / interest group origins before using them in any
+  // interest group API.
+  using IsInterestGroupApiAllowedCallback = base::RepeatingCallback<bool(
+      ContentBrowserClient::InterestGroupApiOperation
+          interest_group_api_operation,
+      const url::Origin& origin)>;
+
+  // Result of an auction or a component auction. Used for histograms. Only
+  // recorded for valid auctions. These are used in histograms, so values of
+  // existing entries must not change when adding/removing values, and obsolete
+  // values must not be reused.
+  enum class AuctionResult {
+    // The auction succeeded, with a winning bidder.
+    kSuccess = 0,
+
+    // The auction was aborted, due to either navigating away from the frame
+    // that started the auction or browser shutdown.
+    kAborted = 1,
+
+    // Bad message received over Mojo. This is potentially a security error.
+    kBadMojoMessage = 2,
+
+    // The user was in no interest groups that could participate in the auction.
+    kNoInterestGroups = 3,
+
+    // The seller worklet failed to load.
+    kSellerWorkletLoadFailed = 4,
+
+    // The seller worklet crashed.
+    kSellerWorkletCrashed = 5,
+
+    // All bidders failed to bid. This happens when all bidders choose not to
+    // bid, fail to load, or crash before making a bid.
+    kNoBids = 6,
+
+    // The seller worklet rejected all bids (of which there was at least one).
+    kAllBidsRejected = 7,
+
+    // The winning bidder worklet crashed. The bidder must have successfully
+    // bid, and the seller must have accepted the bid for this to be logged.
+    kWinningBidderWorkletCrashed = 8,
+
+    // The seller is not allowed to use the interest group API.
+    kSellerRejected = 9,
+
+    // The component auction completed with a winner, but that winner lost the
+    // top-level auction.
+    kComponentLostAuction = 10,
+
+    // The component seller worklet with the winning bidder crashed during the
+    // reporting phase.
+    kWinningComponentSellerWorkletCrashed = 11,
+
+    kMaxValue = kWinningComponentSellerWorkletCrashed
+  };
+
+  struct BidState {
+    BidState();
+    BidState(BidState&&);
+    ~BidState();
+
+    // Disable copy and assign, since this struct owns a
+    // auction_worklet::mojom::BiddingInterestGroupPtr, and mojo classes are not
+    // copiable.
+    BidState(BidState&) = delete;
+    BidState& operator=(BidState&) = delete;
+
+    // Populates `trace_id` with a new trace ID and logs the first trace event
+    // for it.
+    void BeginTracing();
+
+    // Logs the final event for `trace_id` and clears it. Automatically called
+    // on destruction so trace events are all closed if an auction is cancelled.
+    void EndTracing();
+
+    StorageInterestGroup bidder;
+
+    // Holds a reference to the BidderWorklet, once created.
+    std::unique_ptr<AuctionWorkletManager::WorkletHandle> worklet_handle;
+
+    // Tracing ID associated with the BidState. A nestable async "Bid" trace
+    // event is started for a bid state during the generate and score bid phase
+    // when the worklet is requested, and ended once the bid is score, or the
+    // bidder worklet fails to bid.
+    //
+    // Additionally, if the BidState is a winner of a component auction, another
+    // "Bid" trace event is created when the top-level auction scores the bid,
+    // and ends when scoring is complete.
+    //
+    // Nested events are logged using this ID both by the Auction and by Mojo
+    // bidder and seller worklets, potentially in another process.
+    //
+    // absl::nullopt means no ID is currently assigned, and there's no pending
+    // event.
+    absl::optional<uint64_t> trace_id;
+
+    // True if the worklet successfully made a bid.
+    bool made_bid = false;
+
+    // URLs of forDebuggingOnly.reportAdAuctionLoss(url) and
+    // forDebuggingOnly.reportAdAuctionWin(url) called in generateBid().
+    // They support post auction signal placeholders in their URL string,
+    // for example, "https://example.com/${highestScoringOtherBid}".
+    // Placeholders will be replaced by corresponding values. For a component
+    // auction, post auction signals are only from the component auction, but
+    // not the top-level auction.
+    absl::optional<GURL> bidder_debug_loss_report_url;
+    absl::optional<GURL> bidder_debug_win_report_url;
+
+    // URLs of forDebuggingOnly.reportAdAuctionLoss(url) and
+    // forDebuggingOnly.reportAdAuctionWin(url) called in scoreAd(). In the case
+    // of a component auction, these are the values from component seller that
+    // the scored ad was created in, and post auction signals are from the
+    // component auction.
+    absl::optional<GURL> seller_debug_loss_report_url;
+    absl::optional<GURL> seller_debug_win_report_url;
+
+    // URLs of forDebuggingOnly.reportAdAuctionLoss(url) and
+    // forDebuggingOnly.reportAdAuctionWin(url) called in scoreAd() from the
+    // top-level seller, in the case this bidder was made in a component
+    // auction, won it, and was then scored by the top-level seller.
+    absl::optional<GURL> top_level_seller_debug_win_report_url;
+    absl::optional<GURL> top_level_seller_debug_loss_report_url;
+  };
+
+  // Result of generated a bid. Contains information that needs to score a bid
+  // and is persisted to the end of the auction if the bidder wins. Largely
+  // duplicates auction_worklet::mojom::BidderWorkletBid, with additional
+  // information about the bidder.
+  struct Bid {
+    Bid(std::string ad_metadata,
+        double bid,
+        GURL render_url,
+        std::vector<GURL> ad_components,
+        base::TimeDelta bid_duration,
+        absl::optional<uint32_t> bidding_signals_data_version,
+        const blink::InterestGroup::Ad* bid_ad,
+        BidState* bid_state,
+        InterestGroupAuction* auction);
+
+    Bid(Bid&);
+
+    ~Bid();
+
+    // These are taken directly from the
+    // auction_worklet::mojom::BidderWorkletBid.
+    const std::string ad_metadata;
+    const double bid;
+    const GURL render_url;
+    const std::vector<GURL> ad_components;
+    const base::TimeDelta bid_duration;
+    const absl::optional<uint32_t> bidding_signals_data_version;
+
+    // InterestGroup that made the bid. Owned by the BidState of that
+    // InterestGroup.
+    const raw_ptr<const blink::InterestGroup, DanglingUntriaged> interest_group;
+
+    // Points to the InterestGroupAd within `interest_group`.
+    const raw_ptr<const blink::InterestGroup::Ad, DanglingUntriaged> bid_ad;
+
+    // `bid_state` of the InterestGroup that made the bid. This should not be
+    // written to, except for adding seller debug reporting URLs.
+    const raw_ptr<BidState, DanglingUntriaged> bid_state;
+
+    // The Auction with the interest group that made this bid. Important in the
+    // case of component auctions.
+    const raw_ptr<InterestGroupAuction, DanglingUntriaged> auction;
+  };
+
+  // Combines a Bid with seller score and seller state needed to invoke its
+  // ReportResult() method.
+  struct ScoredBid {
+    ScoredBid(double score,
+              absl::optional<uint32_t> scoring_signals_data_version,
+              std::unique_ptr<Bid> bid,
+              auction_worklet::mojom::ComponentAuctionModifiedBidParamsPtr
+                  component_auction_modified_bid_params);
+    ~ScoredBid();
+
+    // The seller's desirability score for the bid.
+    const double score;
+
+    // The seller's scoring signals version.
+    const absl::optional<uint32_t> scoring_signals_data_version;
+
+    // The bid that came from the bidder or component Auction.
+    const std::unique_ptr<Bid> bid;
+
+    // Modifications that should be applied to `bid` before the parent
+    // auction uses it. Only present for bids in component Auctions. When
+    // the top-level auction creates a ScoredBid represending the result from
+    // a component auction, the params have already been applied to the
+    // underlying Bid, so the params are no longer needed.
+    const auction_worklet::mojom::ComponentAuctionModifiedBidParamsPtr
+        component_auction_modified_bid_params;
+  };
+
+  // Callback that's called when a phase of the InterestGroupAuction completes.
+  // Always invoked asynchronously.
+  using AuctionPhaseCompletionCallback = base::OnceCallback<void(bool success)>;
+
+  // All passed in raw pointers must remain valid until the InterestGroupAuction
+  // is destroyed. `config` is typically owned by the AuctionRunner's
+  // `owned_auction_config_` field. `parent` should be the parent
+  // InterestGroupAuction if this is a component auction, and null, otherwise.
+  InterestGroupAuction(const blink::AuctionConfig* config,
+                       const InterestGroupAuction* parent,
+                       AuctionWorkletManager* auction_worklet_manager,
+                       InterestGroupManagerImpl* interest_group_manager,
+                       base::Time auction_start_time);
+
+  InterestGroupAuction(const InterestGroupAuction&) = delete;
+  InterestGroupAuction& operator=(const InterestGroupAuction&) = delete;
+
+  ~InterestGroupAuction();
+
+  // Starts loading the interest groups that can participate in an auction.
+  //
+  // Both seller and buyer origins are filtered by
+  // `is_interest_group_api_allowed`, and any any not allowed to use the API
+  // are excluded from participating in the auction.
+  //
+  // Invokes `load_interest_groups_phase_callback` asynchronously on
+  // completion. Passes it false if there are no interest groups that may
+  // participate in the auction (possibly because sellers aren't allowed to
+  // participate in the auction)
+  void StartLoadInterestGroupsPhase(
+      IsInterestGroupApiAllowedCallback is_interest_group_api_allowed_callback,
+      AuctionPhaseCompletionCallback load_interest_groups_phase_callback);
+
+  // Starts bidding and scoring phase of the auction.
+  //
+  // `on_seller_receiver_callback`, if non-null, is invoked once the seller
+  // worklet has been received, or if the seller worklet is no longer needed
+  // (e.g., if all bidders fail to bid before the seller worklet has
+  // been received). This is needed so that in the case of component auctions,
+  // the top-level seller worklet will only be requested once all component
+  // seller worklets have been received, to prevent deadlock (the top-level
+  // auction could be waiting on a bid from a seller, while the top-level
+  // seller worklet being is blocking a component seller worklet from being
+  // created, due to the process limit). Unlike other callbacks,
+  // `on_seller_receiver_callback` may be called synchronously.
+  //
+  // `bidding_and_scoring_phase_callback` is invoked asynchronously when
+  // either the auction has failed to produce a winner, or the auction has a
+  // winner. `success` is true only when there is a winner.
+  void StartBiddingAndScoringPhase(
+      base::OnceClosure on_seller_receiver_callback,
+      AuctionPhaseCompletionCallback bidding_and_scoring_phase_callback);
+
+  // Starts the reporting phase of the auction. Callback is invoked
+  // asynchronously when either the auction has encountered a fatal error, or
+  // when all reporting URLs (if any) have been retrieved from the applicable
+  // worklets. `success` is true if the final status of the auction is
+  // `kSuccess`.
+  //
+  // If this is a component auction, `top_seller_signals` must populated and
+  // be the output from the top-level seller's reportResult() method.
+  void StartReportingPhase(
+      absl::optional<std::string> top_seller_signals,
+      AuctionPhaseCompletionCallback reporting_phase_callback);
+
+  // Close all Mojo pipes and release all weak pointers. Called when an
+  // auction fails and on auction complete.
+  void ClosePipes();
+
+  // Returns all interest groups that bid in an auction. Expected to be called
+  // after the bidding and scoring phase completes, but before the reporting
+  // phase. Returns an empty set if the auction failed for any reason other
+  // than the seller rejecting all bids.
+  //
+  // TODO(mmenke): Consider calling this after the reporting phase.
+  void GetInterestGroupsThatBid(blink::InterestGroupSet& interest_groups) const;
+
+  // Retrieves any debug reporting URLs. May only be called once, since it
+  // takes ownership of stored reporting URLs.
+  void TakeDebugReportUrls(std::vector<GURL>& debug_win_report_urls,
+                           std::vector<GURL>& debug_loss_report_urls);
+
+  // Retrieves the ad beacon map. May only be called once, since it takes
+  // ownership of the stored ad beacon map.
+  ReportingMetadata TakeAdBeaconMap() { return std::move(ad_beacon_map_); }
+
+  // Retrieves any reporting URLs returned by ReportWin() and ReportResult()
+  // methods. May only be called after an auction has completed successfully.
+  // May only be called once, since it takes ownership of stored reporting
+  // URLs.
+  std::vector<GURL> TakeReportUrls();
+
+  // Retrieves any errors from the auction. May only be called once, since it
+  // takes ownership of stored errors.
+  std::vector<std::string> TakeErrors();
+
+  // Retrieves (by appending) all owners of interest groups that participated
+  // in this auction (or any of its child auctions) that successfully loaded
+  // at least one interest group. May only be called after the auction has
+  // completed, for either success or failure. Duplication is possible,
+  // particularly if an owner is listed in multiple auction components. May
+  // only be called once, since it moves the stored origins.
+  void TakePostAuctionUpdateOwners(std::vector<url::Origin>& owners);
+
+  // Returns the top bid of the auction. May only be invoked after the
+  // bidding and scoring phase has completed successfully.
+  ScoredBid* top_bid();
+
+ private:
+  using AuctionList = std::list<std::unique_ptr<InterestGroupAuction>>;
+
+  // ---------------------------------
+  // Load interest group phase methods
+  // ---------------------------------
+
+  // Invoked whenever the interest groups for a buyer have loaded. Adds
+  // `interest_groups` to `bid_states_`.
+  void OnInterestGroupRead(std::vector<StorageInterestGroup> interest_groups);
+
+  // Invoked when the interest groups for an entire component auction have
+  // loaded. If `success` is false, removes the component auction.
+  void OnComponentInterestGroupsRead(AuctionList::iterator component_auction,
+                                     bool success);
+
+  // Invoked when the interest groups for a buyer or for an entire component
+  // auction have loaded. Completes the loading phase if no pending loads
+  // remain.
+  void OnOneLoadCompleted();
+
+  // Invoked once the interest group load phase has completed. Never called
+  // synchronously from StartLoadInterestGroupsPhase(), to avoid reentrancy
+  // (AuctionRunner::callback_ cannot be invoked until
+  // AuctionRunner::CreateAndStart() completes). `auction_result` is the
+  // result of trying to load the interest groups that can participate in the
+  // auction. It's AuctionResult::kSuccess if there are interest groups that
+  // can take part in the auction, and a failure value otherwise.
+  void OnStartLoadInterestGroupsPhaseComplete(AuctionResult auction_result);
+
+  // -------------------------------------
+  // Generate and score bids phase methods
+  // -------------------------------------
+
+  // Called when a component auction has received a worklet. Calls
+  // RequestSellerWorklet() if all component auctions have received worklets.
+  // See StartBiddingAndScoringPhase() for discussion of this.
+  void OnComponentSellerWorkletReceived();
+
+  // Requests a seller worklet from the AuctionWorkletManager.
+  void RequestSellerWorklet();
+
+  // Called when RequestSellerWorklet() returns. Starts scoring bids, if there
+  // are any.
+  void OnSellerWorkletReceived();
+
+  // Requests bidder worklets from the AuctionWorkletManager for all bidders.
+  void RequestBidderWorklets();
+
+  // Invoked by the AuctionWorkletManager on fatal errors, at any point after
+  // a SellerWorklet has been provided. Results in auction immediately
+  // failing. Unlike most other methods, may be invoked during either the
+  // generate bid phase or the reporting phase, since the seller worklet is
+  // not unloaded between the two phases.
+  void OnSellerWorkletFatalError(
+      AuctionWorkletManager::FatalErrorType fatal_error_type,
+      const std::vector<std::string>& errors);
+
+  // Invoked whenever the AuctionWorkletManager has provided a BidderWorket
+  // for the bidder identified by `bid_state`. Starts generating a bid.
+  void OnBidderWorkletReceived(BidState* bid_state);
+
+  // Calls SendPendingSignalsRequests() for the BidderWorklet of `bid_state`,
+  // if it hasn't been destroyed. This is done asynchronously, so that
+  // BidStates that share a BidderWorklet all call GenerateBid() before this
+  // is invoked for all of them.
+  //
+  // This does result in invoking SendPendingSignalsRequests() multiple times
+  // for BidStates that share BidderWorklets, though that should be fairly low
+  // overhead.
+  void SendPendingSignalsRequestsForBidder(BidState* bid_state);
+
+  // Called when the `bid_state` BidderWorklet crashes or fails to load.
+  // Invokes OnGenerateBidComplete() for the worklet with a failure.
+  void OnBidderWorkletGenerateBidFatalError(
+      BidState* bid_state,
+      AuctionWorkletManager::FatalErrorType fatal_error_type,
+      const std::vector<std::string>& errors);
+
+  // Called once a bid has been generated, or has failed to be generated.
+  // Releases the BidderWorklet handle and instructs the SellerWorklet to
+  // start scoring the bid, if there is one.
+  void OnGenerateBidComplete(BidState* state,
+                             auction_worklet::mojom::BidderWorkletBidPtr bid,
+                             uint32_t bidding_signals_data_version,
+                             bool has_bidding_signals_data_version,
+                             const absl::optional<GURL>& debug_loss_report_url,
+                             const absl::optional<GURL>& debug_win_report_url,
+                             double set_priority,
+                             bool has_set_priority,
+                             const std::vector<std::string>& errors);
+
+  // True if all bid results and the seller script load are complete.
+  bool AllBidsScored() const { return outstanding_bids_ == 0; }
+
+  // Invoked when a component auction completes. If `success` is true, gets
+  // the Bid from `component_auction` and passes a copy of it to ScoreBid().
+  void OnComponentAuctionComplete(InterestGroupAuction* component_auction,
+                                  bool success);
+
+  // Called when either a bidder worklet's GenerateBid() method or a component
+  // seller worklet's bid and scoring phase completes without creating a bid
+  // (this includes worklet crashes and load failures).
+  void OnNoBid();
+
+  // Validates that `mojo_bid` is valid and, if it is, creates a Bid
+  // corresponding to it, consuming it. Returns nullptr and calls
+  // ReportBadMessage() if it's not valid. Does not mutate `bid_state`, but
+  // the returned Bid has a non-const pointer to it.
+  std::unique_ptr<Bid> TryToCreateBid(
+      auction_worklet::mojom::BidderWorkletBidPtr mojo_bid,
+      BidState& bid_state,
+      const absl::optional<uint32_t>& bidding_signals_data_version,
+      const absl::optional<GURL>& debug_loss_report_url,
+      const absl::optional<GURL>& debug_win_report_url);
+
+  // Calls into the seller asynchronously to score the passed in bid.
+  void ScoreBidIfReady(std::unique_ptr<Bid> bid);
+
+  // Callback from ScoreBid().
+  void OnBidScored(std::unique_ptr<Bid> bid,
+                   double score,
+                   auction_worklet::mojom::ComponentAuctionModifiedBidParamsPtr
+                       component_auction_modified_bid_params,
+                   uint32_t scoring_signals_data_version,
+                   bool has_scoring_signals_data_version,
+                   const absl::optional<GURL>& debug_loss_report_url,
+                   const absl::optional<GURL>& debug_win_report_url,
+                   const std::vector<std::string>& errors);
+
+  // Invoked when the bid becomes the new highest scoring other bid, to handle
+  // calculation of post auction signals. `owner` is nullptr in the event the
+  // bid is tied with the top bid, and they have different origins.
+  void OnNewHighestScoringOtherBid(double score,
+                                   double bid_value,
+                                   const url::Origin* owner);
+
+  absl::optional<std::string> PerBuyerSignals(const BidState* state);
+  absl::optional<base::TimeDelta> PerBuyerTimeout(const BidState* state);
+  absl::optional<base::TimeDelta> SellerTimeout();
+
+  // If there are no `outstanding_bids_`, completes the bidding and scoring
+  // phase.
+  void MaybeCompleteBiddingAndScoringPhase();
+
+  // Invoked when the bidding and scoring phase of an auction completes.
+  // `auction_result` is AuctionResult::kSuccess if the auction has a winner,
+  // and some other value otherwise. Appends `errors` to `errors_`.
+  void OnBiddingAndScoringComplete(AuctionResult auction_result,
+                                   const std::vector<std::string>& errors = {});
+
+  // -----------------------
+  // Reporting phase methods
+  // -----------------------
+
+  // Sequence of asynchronous methods to call into the seller and then bidder
+  // worklet to report a win. Will ultimately invoke
+  // `reporting_phase_callback_`, which will delete the auction.
+  void ReportSellerResult(absl::optional<std::string> top_seller_signals);
+  void OnReportSellerResultComplete(
+      const absl::optional<std::string>& signals_for_winner,
+      const absl::optional<GURL>& seller_report_url,
+      const base::flat_map<std::string, GURL>& seller_ad_beacon_map,
+      const std::vector<std::string>& error_msgs);
+  void LoadBidderWorkletToReportBidWin(const std::string& signals_for_winner);
+  void ReportBidWin(const std::string& signals_for_winner);
+  void OnReportBidWinComplete(
+      const absl::optional<GURL>& bidder_report_url,
+      const base::flat_map<std::string, GURL>& bidder_ad_beacon_map,
+      const std::vector<std::string>& error_msgs);
+
+  // Called when the component SellerWorklet with the bidder that won an
+  // auction has an out-of-band fatal error during the ReportResult() call.
+  void OnWinningComponentSellerWorkletFatalError(
+      AuctionWorkletManager::FatalErrorType fatal_error_type,
+      const std::vector<std::string>& errors);
+
+  // Called when the BidderWorklet that won an auction has an out-of-band
+  // fatal error during the ReportWin() call.
+  void OnWinningBidderWorkletFatalError(
+      AuctionWorkletManager::FatalErrorType fatal_error_type,
+      const std::vector<std::string>& errors);
+
+  // Invoked when the nested component auction with the winning bid's
+  // reporting phase is complete. Completes the reporting phase for `this`.
+  void OnComponentAuctionReportingPhaseComplete(bool success);
+
+  // Called when the final phase of the auction completes. Unconditionally
+  // sets `final_auction_result`, even if `auction_result` is
+  // AuctionResult::kSuccess, unlike other phase completion methods. Appends
+  // `errors` to `errors_`.
+  void OnReportingPhaseComplete(AuctionResult auction_result,
+                                const std::vector<std::string>& errors = {});
+
+  // -----------------------------------
+  // Methods not associated with a phase
+  // -----------------------------------
+
+  // Creates a ComponentAuctionOtherSeller to pass to SellerWorklets when
+  // dealing with `bid`. If `this` is a component auction, returns an object
+  // with a `top_level_seller`. If this is a top-level auction and `bid` comes
+  // from a component auction, returns an object with a `component_seller` to
+  // `bid's` seller.
+  auction_worklet::mojom::ComponentAuctionOtherSellerPtr GetOtherSellerParam(
+      const Bid& bid) const;
+
+  // Requests a WorkletHandle for the interest group identified by
+  // `bid_state`, using the provided callbacks. Returns true if a worklet was
+  // received synchronously.
+  [[nodiscard]] bool RequestBidderWorklet(
+      BidState& bid_state,
+      base::OnceClosure worklet_available_callback,
+      AuctionWorkletManager::FatalErrorCallback fatal_error_callback);
+
+  // Replace `${}` placeholders in debug report URLs for post auction signals
+  // if exist.
+  GURL FillPostAuctionSignals(const GURL& url,
+                              const PostAuctionSignals& signals,
+                              const absl::optional<PostAuctionSignals>&
+                                  top_level_signals = absl::nullopt);
+
+  // Tracing ID associated with the Auction. A nestable async "Auction" trace
+  // event lasts for the lifetime of `this`. Sequential events that apply to
+  // the entire auction are logged using this ID, including potentially
+  // out-of-process events by bidder and seller worklet reporting methods.
+  const uint64_t trace_id_;
+
+  const raw_ptr<AuctionWorkletManager> auction_worklet_manager_;
+  const raw_ptr<InterestGroupManagerImpl> interest_group_manager_;
+
+  // Configuration of this auction.
+  raw_ptr<const blink::AuctionConfig> config_;
+  // If this is a component auction, the parent Auction. Null, otherwise.
+  const raw_ptr<const InterestGroupAuction> parent_;
+
+  // Component auctions that are part of this auction. This auction manages
+  // their state transition, and their bids may participate in this auction as
+  // well. Component auctions that fail in the load phase are removed from
+  // this list, to avoid trying to load their worklets during the scoring
+  // phase.
+  AuctionList component_auctions_;
+
+  // Final result of the auction, once completed. Null before completion.
+  absl::optional<AuctionResult> final_auction_result_;
+
+  // Each phases uses its own callback, to make sure that the right callback
+  // is invoked when the phase completes.
+  AuctionPhaseCompletionCallback load_interest_groups_phase_callback_;
+  AuctionPhaseCompletionCallback bidding_and_scoring_phase_callback_;
+  AuctionPhaseCompletionCallback reporting_phase_callback_;
+
+  // Invoked in the bidding and scoring phase, once the seller worklet has
+  // loaded. May be null.
+  base::OnceClosure on_seller_receiver_callback_;
+
+  // The number of buyers and component auctions with pending interest group
+  // loads from storage. Decremented each time either the interest groups for
+  // a buyer or all buyers for a component are read.
+  // `load_interest_groups_phase_callback` is invoked once this hits 0.
+  size_t num_pending_loads_ = 0;
+
+  // True once a seller worklet has been received from the
+  // AuctionWorkletManager.
+  bool seller_worklet_received_ = false;
+
+  // Number of bids that have yet to be sent to the SellerWorklet. This
+  // includes BidderWorklets that have not yet been loaded, those whose
+  // GenerateBid() method is currently being run, and those that are waiting
+  // on the seller worklet to load, as well as component auctions that are
+  // still running. When this reaches 0, the SellerWorklet's
+  // SendPendingSignalsRequests() should be invoked, so it can send any
+  // pending scoring signals requests.
+  int num_bids_not_sent_to_seller_worklet_;
+
+  // Number of bids which the seller has not yet finished scoring. This
+  // includes bids included in `num_bids_not_sent_to_seller_worklet_`, as well
+  // as any bids waiting on the seller worklet to load, and bids the seller
+  // worklet is currently scoring. When this reaches 0, the bid with the
+  // highest score is the winner, and bidding and scoring phase is completed.
+  int outstanding_bids_;
+
+  // The number of `component_auctions_` that have yet to request seller
+  // worklets. Once it hits 0, the seller worklet for `this` is loaded. See
+  // StartBiddingAndScoringPhase() for more details.
+  size_t pending_component_seller_worklet_requests_ = 0;
+
+  // State of all loaded interest groups.
+  std::vector<BidState> bid_states_;
+
+  // Bids waiting on the seller worklet to load before scoring. Does not
+  // include bids that are currently waiting on the worklet's ScoreAd() method
+  // to complete.
+  std::vector<std::unique_ptr<Bid>> unscored_bids_;
+
+  // The time the auction started. Use a single base time for all Worklets, to
+  // present a more consistent view of the universe.
+  const base::Time auction_start_time_;
+
+  // The number of buyers in the AuctionConfig that passed the
+  // IsInterestGroupApiAllowedCallback filter and interest groups were found
+  // for. Includes buyers from nested component auctions. Double-counts buyers
+  // in multiple Auctions.
+  int num_owners_loaded_ = 0;
+
+  // The number of buyers with InterestGroups participating in an auction.
+  // Includes buyers from nested component auctions. Double-counts buyers in
+  // multiple Auctions.
+  int num_owners_with_interest_groups_ = 0;
+
+  // A list of all buyer owners that participated in this auction and had at
+  // least one interest group. These owners will have their interest groups
+  // updated after a successful auction, barring rate-limiting.
+  std::vector<url::Origin> post_auction_update_owners_;
+
+  // A list of all interest groups that need to have their priority adjusted.
+  // The new rates will be committed after a successful auction.
+  std::vector<std::pair<blink::InterestGroupKey, double>>
+      post_auction_priority_updates_;
+
+  // The highest scoring bid so far. Null if no bid has been accepted yet.
+  std::unique_ptr<ScoredBid> top_bid_;
+  // Number of bidders with the same score as `top_bidder`.
+  size_t num_top_bids_ = 0;
+  // Number of bidders with the same score as `second_highest_score_`. If the
+  // second highest score matches the highest score, this does not include the
+  // top bid.
+  size_t num_second_highest_bids_ = 0;
+
+  // The numeric value of the bid that got the second highest score. When
+  // there's a tie for the second highest score, one of the second highest
+  // scoring bids is randomly chosen.
+  double highest_scoring_other_bid_ = 0.0;
+  double second_highest_score_ = 0.0;
+  // Whether all bids of the highest score are from the same interest group
+  // owner.
+  bool at_most_one_top_bid_owner_ = true;
+  // Will be null in the end if there are interest groups having the second
+  // highest score with different owners. That includes the top bid itself, in
+  // the case there's a tie for the top bid.
+  absl::optional<url::Origin> highest_scoring_other_bid_owner_;
+
+  // Holds a reference to the SellerWorklet used by the auction.
+  std::unique_ptr<AuctionWorkletManager::WorkletHandle> seller_worklet_handle_;
+
+  // Report URLs from reportResult() and reportWin() methods. An auction's
+  // report URL from reportResult() comes before the URL from its reportWin()
+  // method if there is one. Returned to `callback_` to deal with, so the
+  // auction itself can be deleted at the end of the auction.
+  std::vector<GURL> report_urls_;
+
+  // All errors reported by worklets thus far.
+  std::vector<std::string> errors_;
+
+  // Ad Beacon URL mapping generated from reportResult() or reportWin() from
+  // this auction and its components. Destination is relative to this auction.
+  // Returned to `callback_` to deal with, so the Auction itself can be
+  // deleted at the end of the auction.
+  ReportingMetadata ad_beacon_map_;
+
+  // This is set to true if the scoring phase ran and was able to score all
+  // bids that were made (of which there may have been none). This is used to
+  // gate accessors that should return nothing if the entire auction failed
+  // (e.g., don't want to report bids as having "lost" an auction if the
+  // seller failed to load, since neither the bids nor the bidders were the
+  // problem).
+  bool all_bids_scored_ = false;
+
+  base::WeakPtrFactory<InterestGroupAuction> weak_ptr_factory_{this};
+};
+
+}  // namespace content
+
+#endif  // CONTENT_BROWSER_INTEREST_GROUP_INTEREST_GROUP_AUCTION_H_
diff --git a/content/browser/isolated_origin_browsertest.cc b/content/browser/isolated_origin_browsertest.cc
index b4e4d90..e98647d 100644
--- a/content/browser/isolated_origin_browsertest.cc
+++ b/content/browser/isolated_origin_browsertest.cc
@@ -117,11 +117,15 @@
         .requires_origin_keyed_process();
   }
 
+  // Assuming no additional explicit opt-in or opt-out was requested, check what
+  // isolation state would currently be used for a navigation to |url| in
+  // |site_instance| in the test, based on the current state in the
+  // BrowsingInstance.
   OriginAgentClusterIsolationState DetermineOriginAgentClusterIsolation(
       SiteInstanceImpl* site_instance,
       const GURL& url) {
     OriginAgentClusterIsolationState isolation_request =
-        OriginAgentClusterIsolationState::CreateNonIsolated();
+        OriginAgentClusterIsolationState::CreateForDefaultIsolation();
 
     return ChildProcessSecurityPolicyImpl::GetInstance()
         ->DetermineOriginAgentClusterIsolation(
@@ -580,9 +584,9 @@
   // Make sure the master opt-in list has the base origin isolated and the sub
   // origin not isolated.
   BrowserContext* browser_context = web_contents()->GetBrowserContext();
-  EXPECT_TRUE(policy->HasOriginEverRequestedOptInIsolation(
+  EXPECT_TRUE(policy->HasOriginEverRequestedOriginAgentClusterValue(
       browser_context, url::Origin::Create(isolated_base_origin_url)));
-  EXPECT_FALSE(policy->HasOriginEverRequestedOptInIsolation(
+  EXPECT_FALSE(policy->HasOriginEverRequestedOriginAgentClusterValue(
       browser_context, url::Origin::Create(non_isolated_sub_origin)));
 }
 
@@ -736,6 +740,19 @@
             static_cast<int>(NavigationRequest::OriginAgentClusterEndResult::
                                  kNotExplicitlyRequestedAndOriginKeyed),
             1)));
+    // Ensure that the implicit case did not do a global walk (which would be
+    // inefficient), by noticing that a hypothetical request for non-isolation
+    // of that origin in the same SiteInstance would succeed. That can only
+    // happen if the implicit case was not recorded in the BrowsingInstance.
+    OriginAgentClusterIsolationState hypothetical_isolation_request =
+        OriginAgentClusterIsolationState::CreateNonIsolated();
+    OriginAgentClusterIsolationState hypothetical_isolation_state =
+        ChildProcessSecurityPolicyImpl::GetInstance()
+            ->DetermineOriginAgentClusterIsolation(
+                site_instance->GetIsolationContext(),
+                url::Origin::Create(default_isolated_url),
+                hypothetical_isolation_request);
+    EXPECT_FALSE(hypothetical_isolation_state.is_origin_agent_cluster());
   }
   {
     // The "isolate_origin" path in the url will force the test framework to
@@ -1180,7 +1197,7 @@
                        url::Origin::Create(isolated_suborigin_url),
                        MakeOACIsolationState(false))
                    .requires_origin_keyed_process());
-  EXPECT_TRUE(policy->HasOriginEverRequestedOptInIsolation(
+  EXPECT_TRUE(policy->HasOriginEverRequestedOriginAgentClusterValue(
       web_contents()->GetBrowserContext(),
       url::Origin::Create(isolated_suborigin_url)));
 
@@ -1254,7 +1271,7 @@
                        url::Origin::Create(isolated_suborigin_url),
                        MakeOACIsolationState(false))
                    .requires_origin_keyed_process());
-  EXPECT_TRUE(policy->HasOriginEverRequestedOptInIsolation(
+  EXPECT_TRUE(policy->HasOriginEverRequestedOriginAgentClusterValue(
       web_contents()->GetBrowserContext(),
       url::Origin::Create(isolated_suborigin_url)));
 
@@ -1377,7 +1394,7 @@
       origin, MakeOACIsolationState(false));
   EXPECT_TRUE(isolation_result.is_origin_agent_cluster());
   EXPECT_FALSE(isolation_result.requires_origin_keyed_process());
-  EXPECT_TRUE(policy->HasOriginEverRequestedOptInIsolation(
+  EXPECT_TRUE(policy->HasOriginEverRequestedOriginAgentClusterValue(
       web_contents()->GetBrowserContext(), origin));
 }
 
@@ -1617,7 +1634,7 @@
 
   // Make sure the master opt-in list still has the origin tracked.
   auto* policy = ChildProcessSecurityPolicyImpl::GetInstance();
-  EXPECT_TRUE(policy->HasOriginEverRequestedOptInIsolation(
+  EXPECT_TRUE(policy->HasOriginEverRequestedOriginAgentClusterValue(
       web_contents()->GetBrowserContext(),
       url::Origin::Create(isolated_suborigin_url)));
 
@@ -1687,7 +1704,7 @@
 
   // Make sure the master opt-in list has the origin listed.
   auto* policy = ChildProcessSecurityPolicyImpl::GetInstance();
-  EXPECT_TRUE(policy->HasOriginEverRequestedOptInIsolation(
+  EXPECT_TRUE(policy->HasOriginEverRequestedOriginAgentClusterValue(
       web_contents()->GetBrowserContext(),
       url::Origin::Create(isolated_suborigin_url)));
 
@@ -1750,7 +1767,7 @@
 
   // Make sure the master opt-in list has the origin listed.
   auto* policy = ChildProcessSecurityPolicyImpl::GetInstance();
-  EXPECT_TRUE(policy->HasOriginEverRequestedOptInIsolation(
+  EXPECT_TRUE(policy->HasOriginEverRequestedOriginAgentClusterValue(
       web_contents()->GetBrowserContext(),
       url::Origin::Create(isolated_suborigin_url)));
 
@@ -2077,11 +2094,11 @@
   // Make sure the master opt-in list has the base origin as isolated, but not
   // the sub-origins.
   BrowserContext* browser_context = web_contents()->GetBrowserContext();
-  EXPECT_TRUE(policy->HasOriginEverRequestedOptInIsolation(
+  EXPECT_TRUE(policy->HasOriginEverRequestedOriginAgentClusterValue(
       browser_context, url::Origin::Create(test_url)));
-  EXPECT_FALSE(policy->HasOriginEverRequestedOptInIsolation(
+  EXPECT_FALSE(policy->HasOriginEverRequestedOriginAgentClusterValue(
       browser_context, url::Origin::Create(non_isolated_sub_origin1)));
-  EXPECT_FALSE(policy->HasOriginEverRequestedOptInIsolation(
+  EXPECT_FALSE(policy->HasOriginEverRequestedOriginAgentClusterValue(
       browser_context, url::Origin::Create(non_isolated_sub_origin2)));
 
   EXPECT_THAT(
@@ -2214,11 +2231,11 @@
   // Make sure the master opt-in list has the base origin isolated and the sub
   // origins both not isolated.
   BrowserContext* browser_context = web_contents()->GetBrowserContext();
-  EXPECT_TRUE(policy->HasOriginEverRequestedOptInIsolation(
+  EXPECT_TRUE(policy->HasOriginEverRequestedOriginAgentClusterValue(
       browser_context, url::Origin::Create(isolated_base_origin_url)));
-  EXPECT_FALSE(policy->HasOriginEverRequestedOptInIsolation(
+  EXPECT_FALSE(policy->HasOriginEverRequestedOriginAgentClusterValue(
       browser_context, url::Origin::Create(non_isolated_sub_origin_url_a)));
-  EXPECT_FALSE(policy->HasOriginEverRequestedOptInIsolation(
+  EXPECT_FALSE(policy->HasOriginEverRequestedOriginAgentClusterValue(
       browser_context, url::Origin::Create(non_isolated_sub_origin_url_b)));
 }
 
diff --git a/content/browser/isolated_origin_util.cc b/content/browser/isolated_origin_util.cc
index 87410df..4a20843 100644
--- a/content/browser/isolated_origin_util.cc
+++ b/content/browser/isolated_origin_util.cc
@@ -122,6 +122,15 @@
 }
 
 // static
+bool IsolatedOriginUtil::IsValidOriginForOptOutIsolation(
+    const url::Origin& origin) {
+  // Per https://html.spec.whatwg.org/C/#initialise-the-document-object,
+  // non-secure contexts cannot be isolated via opt-in origin isolation,
+  // but we allow non-secure contexts to opt-out for legacy sites.
+  return IsValidIsolatedOriginImpl(origin, false);
+}
+
+// static
 bool IsolatedOriginUtil::IsValidIsolatedOriginImpl(
     const url::Origin& origin,
     bool check_has_registry_domain) {
diff --git a/content/browser/isolated_origin_util.h b/content/browser/isolated_origin_util.h
index 4c6f4be..6d3bc69 100644
--- a/content/browser/isolated_origin_util.h
+++ b/content/browser/isolated_origin_util.h
@@ -101,6 +101,11 @@
   // HTTP or HTTPS scheme, and origins that are not secure contexts.
   static bool IsValidOriginForOptInIsolation(const url::Origin& origin);
 
+  // Check if |origin| is a valid origin for opting out of origin isolation.
+  // Invalid origins for this purpose include opaque origins, and origins that
+  // don't have a HTTP or HTTPS scheme.
+  static bool IsValidOriginForOptOutIsolation(const url::Origin& origin);
+
  private:
   // Used to implement both IsValidIsolatedOrigin and
   // IsValidOriginForOptInIsolation.
diff --git a/content/browser/origin_agent_cluster_isolation_state.cc b/content/browser/origin_agent_cluster_isolation_state.cc
new file mode 100644
index 0000000..7592989c
--- /dev/null
+++ b/content/browser/origin_agent_cluster_isolation_state.cc
@@ -0,0 +1,23 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/browser/origin_agent_cluster_isolation_state.h"
+
+#include "base/feature_list.h"
+#include "third_party/blink/public/common/features.h"
+
+namespace content {
+
+// static
+OriginAgentClusterIsolationState
+OriginAgentClusterIsolationState::CreateForDefaultIsolation() {
+  if (base::FeatureList::IsEnabled(
+          blink::features::kOriginAgentClusterDefaultEnabled)) {
+    return CreateForOriginAgentCluster(
+        false /* requires_origin_keyed_process */);
+  }
+  return CreateNonIsolated();
+}
+
+}  // namespace content
diff --git a/content/browser/origin_agent_cluster_isolation_state.h b/content/browser/origin_agent_cluster_isolation_state.h
index 6aab669..cd1d4201 100644
--- a/content/browser/origin_agent_cluster_isolation_state.h
+++ b/content/browser/origin_agent_cluster_isolation_state.h
@@ -5,6 +5,10 @@
 #ifndef CONTENT_BROWSER_ORIGIN_AGENT_CLUSTER_ISOLATION_STATE_H_
 #define CONTENT_BROWSER_ORIGIN_AGENT_CLUSTER_ISOLATION_STATE_H_
 
+#include "content/common/content_export.h"
+
+namespace content {
+
 // This class contains the OAC isolation state applied to an origin. If
 // `is_origin_agent_cluster` is false, then there's no OAC isolation. If it's
 // true, but `requires_origin_keyed_process` is false, then the origin has
@@ -13,6 +17,12 @@
 // isolation as well.
 class CONTENT_EXPORT OriginAgentClusterIsolationState {
  public:
+  // With the OriginAgentCluster-by-default flag controlling whether default
+  // isolation is non-isolated (flag off) or OriginAgentCluster but without
+  // origin-keyed process (flag on), this function is used to get the correct
+  // default state without having to know the flag setting.
+  static OriginAgentClusterIsolationState CreateForDefaultIsolation();
+
   static OriginAgentClusterIsolationState CreateNonIsolated() {
     return OriginAgentClusterIsolationState(false, false);
   }
@@ -42,4 +52,6 @@
   // When this is true, `is_origin_agent_cluster_` must be true as well.
   bool requires_origin_keyed_process_;
 };
+
+}  // namespace content
 #endif  // CONTENT_BROWSER_ORIGIN_AGENT_CLUSTER_ISOLATION_STATE_H_
diff --git a/content/browser/preloading/prefetch/prefetch_features.h b/content/browser/preloading/prefetch/prefetch_features.h
index 847947a..a41640f 100644
--- a/content/browser/preloading/prefetch/prefetch_features.h
+++ b/content/browser/preloading/prefetch/prefetch_features.h
@@ -12,7 +12,7 @@
 
 // If enabled, then prefetch requests from speculation rules should use the code
 // in content/browser/preloading/prefetch/ instead of
-// chrome/browser/prefetch/prefetch_proxy/.
+// chrome/browser/preloadingprefetch/prefetch_proxy/.
 extern CONTENT_EXPORT const base::Feature kPrefetchUseContentRefactor;
 
 }  // namespace content::features
diff --git a/content/browser/private_aggregation/private_aggregation_host.h b/content/browser/private_aggregation/private_aggregation_host.h
index 673e04e2..4157534e 100644
--- a/content/browser/private_aggregation/private_aggregation_host.h
+++ b/content/browser/private_aggregation/private_aggregation_host.h
@@ -50,8 +50,8 @@
   // Binds a new pending receiver for a worklet, allowing messages to be sent
   // and processed. However, the receiver is not bound if the `worklet_origin`
   // is not potentially trustworthy. The return value indicates whether the
-  // receiver was accepted.
-  [[nodiscard]] bool BindNewReceiver(
+  // receiver was accepted. Virtual for testing.
+  [[nodiscard]] virtual bool BindNewReceiver(
       url::Origin worklet_origin,
       PrivateAggregationBudgetKey::Api api_for_budgeting,
       mojo::PendingReceiver<mojom::PrivateAggregationHost> pending_receiver);
diff --git a/content/browser/private_aggregation/private_aggregation_manager_impl.cc b/content/browser/private_aggregation/private_aggregation_manager_impl.cc
index c36b4ec..c6e3eab 100644
--- a/content/browser/private_aggregation/private_aggregation_manager_impl.cc
+++ b/content/browser/private_aggregation/private_aggregation_manager_impl.cc
@@ -16,9 +16,11 @@
 #include "base/task/lazy_thread_pool_task_runner.h"
 #include "base/task/task_traits.h"
 #include "content/browser/aggregation_service/aggregatable_report.h"
+#include "content/browser/aggregation_service/aggregation_service.h"
 #include "content/browser/private_aggregation/private_aggregation_budget_key.h"
 #include "content/browser/private_aggregation/private_aggregation_budgeter.h"
 #include "content/browser/private_aggregation/private_aggregation_host.h"
+#include "content/browser/storage_partition_impl.h"
 #include "content/common/aggregatable_report.mojom.h"
 #include "content/common/private_aggregation_host.mojom.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
@@ -44,7 +46,8 @@
 
 PrivateAggregationManagerImpl::PrivateAggregationManagerImpl(
     bool exclusively_run_in_memory,
-    const base::FilePath& user_data_directory)
+    const base::FilePath& user_data_directory,
+    StoragePartitionImpl* storage_partition)
     : PrivateAggregationManagerImpl(
           std::make_unique<PrivateAggregationBudgeter>(
               g_storage_task_runner.Get(),
@@ -54,13 +57,18 @@
               /*on_report_request_received=*/base::BindRepeating(
                   &PrivateAggregationManagerImpl::
                       OnReportRequestReceivedFromHost,
-                  base::Unretained(this)))) {}
+                  base::Unretained(this))),
+          storage_partition) {}
 
 PrivateAggregationManagerImpl::PrivateAggregationManagerImpl(
     std::unique_ptr<PrivateAggregationBudgeter> budgeter,
-    std::unique_ptr<PrivateAggregationHost> host)
-    : budgeter_(std::move(budgeter)), host_(std::move(host)) {
+    std::unique_ptr<PrivateAggregationHost> host,
+    StoragePartitionImpl* storage_partition)
+    : budgeter_(std::move(budgeter)),
+      host_(std::move(host)),
+      storage_partition_(storage_partition) {
   DCHECK(budgeter_);
+  DCHECK(host_);
 }
 
 PrivateAggregationManagerImpl::~PrivateAggregationManagerImpl() = default;
@@ -69,9 +77,6 @@
     url::Origin worklet_origin,
     PrivateAggregationBudgetKey::Api api_for_budgeting,
     mojo::PendingReceiver<mojom::PrivateAggregationHost> pending_receiver) {
-  // TODO(crbug.com/1323325): Move DCHECK to constructor when integration with
-  // the aggregation_service component is complete and testing is updated.
-  DCHECK(host_);
   return host_->BindNewReceiver(std::move(worklet_origin), api_for_budgeting,
                                 std::move(pending_receiver));
 }
@@ -101,14 +106,26 @@
                      base::Unretained(this), std::move(report_request)));
 }
 
+AggregationService* PrivateAggregationManagerImpl::GetAggregationService() {
+  DCHECK(storage_partition_);
+  return AggregationService::GetService(storage_partition_->browser_context());
+}
+
 void PrivateAggregationManagerImpl::OnConsumeBudgetReturned(
     AggregatableReportRequest report_request,
     bool was_budget_use_approved) {
+  // TODO(alexmt): Consider adding metrics for success and the different errors
+  // here.
   if (!was_budget_use_approved) {
     return;
   }
 
-  // TODO(crbug.com/1323325): Integrate with aggregation_service component.
+  AggregationService* aggregation_service = GetAggregationService();
+  if (!aggregation_service) {
+    return;
+  }
+
+  aggregation_service->ScheduleReport(std::move(report_request));
 }
 
 }  // namespace content
diff --git a/content/browser/private_aggregation/private_aggregation_manager_impl.h b/content/browser/private_aggregation/private_aggregation_manager_impl.h
index 48a9977..7c45570 100644
--- a/content/browser/private_aggregation/private_aggregation_manager_impl.h
+++ b/content/browser/private_aggregation/private_aggregation_manager_impl.h
@@ -7,6 +7,7 @@
 
 #include <memory>
 
+#include "base/memory/raw_ptr.h"
 #include "content/browser/private_aggregation/private_aggregation_budget_key.h"
 #include "content/browser/private_aggregation/private_aggregation_manager.h"
 #include "content/common/content_export.h"
@@ -24,18 +25,21 @@
 namespace content {
 
 class AggregatableReportRequest;
+class AggregationService;
 class PrivateAggregationBudgeter;
 class PrivateAggregationHost;
+class StoragePartitionImpl;
 
 // UI thread class that manages the lifetime of the other classes,
 // coordinates report requests, and interfaces with other directories. Lifetime
 // is bound to lifetime of the `StoragePartitionImpl`.
-// TODO(crbug.com/1323325): Integrate with aggregation service.
 class CONTENT_EXPORT PrivateAggregationManagerImpl
     : public PrivateAggregationManager {
  public:
+  // `storage_partition` must outlive this.
   PrivateAggregationManagerImpl(bool exclusively_run_in_memory,
-                                const base::FilePath& user_data_directory);
+                                const base::FilePath& user_data_directory,
+                                StoragePartitionImpl* storage_partition);
   PrivateAggregationManagerImpl(const PrivateAggregationManagerImpl&) = delete;
   PrivateAggregationManagerImpl& operator=(
       const PrivateAggregationManagerImpl&) = delete;
@@ -49,23 +53,30 @@
       override;
 
  protected:
-  // Protected for testing
+  // Protected for testing.
   PrivateAggregationManagerImpl(
       std::unique_ptr<PrivateAggregationBudgeter> budgeter,
-      std::unique_ptr<PrivateAggregationHost> host);
+      std::unique_ptr<PrivateAggregationHost> host,
+      StoragePartitionImpl* storage_partition);
+
+  // Virtual for testing.
+  virtual AggregationService* GetAggregationService();
 
   // Called when the `host_` has received and validated a report request.
   void OnReportRequestReceivedFromHost(AggregatableReportRequest report_request,
                                        PrivateAggregationBudgetKey budget_key);
 
+ private:
   // Called when the `budgeter_` has responded to a `ConsumeBudget()` call.
   // Virtual for testing.
   virtual void OnConsumeBudgetReturned(AggregatableReportRequest report_request,
                                        bool was_budget_use_approved);
 
- private:
   std::unique_ptr<PrivateAggregationBudgeter> budgeter_;
   std::unique_ptr<PrivateAggregationHost> host_;
+
+  // Can be nullptr in unit tests.
+  raw_ptr<StoragePartitionImpl> storage_partition_;
 };
 
 }  // namespace content
diff --git a/content/browser/private_aggregation/private_aggregation_manager_impl_unittest.cc b/content/browser/private_aggregation/private_aggregation_manager_impl_unittest.cc
index 8f96e7c..45cf5d2 100644
--- a/content/browser/private_aggregation/private_aggregation_manager_impl_unittest.cc
+++ b/content/browser/private_aggregation/private_aggregation_manager_impl_unittest.cc
@@ -9,6 +9,7 @@
 #include <vector>
 
 #include "base/callback.h"
+#include "base/callback_helpers.h"
 #include "base/files/file_path.h"
 #include "base/memory/ptr_util.h"
 #include "base/task/sequenced_task_runner.h"
@@ -16,12 +17,14 @@
 #include "base/test/task_environment.h"
 #include "base/time/time.h"
 #include "content/browser/aggregation_service/aggregatable_report.h"
+#include "content/browser/aggregation_service/aggregation_service.h"
 #include "content/browser/aggregation_service/aggregation_service_test_utils.h"
 #include "content/browser/private_aggregation/private_aggregation_budget_key.h"
 #include "content/browser/private_aggregation/private_aggregation_budgeter.h"
 #include "content/browser/private_aggregation/private_aggregation_host.h"
 #include "content/browser/private_aggregation/private_aggregation_test_utils.h"
 #include "content/common/aggregatable_report.mojom.h"
+#include "content/public/browser/storage_partition.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
@@ -34,6 +37,7 @@
 
 using testing::_;
 using testing::Invoke;
+using testing::Return;
 
 using Checkpoint = testing::MockFunction<void(int step)>;
 
@@ -48,23 +52,73 @@
               ConsumeBudget,
               (int,
                const PrivateAggregationBudgetKey&,
-               base::OnceCallback<void(bool)>));
+               base::OnceCallback<void(bool)>),
+              (override));
+};
+
+class MockPrivateAggregationHost : public PrivateAggregationHost {
+ public:
+  MockPrivateAggregationHost()
+      : PrivateAggregationHost(
+            /*on_report_request_received=*/base::DoNothing()) {}
+
+  MOCK_METHOD(bool,
+              BindNewReceiver,
+              (url::Origin,
+               PrivateAggregationBudgetKey::Api,
+               mojo::PendingReceiver<mojom::PrivateAggregationHost>),
+              (override));
+};
+
+class MockAggregationService : public AggregationService {
+ public:
+  MOCK_METHOD(void,
+              AssembleReport,
+              (AggregatableReportRequest report_request,
+               AssemblyCallback callback),
+              (override));
+  MOCK_METHOD(void,
+              SendReport,
+              (const GURL& url,
+               const AggregatableReport& report,
+               SendCallback callback),
+              (override));
+  MOCK_METHOD(void,
+              SendReport,
+              (const GURL& url,
+               const base::Value& contents,
+               SendCallback callback),
+              (override));
+  MOCK_METHOD(void,
+              ClearData,
+              (base::Time delete_begin,
+               base::Time delete_end,
+               StoragePartition::StorageKeyMatcherFunction filter,
+               base::OnceClosure done),
+              (override));
+  MOCK_METHOD(void, ScheduleReport, (AggregatableReportRequest), (override));
 };
 
 class PrivateAggregationManagerImplUnderTest
     : public PrivateAggregationManagerImpl {
  public:
   explicit PrivateAggregationManagerImplUnderTest(
-      std::unique_ptr<PrivateAggregationBudgeter> budgeter)
+      std::unique_ptr<PrivateAggregationBudgeter> budgeter,
+      std::unique_ptr<PrivateAggregationHost> host,
+      std::unique_ptr<AggregationService> aggregation_service)
       : PrivateAggregationManagerImpl(std::move(budgeter),
-                                      /*host=*/nullptr) {}
+                                      std::move(host),
+                                      /*storage_partition=*/nullptr),
+        aggregation_service_(std::move(aggregation_service)) {}
 
   using PrivateAggregationManagerImpl::OnReportRequestReceivedFromHost;
 
-  // We're testing internal functions for now as the integration with the
-  // aggregation service is not complete.
-  // TODO(crbug.com/1323325): Switch over testing when that's complete.
-  MOCK_METHOD(void, OnConsumeBudgetReturned, (AggregatableReportRequest, bool));
+  AggregationService* GetAggregationService() override {
+    return aggregation_service_.get();
+  }
+
+ private:
+  std::unique_ptr<AggregationService> aggregation_service_;
 };
 
 }  // namespace
@@ -73,11 +127,17 @@
  public:
   PrivateAggregationManagerImplTest()
       : budgeter_(new testing::StrictMock<MockPrivateAggregationBudgeter>()),
-        manager_(base::WrapUnique(budgeter_)) {}
+        host_(new testing::StrictMock<MockPrivateAggregationHost>()),
+        aggregation_service_(new testing::StrictMock<MockAggregationService>()),
+        manager_(base::WrapUnique(budgeter_),
+                 base::WrapUnique(host_),
+                 base::WrapUnique(aggregation_service_)) {}
 
  protected:
-  // Keep a pointer around for EXPECT_CALL.
+  // Keep pointers around for EXPECT_CALL.
   MockPrivateAggregationBudgeter* budgeter_;
+  MockPrivateAggregationHost* host_;
+  MockAggregationService* aggregation_service_;
 
   testing::StrictMock<PrivateAggregationManagerImplUnderTest> manager_;
 
@@ -114,13 +174,11 @@
           std::move(on_done).Run(true);
         }));
     EXPECT_CALL(checkpoint, Call(1));
-    EXPECT_CALL(manager_, OnConsumeBudgetReturned)
-        .WillOnce(
-            Invoke([&expected_request](AggregatableReportRequest report_request,
-                                       bool was_budget_use_approved) {
+    EXPECT_CALL(*aggregation_service_, ScheduleReport)
+        .WillOnce(Invoke(
+            [&expected_request](AggregatableReportRequest report_request) {
               EXPECT_TRUE(aggregation_service::ReportRequestsEqual(
                   report_request, expected_request));
-              EXPECT_TRUE(was_budget_use_approved);
             }));
   }
 
@@ -170,13 +228,11 @@
           std::move(on_done).Run(true);
         }));
     EXPECT_CALL(checkpoint, Call(1));
-    EXPECT_CALL(manager_, OnConsumeBudgetReturned)
-        .WillOnce(
-            Invoke([&expected_request](AggregatableReportRequest report_request,
-                                       bool was_budget_use_approved) {
+    EXPECT_CALL(*aggregation_service_, ScheduleReport)
+        .WillOnce(Invoke(
+            [&expected_request](AggregatableReportRequest report_request) {
               EXPECT_TRUE(aggregation_service::ReportRequestsEqual(
                   report_request, expected_request));
-              EXPECT_TRUE(was_budget_use_approved);
             }));
   }
 
@@ -187,7 +243,7 @@
 }
 
 TEST_F(PrivateAggregationManagerImplTest,
-       BudgetRequestRejected_ResultPropagated) {
+       BudgetRequestRejected_RequestNotScheduled) {
   const url::Origin example_origin =
       url::Origin::Create(GURL(kExampleOriginUrl));
 
@@ -216,14 +272,7 @@
           std::move(on_done).Run(false);
         }));
     EXPECT_CALL(checkpoint, Call(1));
-    EXPECT_CALL(manager_, OnConsumeBudgetReturned)
-        .WillOnce(
-            Invoke([&expected_request](AggregatableReportRequest report_request,
-                                       bool was_budget_use_approved) {
-              EXPECT_TRUE(aggregation_service::ReportRequestsEqual(
-                  report_request, expected_request));
-              EXPECT_FALSE(was_budget_use_approved);
-            }));
+    EXPECT_CALL(*aggregation_service_, ScheduleReport).Times(0);
   }
 
   checkpoint.Call(0);
@@ -260,8 +309,31 @@
           .value();
 
   EXPECT_CALL(*budgeter_, ConsumeBudget).Times(0);
+  EXPECT_CALL(*aggregation_service_, ScheduleReport).Times(0);
   manager_.OnReportRequestReceivedFromHost(
       aggregation_service::CloneReportRequest(expected_request), example_key);
 }
 
+TEST_F(PrivateAggregationManagerImplTest,
+       BindNewReceiver_InvokesHostMethodIdentically) {
+  const url::Origin example_origin =
+      url::Origin::Create(GURL(kExampleOriginUrl));
+
+  EXPECT_CALL(*host_,
+              BindNewReceiver(example_origin,
+                              PrivateAggregationBudgetKey::Api::kFledge, _))
+      .WillOnce(Return(true));
+  EXPECT_TRUE(manager_.BindNewReceiver(
+      example_origin, PrivateAggregationBudgetKey::Api::kFledge,
+      mojo::PendingReceiver<mojom::PrivateAggregationHost>()));
+
+  EXPECT_CALL(*host_, BindNewReceiver(
+                          example_origin,
+                          PrivateAggregationBudgetKey::Api::kSharedStorage, _))
+      .WillOnce(Return(false));
+  EXPECT_FALSE(manager_.BindNewReceiver(
+      example_origin, PrivateAggregationBudgetKey::Api::kSharedStorage,
+      mojo::PendingReceiver<mojom::PrivateAggregationHost>()));
+}
+
 }  // namespace content
diff --git a/content/browser/renderer_host/frame_tree.cc b/content/browser/renderer_host/frame_tree.cc
index d3a91fd5..d83b0c2 100644
--- a/content/browser/renderer_host/frame_tree.cc
+++ b/content/browser/renderer_host/frame_tree.cc
@@ -712,10 +712,10 @@
   }
 }
 
-void FrameTree::RegisterExistingOriginToPreventOptInIsolation(
+void FrameTree::RegisterExistingOriginAsHavingDefaultIsolation(
     const url::Origin& previously_visited_origin,
     NavigationRequest* navigation_request_to_exclude) {
-  controller().RegisterExistingOriginToPreventOptInIsolation(
+  controller().RegisterExistingOriginAsHavingDefaultIsolation(
       previously_visited_origin);
 
   std::unordered_set<SiteInstance*> matching_site_instances;
@@ -753,7 +753,7 @@
   // Update any SiteInstances found to contain |origin|.
   for (auto* site_instance : matching_site_instances) {
     static_cast<SiteInstanceImpl*>(site_instance)
-        ->PreventOptInOriginIsolation(previously_visited_origin);
+        ->RegisterAsDefaultOriginIsolation(previously_visited_origin);
   }
 }
 
diff --git a/content/browser/renderer_host/frame_tree.h b/content/browser/renderer_host/frame_tree.h
index a1d0eb1..e9b6339 100644
--- a/content/browser/renderer_host/frame_tree.h
+++ b/content/browser/renderer_host/frame_tree.h
@@ -449,11 +449,14 @@
   // identified by |group|.
   void SetPageFocus(SiteInstanceGroup* group, bool is_focused);
 
-  // Walks the current frame tree and registers any origins matching |origin|,
-  // either the last committed origin of a RenderFrameHost or the origin
-  // associated with a NavigationRequest that has been assigned to a
-  // SiteInstance, as not-opted-in for origin isolation.
-  void RegisterExistingOriginToPreventOptInIsolation(
+  // Walks the current frame tree and registers any origins matching
+  // `previously_visited_origin`, either the last committed origin of a
+  // RenderFrameHost or the origin associated with a NavigationRequest that has
+  // been assigned to a SiteInstance, as having the default origin isolation
+  // state. This is only necessary when `previously_visited_origin` is seen with
+  // an OriginAgentCluster header explicitly requesting something other than the
+  // default.
+  void RegisterExistingOriginAsHavingDefaultIsolation(
       const url::Origin& previously_visited_origin,
       NavigationRequest* navigation_request_to_exclude);
 
diff --git a/content/browser/renderer_host/navigation_controller_impl.cc b/content/browser/renderer_host/navigation_controller_impl.cc
index 40b1947..f3c846c 100644
--- a/content/browser/renderer_host/navigation_controller_impl.cc
+++ b/content/browser/renderer_host/navigation_controller_impl.cc
@@ -846,17 +846,17 @@
              : nullptr;
 }
 
-void NavigationControllerImpl::RegisterExistingOriginToPreventOptInIsolation(
+void NavigationControllerImpl::RegisterExistingOriginAsHavingDefaultIsolation(
     const url::Origin& origin) {
   for (int i = 0; i < GetEntryCount(); i++) {
     auto* entry = GetEntryAtIndex(i);
-    entry->RegisterExistingOriginToPreventOptInIsolation(origin);
+    entry->RegisterExistingOriginAsHavingDefaultIsolation(origin);
   }
   if (entry_replaced_by_post_commit_error_) {
     // It's possible we could come back to this entry if the error
     // page/interstitial goes away.
     entry_replaced_by_post_commit_error_
-        ->RegisterExistingOriginToPreventOptInIsolation(origin);
+        ->RegisterExistingOriginAsHavingDefaultIsolation(origin);
   }
   // TODO(wjmaclean): Register pending commit NavigationRequests rather than
   // visiting pending_entry_, which lacks a committed origin. This will be done
diff --git a/content/browser/renderer_host/navigation_controller_impl.h b/content/browser/renderer_host/navigation_controller_impl.h
index b6392e7c..069a5d1d 100644
--- a/content/browser/renderer_host/navigation_controller_impl.h
+++ b/content/browser/renderer_host/navigation_controller_impl.h
@@ -291,10 +291,12 @@
   // For use by WebContentsImpl ------------------------------------------------
 
   // Visit all FrameNavigationEntries as well as all frame trees and register
-  // any instances of |origin| as non-isolated with their respective
-  // BrowsingInstances. This is important when |origin| requests isolation, so
-  // that we only do so in BrowsingInstances that haven't seen it before.
-  void RegisterExistingOriginToPreventOptInIsolation(const url::Origin& origin);
+  // any instances of |origin| as having the default isolation state with their
+  // respective BrowsingInstances. This is important when |origin| is seen with
+  // an OriginAgentCluster header, so that we only accept such requests in
+  // BrowsingInstances that haven't seen it before.
+  void RegisterExistingOriginAsHavingDefaultIsolation(
+      const url::Origin& origin);
 
   // Allow renderer-initiated navigations to create a pending entry when the
   // provisional load starts.
diff --git a/content/browser/renderer_host/navigation_entry_impl.cc b/content/browser/renderer_host/navigation_entry_impl.cc
index 4871f402b..291457e0 100644
--- a/content/browser/renderer_host/navigation_entry_impl.cc
+++ b/content/browser/renderer_host/navigation_entry_impl.cc
@@ -217,7 +217,7 @@
         node->frame_entry->committed_origin().value();
     SiteInstanceImpl* site_instance = node->frame_entry->site_instance();
     if (site_instance && origin == node_origin)
-      site_instance->PreventOptInOriginIsolation(node_origin);
+      site_instance->RegisterAsDefaultOriginIsolation(node_origin);
   }
 
   for (auto& child : node->children)
@@ -226,7 +226,7 @@
 
 }  // namespace
 
-void NavigationEntryImpl::RegisterExistingOriginToPreventOptInIsolation(
+void NavigationEntryImpl::RegisterExistingOriginAsHavingDefaultIsolation(
     const url::Origin& origin) {
   return RegisterOriginsRecursive(root_node(), origin);
 }
@@ -1136,14 +1136,14 @@
       !InSameTreePosition(frame_tree_node, node)) {
     auto* frame_entry = node->frame_entry.get();
     if (frame_entry && frame_entry->committed_origin()) {
-      // Normally non-isolated origins are tracked through their presence in
+      // Normally default-isolated origins are tracked through their presence in
       // session history, which is consulted whenever an origin newly requests
       // isolation. If we remove a frame_entry, its origin won't be available
       // to any future global walk if the same origin later wants to opt-in. So
       // we add it to the non-opt-in list here to be spec compliant (unless it's
       // currently opted-in, in which case this call will do nothing).
       ChildProcessSecurityPolicyImpl::GetInstance()
-          ->AddNonIsolatedOriginIfNeeded(
+          ->AddDefaultIsolatedOriginIfNeeded(
               frame_entry->site_instance()->GetIsolationContext(),
               frame_entry->committed_origin().value(),
               true /* global_ walk_or_frame_removal */);
diff --git a/content/browser/renderer_host/navigation_entry_impl.h b/content/browser/renderer_host/navigation_entry_impl.h
index a207d1d..109eec9 100644
--- a/content/browser/renderer_host/navigation_entry_impl.h
+++ b/content/browser/renderer_host/navigation_entry_impl.h
@@ -285,7 +285,8 @@
 
   // Walks the tree of FrameNavigationEntries to find entries with |origin| so
   // their isolation status can be registered.
-  void RegisterExistingOriginToPreventOptInIsolation(const url::Origin& origin);
+  void RegisterExistingOriginAsHavingDefaultIsolation(
+      const url::Origin& origin);
 
   // Removes any subframe FrameNavigationEntries that match the unique name of
   // |frame_tree_node|, and all of their children. There should be at most one,
diff --git a/content/browser/renderer_host/navigation_request.cc b/content/browser/renderer_host/navigation_request.cc
index 8dd5c082..d66cd3f 100644
--- a/content/browser/renderer_host/navigation_request.cc
+++ b/content/browser/renderer_host/navigation_request.cc
@@ -2851,12 +2851,15 @@
 }
 
 void NavigationRequest::CheckForIsolationOptIn(const GURL& url) {
-  // Check whether an origin-keyed agent cluster is either explicitly requested
-  // or implied (i.e., on by default), before attempting to isolate it. If
-  // requested or implied, then we must check if the origin has been previously
+  // Check whether an origin-keyed agent cluster is explicitly requested, either
+  // opting in or out, before attempting to isolate it. If an explicit request
+  // was made, then we must check if the origin has been previously
   // encountered in order to remain consistent within the isolation context
-  // (BrowserContext).
-  if (!IsOptInIsolationRequested() && !IsIsolationImplied())
+  // (BrowserContext). Note: we only do the global walk for explicit opt-outs
+  // when OriginAgentCluster-by-default is enabled, but that check is made in
+  // IsOriginAgentClusterOptOutRequested().
+  if (!IsOriginAgentClusterOptInRequested() &&
+      !IsOriginAgentClusterOptOutRequested())
     return;
 
   auto* policy = ChildProcessSecurityPolicyImpl::GetInstance();
@@ -2865,67 +2868,66 @@
       frame_tree_node_->navigator().controller().GetBrowserContext();
   if (policy->UpdateOriginIsolationOptInListIfNecessary(browser_context,
                                                         origin)) {
-    // This is a new request for isolating |origin|. Do a global walk of session
-    // history to find any existing instances of |origin|, so that those
-    // existing BrowsingInstances can avoid isolating it (which could break
-    // cross-frame scripting). Only new BrowsingInstances and ones that have not
-    // seen |origin| before will isolate it.
-    // We don't always have a value for render_frame_host_ at this point, so we
-    // map the global-walk call onto NavigatorDelegate to get it into
-    // WebContents. We definitely need to do the global walk prior to deciding
-    // on the render_frame_host_ to commit to.
+    // This is a new request for isolating |origin|, either by explicitly opting
+    // it in or out. Do a global walk of session history to find any existing
+    // instances of |origin|, so that those existing BrowsingInstances can give
+    // it default isolation. Only new BrowsingInstances and ones that have not
+    // seen |origin| before will honor the request. We don't always have a value
+    // for render_frame_host_ at this point, so we map the global-walk call onto
+    // NavigatorDelegate to get it into WebContents. We definitely need to do
+    // the global walk prior to deciding on the render_frame_host_ to commit to.
     // We must exclude ourselves from the global walk otherwise we may mark our
-    // origin as non-opt-in before it gets the change to register itself as
-    // opted-in.
+    // origin as having default isolation before it gets the change to register
+    // itself as opted-in/out.
     frame_tree_node_->navigator()
         .GetDelegate()
-        ->RegisterExistingOriginToPreventOptInIsolation(
+        ->RegisterExistingOriginAsHavingDefaultIsolation(
             origin, this /* navigation_request_to_exclude */);
   }
 }
 
-void NavigationRequest::AddSameProcessOriginAgentClusterOptInIfNecessary(
+void NavigationRequest::AddSameProcessOriginAgentClusterStateIfNecessary(
     const IsolationContext& isolation_context,
     const GURL& url) {
-  bool should_isolate_origin = false;
-  if (IsIsolationImplied()) {
-    // If OAC-by-default is enabled, then we can have origin-keyed agent
-    // clusters with site-keyed processes (when no header is present)
-    // alongside origin-keyed agent clusters with origin-keyed processes (when
-    // a header is present). For this case when the header is absent, try to
-    // register the origin in a site-keyed process below.
-    should_isolate_origin = true;
-  } else if (IsOptInIsolationRequested()) {
-    // If OAC-by-default is disabled and the origin requests isolation, we
-    // should only register it in a site-keyed process below if Site Isolation
-    // is disabled for OAC. Otherwise it will be handled when the origin's
-    // SiteInstance is created.
-    should_isolate_origin =
-        !SiteIsolationPolicy::IsProcessIsolationForOriginAgentClusterEnabled();
-  }
-  if (!should_isolate_origin)
+  // In this function we only handle opt-in requests for the cases where OAC
+  // process isolation is not enabled. Otherwise it will be handled when the
+  // origin's SiteInstance is created.
+  bool is_opt_in_requested =
+      IsOriginAgentClusterOptInRequested() &&
+      !SiteIsolationPolicy::IsProcessIsolationForOriginAgentClusterEnabled();
+
+  // Since opt-outs are asking not to have OAC or requires_origin_keyed_process,
+  // they don't get their own SiteInstance, and so we must register their
+  // opt-out here.
+  bool is_opt_out_requested = IsOriginAgentClusterOptOutRequested();
+
+  // We never register isolation state here unless it's explicitly requested.
+  if (!is_opt_in_requested && !is_opt_out_requested)
     return;
 
-  // Since site isolation is disabled, we can't rely on the newly created
-  // SiteInstance to add the origin as OAC, so we do it manually here.
+  bool should_isolate_origin = is_opt_in_requested;
+
+  // Note: we don't handle IsIsolationImplied() cases here, since those only
+  // occur when OAC-by-default is enabled, and in that case we only pro-actively
+  // record explicit opt-ins and opt-outs. Implicitly isolated origins only end
+  // up recorded if a future request from the same origin attempts to opt-in or
+  // opt-out, which would trigger a normal global walk and record that the
+  // origin has already been implicitly isolated in some BrowsingInstances.
+
+  // Since either site isolation is disabled, or we are requesting an opt-out,
+  // we can't rely on a newly created SiteInstance to add the origin as
+  // OAC/not-OAC, so we do it manually here.
   url::Origin origin = url::Origin::Create(url);
   auto* policy = ChildProcessSecurityPolicyImpl::GetInstance();
-  OriginAgentClusterIsolationState isolation_state =
-      policy->DetermineOriginAgentClusterIsolation(
-          isolation_context, origin,
-          OriginAgentClusterIsolationState::CreateForOriginAgentCluster(
-              false /* requires_origin_keyed_process */));
-
-  if (isolation_state.is_origin_agent_cluster() &&
-      !isolation_state.requires_origin_keyed_process()) {
-    policy->AddIsolatedOriginForBrowsingInstance(
-        isolation_context, origin, true /* is_origin_agent_cluster */,
-        false /* requires_origin_keyed_process */,
-        ChildProcessSecurityPolicy::IsolatedOriginSource::WEB_TRIGGERED);
-  }
+  // If there is already a state registered for `origin` in `isolation_context`,
+  // then the following call does nothing.
+  policy->AddOriginIsolationStateForBrowsingInstance(
+      isolation_context, origin,
+      should_isolate_origin /* is_origin_agent_cluster */,
+      false /* requires_origin_keyed_process */);
 }
 
-bool NavigationRequest::IsOptInIsolationRequested() {
+bool NavigationRequest::IsOriginAgentClusterOptInRequested() {
   // We explicitly do not honor Origin-Agent-Cluster headers in redirects and
   // may only consider them in final responses, according to spec.
   // https://crbug.com/1329061
@@ -2943,6 +2945,25 @@
          network::mojom::OriginAgentClusterValue::kTrue;
 }
 
+bool NavigationRequest::IsOriginAgentClusterOptOutRequested() {
+  // We explicitly do not honor Origin-Agent-Cluster headers in redirects and
+  // may only consider them in final responses, according to spec.
+  // https://crbug.com/1329061
+  if (state_ < WILL_PROCESS_RESPONSE)
+    return false;
+
+  if (!response())
+    return false;
+
+  // We only allow explicit opt-outs when OAC-by-default is enabled. The
+  // following check will be false if IsOriginAgentClusterEnabled() is false.
+  if (!AreOriginAgentClustersEnabledByDefault())
+    return false;
+
+  return response_head_->parsed_headers->origin_agent_cluster ==
+         network::mojom::OriginAgentClusterValue::kFalse;
+}
+
 bool NavigationRequest::AreOriginAgentClustersEnabledByDefault() const {
   // OriginAgentClusters are enabled by default if OriginAgentCluster and
   // kOriginAgentClusterDefaultEnabled are enabled, and if there is no
@@ -2979,7 +3000,7 @@
   const IsolationContext& isolation_context =
       render_frame_host_->GetSiteInstance()->GetIsolationContext();
 
-  bool is_requested = IsOptInIsolationRequested();
+  bool is_requested = IsOriginAgentClusterOptInRequested();
   bool expects_origin_agent_cluster = is_requested || IsIsolationImplied();
   bool requires_origin_keyed_process =
       is_requested &&
@@ -3212,9 +3233,9 @@
   // An origin-keyed agent cluster is used if requested by header
   // (or possibly by default, if no opt-out is requested), while an
   // origin-keyed process is currently only used if requested by header.
-  if (IsOptInIsolationRequested() || IsIsolationImplied())
+  if (IsOriginAgentClusterOptInRequested() || IsIsolationImplied())
     isolation_flags |= UrlInfo::OriginIsolationRequest::kOriginAgentCluster;
-  if (IsOptInIsolationRequested() &&
+  if (IsOriginAgentClusterOptInRequested() &&
       SiteIsolationPolicy::IsProcessIsolationForOriginAgentClusterEnabled()) {
     isolation_flags |=
         UrlInfo::OriginIsolationRequest::kRequiresOriginKeyedProcess;
@@ -3695,7 +3716,7 @@
     // will be handled by the existing pathway in
     // SiteInstanceImpl::SetSiteInfoInternal().
     const IsolationContext& isolation_context = instance->GetIsolationContext();
-    AddSameProcessOriginAgentClusterOptInIfNecessary(isolation_context,
+    AddSameProcessOriginAgentClusterStateIfNecessary(isolation_context,
                                                      GetURL());
 
     // TODO(wjmaclean): Once this is all working, consider combining the
@@ -3707,8 +3728,8 @@
     // to use it here to get the correct |IsolationContext|.
     //
     // When loading a data URL with a base URL, use the base URL to calculate
-    // the origin; otherwise, `AddNonIsolatedOriginIfNeeded()` will simply do
-    // nothing as a data: URL has an opaque origin.
+    // the origin; otherwise, `AddDefaultIsolatedOriginIfNeeded()` will simply
+    // do nothing as a data: URL has an opaque origin.
     //
     // TODO(wjmaclean): this won't handle cases like about:blank (where it
     // inherits an origin we care about).  We plan to compute the origin
@@ -3718,8 +3739,10 @@
         IsLoadDataWithBaseURL()
             ? url::Origin::Create(common_params_->base_url_for_data_url)
             : url::Origin::Create(common_params_->url);
-    ChildProcessSecurityPolicyImpl::GetInstance()->AddNonIsolatedOriginIfNeeded(
-        isolation_context, origin, false /* is_global_walk_or_frame_removal */);
+    ChildProcessSecurityPolicyImpl::GetInstance()
+        ->AddDefaultIsolatedOriginIfNeeded(
+            isolation_context, origin,
+            false /* is_global_walk_or_frame_removal */);
 
     // Replace the SiteInstance of the previously committed entry if it's for a
     // url that doesn't require a site assignment, if this new commit will be
diff --git a/content/browser/renderer_host/navigation_request.h b/content/browser/renderer_host/navigation_request.h
index ec9be250..df8cd50 100644
--- a/content/browser/renderer_host/navigation_request.h
+++ b/content/browser/renderer_host/navigation_request.h
@@ -1055,17 +1055,24 @@
   // Origin-Agent-Cluster header, and if so opts in the origin to be isolated.
   void CheckForIsolationOptIn(const GURL& url);
 
-  // Use to manually opt an origin into Origin-keyed Agent Cluster (OAC) in the
-  // event that process-isolation isn't being used for OAC.
+  // Use to manually set Origin-keyed Agent Cluster (OAC) isolation state in
+  // the event that process-isolation isn't being used for OAC, or
+  // OAC-by-default means that we're tracking explicit opt-out requests (which
+  // by definition are same-process).
   // TODO(wjmaclean): When we switch to using separate SiteInstances even for
   // same-process OAC, then this function can be removed.
-  void AddSameProcessOriginAgentClusterOptInIfNecessary(
+  void AddSameProcessOriginAgentClusterStateIfNecessary(
       const IsolationContext& isolation_context,
       const GURL& url);
 
   // Returns whether this navigation request is requesting opt-in
   // origin-isolation.
-  bool IsOptInIsolationRequested();
+  bool IsOriginAgentClusterOptInRequested();
+
+  // Returns whether this navigation request is requesting opt-out from
+  // origin-isolation. Always returns false if
+  // AreOriginAgentClustersEnabledByDefault() is false.
+  bool IsOriginAgentClusterOptOutRequested();
 
   // Returns whether defaulting to origin-keyed agent cluster (without
   // necessarily an origin-keyed process) is enabled.
diff --git a/content/browser/renderer_host/navigator_delegate.h b/content/browser/renderer_host/navigator_delegate.h
index ee12120c..a18818e 100644
--- a/content/browser/renderer_host/navigator_delegate.h
+++ b/content/browser/renderer_host/navigator_delegate.h
@@ -130,7 +130,7 @@
   // BrowsingInstances. |navigation_request_to_exclude| allows the
   // NavigationRequest that initiates this process to avoid marking itself as
   // non-opted-in before it gets the chance to opt-in.
-  virtual void RegisterExistingOriginToPreventOptInIsolation(
+  virtual void RegisterExistingOriginAsHavingDefaultIsolation(
       const url::Origin& origin,
       NavigationRequest* navigation_request_to_exclude) = 0;
 };
diff --git a/content/browser/site_instance_impl.cc b/content/browser/site_instance_impl.cc
index 560b92e..23281f3 100644
--- a/content/browser/site_instance_impl.cc
+++ b/content/browser/site_instance_impl.cc
@@ -495,15 +495,14 @@
     url::Origin origin(url::Origin::Create(site_info_.process_lock_url()));
     // This is one of two places that origins can be marked as opted-in, the
     // other is
-    // NavigationRequest::AddSameProcessOriginAgentClusterOptInIfNecessary().
+    // NavigationRequest::AddSameProcessOriginAgentClusterStateIfNecessary().
     // This site handles the case where OAC isolation gets a separate process.
     // In future, when SiteInstance Groups are complete, this may revert to
     // being the only call site.
-    policy->AddIsolatedOriginForBrowsingInstance(
+    policy->AddOriginIsolationStateForBrowsingInstance(
         browsing_instance_->isolation_context(), origin,
         true /* is_origin_agent_cluster */,
-        true /* requires_origin_keyed_process */,
-        ChildProcessSecurityPolicy::IsolatedOriginSource::WEB_TRIGGERED);
+        true /* requires_origin_keyed_process */);
   }
 
   if (site_info_.does_site_request_dedicated_process_for_coop()) {
@@ -520,10 +519,8 @@
     GURL site(SiteInfo::GetSiteForOrigin(origin));
     ChildProcessSecurityPolicyImpl* policy =
         ChildProcessSecurityPolicyImpl::GetInstance();
-    policy->AddIsolatedOriginForBrowsingInstance(
+    policy->AddCoopIsolatedOriginForBrowsingInstance(
         browsing_instance_->isolation_context(), url::Origin::Create(site),
-        false /* is_origin_agent_cluster */,
-        false /* requires_origin_keyed_process */,
         ChildProcessSecurityPolicy::IsolatedOriginSource::WEB_TRIGGERED);
   }
 
@@ -1151,10 +1148,10 @@
   return site_info_.IsExactMatch(site_info);
 }
 
-void SiteInstanceImpl::PreventOptInOriginIsolation(
+void SiteInstanceImpl::RegisterAsDefaultOriginIsolation(
     const url::Origin& previously_visited_origin) {
   auto* policy = ChildProcessSecurityPolicyImpl::GetInstance();
-  policy->AddNonIsolatedOriginIfNeeded(
+  policy->AddDefaultIsolatedOriginIfNeeded(
       GetIsolationContext(), previously_visited_origin,
       true /* is_global_walk_or_frame_removal */);
 }
diff --git a/content/browser/site_instance_impl.h b/content/browser/site_instance_impl.h
index 04d1907b..23330c8 100644
--- a/content/browser/site_instance_impl.h
+++ b/content/browser/site_instance_impl.h
@@ -387,10 +387,10 @@
   // instance (i.e. GetSiteInfo()). Otherwise returns false.
   bool DoesSiteInfoForURLMatch(const UrlInfo& url_info);
 
-  // Adds |origin| as a non-isolated origin within this BrowsingInstance due to
-  // an existing instance at the time of opt-in, so that future instances of it
-  // here won't be origin isolated.
-  void PreventOptInOriginIsolation(
+  // Adds |origin| as having the default isolation state within this
+  // BrowsingInstance due to an existing instance at the time of opt-in, so that
+  // future instances of it here won't be origin isolated.
+  void RegisterAsDefaultOriginIsolation(
       const url::Origin& previously_visited_origin);
 
   // Returns the web-exposed isolation status of the BrowsingInstance this
diff --git a/content/browser/storage_partition_impl.cc b/content/browser/storage_partition_impl.cc
index f48d0901..0c51867 100644
--- a/content/browser/storage_partition_impl.cc
+++ b/content/browser/storage_partition_impl.cc
@@ -1386,7 +1386,8 @@
 
   if (base::FeatureList::IsEnabled(kPrivateAggregationApi)) {
     private_aggregation_manager_ =
-        std::make_unique<PrivateAggregationManagerImpl>(is_in_memory(), path);
+        std::make_unique<PrivateAggregationManagerImpl>(is_in_memory(), path,
+                                                        this);
   }
 }
 
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index 28693f48..c50fed7d 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -7581,12 +7581,12 @@
   return GetContentClient()->browser()->GetNavigationUIData(navigation_handle);
 }
 
-void WebContentsImpl::RegisterExistingOriginToPreventOptInIsolation(
+void WebContentsImpl::RegisterExistingOriginAsHavingDefaultIsolation(
     const url::Origin& origin,
     NavigationRequest* navigation_request_to_exclude) {
   OPTIONAL_TRACE_EVENT2(
       "content",
-      "WebContentsImpl::RegisterExistingOriginToPreventOptInIsolation",
+      "WebContentsImpl::RegisterExistingOriginAsHavingDefaultIsolation",
       "origin", origin, "navigation_request_to_exclude",
       navigation_request_to_exclude);
   // Note: This function can be made static if we ever need call it without
@@ -7598,7 +7598,7 @@
       continue;
 
     // Walk the frame trees to notify each one's NavigationController about the
-    // opting-in origin, and also pick up any frames without
+    // opting-in or opting-out `origin`, and also pick up any frames without
     // FrameNavigationEntries.
     // * Some frames won't have FrameNavigationEntries (Issues 524208, 608402).
     // * Some pending navigations won't have NavigationEntries.
@@ -7606,7 +7606,7 @@
         [](const url::Origin& origin,
            NavigationRequest* navigation_request_to_exclude,
            FrameTree* frame_tree) {
-          frame_tree->RegisterExistingOriginToPreventOptInIsolation(
+          frame_tree->RegisterExistingOriginAsHavingDefaultIsolation(
               origin, navigation_request_to_exclude);
         },
         origin, navigation_request_to_exclude));
diff --git a/content/browser/web_contents/web_contents_impl.h b/content/browser/web_contents/web_contents_impl.h
index 8800495..8f6f602f 100644
--- a/content/browser/web_contents/web_contents_impl.h
+++ b/content/browser/web_contents/web_contents_impl.h
@@ -890,7 +890,7 @@
                                AllowServiceWorkerResult allowed) override;
   void OnCookiesAccessed(NavigationHandle*,
                          const CookieAccessDetails& details) override;
-  void RegisterExistingOriginToPreventOptInIsolation(
+  void RegisterExistingOriginAsHavingDefaultIsolation(
       const url::Origin& origin,
       NavigationRequest* navigation_request_to_exclude) override;
 
diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc
index bd84802..0bd2cfd 100644
--- a/content/child/runtime_features.cc
+++ b/content/child/runtime_features.cc
@@ -383,6 +383,8 @@
            blink::features::kQuickIntensiveWakeUpThrottlingAfterLoading},
           {"SanitizerAPI", blink::features::kSanitizerAPI},
           {"SanitizerAPIv0", blink::features::kSanitizerAPIv0},
+          {"ScrollUpdateOptimizations",
+           blink::features::kScrollUpdateOptimizations},
           {"SecureContextFixForWorkers",
            blink::features::kSecureContextFixForWorkers},
           {"StorageAccessAPI", net::features::kStorageAccessAPI},
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/ImeAdapterImpl.java b/content/public/android/java/src/org/chromium/content/browser/input/ImeAdapterImpl.java
index 8fe06a6c..53e53c9 100644
--- a/content/public/android/java/src/org/chromium/content/browser/input/ImeAdapterImpl.java
+++ b/content/public/android/java/src/org/chromium/content/browser/input/ImeAdapterImpl.java
@@ -42,6 +42,7 @@
 import org.chromium.base.annotations.NativeMethods;
 import org.chromium.blink.mojom.EventType;
 import org.chromium.blink.mojom.FocusType;
+import org.chromium.blink.mojom.StylusWritingGestureData;
 import org.chromium.blink_public.web.WebInputEventModifier;
 import org.chromium.blink_public.web.WebTextInputMode;
 import org.chromium.content.browser.GestureListenerManagerImpl;
@@ -66,6 +67,7 @@
 import java.lang.ref.WeakReference;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
+import java.nio.ByteBuffer;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -1086,6 +1088,21 @@
                             gestureListenerManager.resetGestureDetection();
                         }
                     }
+
+                    @Override
+                    public void handleStylusWritingGestureAction(
+                            StylusWritingGestureData gestureData) {
+                        if (mNativeImeAdapterAndroid == 0) return;
+                        int contentOffsetY =
+                                (int) mWebContents.getRenderCoordinates().getContentOffsetYPix();
+                        gestureData.startPoint.y -= contentOffsetY;
+                        if (gestureData.endPoint != null) {
+                            gestureData.endPoint.y -= contentOffsetY;
+                        }
+                        ImeAdapterImplJni.get().handleStylusWritingGestureAction(
+                                mNativeImeAdapterAndroid, ImeAdapterImpl.this,
+                                gestureData.serialize());
+                    }
                 });
     }
 
@@ -1313,5 +1330,8 @@
         void requestCursorUpdate(long nativeImeAdapterAndroid, ImeAdapterImpl caller,
                 boolean immediateRequest, boolean monitorRequest);
         void advanceFocusForIME(long nativeImeAdapterAndroid, ImeAdapterImpl caller, int focusType);
+        // Stylus Writing
+        void handleStylusWritingGestureAction(
+                long nativeImeAdapterAndroid, ImeAdapterImpl caller, ByteBuffer gestureData);
     }
 }
diff --git a/content/public/android/java/src/org/chromium/content/browser/selection/LegacyPastePopupMenu.java b/content/public/android/java/src/org/chromium/content/browser/selection/LegacyPastePopupMenu.java
index 4115fd90..a140604 100644
--- a/content/public/android/java/src/org/chromium/content/browser/selection/LegacyPastePopupMenu.java
+++ b/content/public/android/java/src/org/chromium/content/browser/selection/LegacyPastePopupMenu.java
@@ -32,6 +32,8 @@
     private final int mLineOffsetY;
     private final int mWidthOffsetX;
 
+    // status_bar_height is not a public framework resource, so we have to getIdentifier()
+    @SuppressWarnings("DiscouragedApi")
     public LegacyPastePopupMenu(
             Context context, View parent, final PastePopupMenuDelegate delegate) {
         mParent = parent;
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/StylusWritingImeCallback.java b/content/public/android/java/src/org/chromium/content_public/browser/StylusWritingImeCallback.java
index 83d9da6..d6a9fdb 100644
--- a/content/public/android/java/src/org/chromium/content_public/browser/StylusWritingImeCallback.java
+++ b/content/public/android/java/src/org/chromium/content_public/browser/StylusWritingImeCallback.java
@@ -6,6 +6,8 @@
 
 import android.view.View;
 
+import org.chromium.blink.mojom.StylusWritingGestureData;
+
 /**
  * This interface implements the IME functionality like committing text, showing or hiding soft
  * keyboard, handling writing gestures, etc. for the Stylus handwriting feature. These APIs are
@@ -61,4 +63,13 @@
      * handling the touch events.
      */
     void resetGestureDetection();
+
+    /**
+     * Handle the action for gestures recognized by stylus writing service.
+     *
+     * @param gestureData the gesture data object that contains information regarding gesture type,
+     *                    gesture coordinates, text to insert, alternative text to insert when the
+     *                    gesture is invalid in current input, as applicable wrt gesture type.
+     */
+    void handleStylusWritingGestureAction(StylusWritingGestureData gestureData);
 }
diff --git a/content/test/data/first_party_sets/v0.init_too_old.sql b/content/test/data/first_party_sets/v0.init_too_old.sql
index e4ffcdb..f5a05ee 100644
--- a/content/test/data/first_party_sets/v0.init_too_old.sql
+++ b/content/test/data/first_party_sets/v0.init_too_old.sql
@@ -2,12 +2,14 @@
 
 BEGIN TRANSACTION;
 
-CREATE TABLE sites_to_clear (
-    site TEXT NOT NULL PRIMARY KEY,
-    marked_at_run INTEGER NOT NULL
+CREATE TABLE IF NOT EXISTS browser_context_sites_to_clear (
+   browser_context_id TEXT NOT NULL,
+   site TEXT NOT NULL,
+   marked_at_run Integer NOT NULL,
+   PRIMARY KEY (browser_context_id, site)
 ) WITHOUT ROWID;
 
-CREATE INDEX idx_marked_at_run_sites ON sites_to_clear (marked_at_run);
+CREATE INDEX idx_marked_at_run_sites ON browser_context_sites_to_clear (marked_at_run);
 
 CREATE TABLE IF NOT EXISTS browser_contexts_cleared (
    browser_context_id TEXT PRIMARY KEY NOT NULL,
@@ -22,7 +24,8 @@
 INSERT INTO meta VALUES('last_compatible_version','1');
 INSERT INTO meta VALUES('run_count','1');
 
-INSERT INTO sites_to_clear VALUES('https://example.test', 1);
-INSERT INTO browser_contexts_cleared VALUES('p', 1);
+INSERT INTO browser_context_sites_to_clear VALUES('b0', 'https://example.test', 1),
+                                                 ('b1', 'https://example.test', 1);
+INSERT INTO browser_contexts_cleared VALUES('b0', 1);
 
 COMMIT;
\ No newline at end of file
diff --git a/content/test/data/first_party_sets/v1.init_invalid_run_count.sql b/content/test/data/first_party_sets/v1.init_invalid_run_count.sql
index af26f23..3573982 100644
--- a/content/test/data/first_party_sets/v1.init_invalid_run_count.sql
+++ b/content/test/data/first_party_sets/v1.init_invalid_run_count.sql
@@ -2,12 +2,14 @@
 
 BEGIN TRANSACTION;
 
-CREATE TABLE sites_to_clear (
-    site TEXT NOT NULL PRIMARY KEY,
-    marked_at_run INTEGER NOT NULL
+CREATE TABLE IF NOT EXISTS browser_context_sites_to_clear (
+   browser_context_id TEXT NOT NULL,
+   site TEXT NOT NULL,
+   marked_at_run Integer NOT NULL,
+   PRIMARY KEY (browser_context_id, site)
 ) WITHOUT ROWID;
 
-CREATE INDEX idx_marked_at_run_sites ON sites_to_clear (marked_at_run);
+CREATE INDEX idx_marked_at_run_sites ON browser_context_sites_to_clear (marked_at_run);
 
 CREATE TABLE IF NOT EXISTS browser_contexts_cleared (
    browser_context_id TEXT PRIMARY KEY NOT NULL,
@@ -22,7 +24,8 @@
 INSERT INTO meta VALUES('last_compatible_version','1');
 INSERT INTO meta VALUES('run_count','0');
 
-INSERT INTO sites_to_clear VALUES('https://example.test', 2);
-INSERT INTO browser_contexts_cleared VALUES('p', 2);
+INSERT INTO browser_context_sites_to_clear VALUES('b0', 'https://example.test', 1),
+                                                 ('b1', 'https://example.test', 1);
+INSERT INTO browser_contexts_cleared VALUES('b0', 1);
 
 COMMIT;
\ No newline at end of file
diff --git a/content/test/data/first_party_sets/v1.init_too_new.sql b/content/test/data/first_party_sets/v1.init_too_new.sql
index ef31021..ece67fc 100644
--- a/content/test/data/first_party_sets/v1.init_too_new.sql
+++ b/content/test/data/first_party_sets/v1.init_too_new.sql
@@ -2,12 +2,14 @@
 
 BEGIN TRANSACTION;
 
-CREATE TABLE sites_to_clear (
-    site TEXT NOT NULL PRIMARY KEY,
-    marked_at_run INTEGER NOT NULL
+CREATE TABLE IF NOT EXISTS browser_context_sites_to_clear (
+   browser_context_id TEXT NOT NULL,
+   site TEXT NOT NULL,
+   marked_at_run Integer NOT NULL,
+   PRIMARY KEY (browser_context_id, site)
 ) WITHOUT ROWID;
 
-CREATE INDEX idx_marked_at_run_sites ON sites_to_clear (marked_at_run);
+CREATE INDEX idx_marked_at_run_sites ON browser_context_sites_to_clear (marked_at_run);
 
 CREATE TABLE IF NOT EXISTS browser_contexts_cleared (
    browser_context_id TEXT PRIMARY KEY NOT NULL,
@@ -22,7 +24,8 @@
 INSERT INTO meta VALUES('last_compatible_version','2');
 INSERT INTO meta VALUES('run_count','2');
 
-INSERT INTO sites_to_clear VALUES('https://example.test', 2);
-INSERT INTO browser_contexts_cleared VALUES('p', 2);
+INSERT INTO browser_context_sites_to_clear VALUES('b0', 'https://example.test', 1),
+                                                 ('b1', 'https://example.test', 1);
+INSERT INTO browser_contexts_cleared VALUES('b0', 1);
 
 COMMIT;
\ No newline at end of file
diff --git a/content/test/data/first_party_sets/v1.sql b/content/test/data/first_party_sets/v1.sql
index 4a246f2d..69c43300 100644
--- a/content/test/data/first_party_sets/v1.sql
+++ b/content/test/data/first_party_sets/v1.sql
@@ -2,12 +2,14 @@
 
 BEGIN TRANSACTION;
 
-CREATE TABLE sites_to_clear (
-    site TEXT NOT NULL PRIMARY KEY,
-    marked_at_run INTEGER NOT NULL
+CREATE TABLE IF NOT EXISTS browser_context_sites_to_clear (
+   browser_context_id TEXT NOT NULL,
+   site TEXT NOT NULL,
+   marked_at_run Integer NOT NULL,
+   PRIMARY KEY (browser_context_id, site)
 ) WITHOUT ROWID;
 
-CREATE INDEX idx_marked_at_run_sites ON sites_to_clear (marked_at_run);
+CREATE INDEX idx_marked_at_run_sites ON browser_context_sites_to_clear (marked_at_run);
 
 CREATE TABLE IF NOT EXISTS browser_contexts_cleared (
    browser_context_id TEXT PRIMARY KEY NOT NULL,
@@ -22,7 +24,10 @@
 INSERT INTO meta VALUES('last_compatible_version','1');
 INSERT INTO meta VALUES('run_count','1');
 
-INSERT INTO sites_to_clear VALUES('https://example.test', 1);
-INSERT INTO browser_contexts_cleared VALUES('p', 1);
+-- b0: has sites to clear and has performed the clearing.
+-- b1: has sites to clear but has not performed the clearing.
+INSERT INTO browser_context_sites_to_clear VALUES('b0', 'https://example.test', 1),
+                                                 ('b1', 'https://example.test', 1);
+INSERT INTO browser_contexts_cleared VALUES('b0', 1);
 
 COMMIT;
\ No newline at end of file
diff --git a/extensions/browser/guest_view/web_view/web_view_apitest.cc b/extensions/browser/guest_view/web_view/web_view_apitest.cc
index ee2ac9b..0fb9343 100644
--- a/extensions/browser/guest_view/web_view/web_view_apitest.cc
+++ b/extensions/browser/guest_view/web_view/web_view_apitest.cc
@@ -867,7 +867,12 @@
   LaunchApp("web_view/inside_iframe");
 }
 
-IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestCaptureVisibleRegion) {
+#if BUILDFLAG(IS_MAC)
+#define MAYBE_TestCaptureVisibleRegion DISABLED_TestCaptureVisibleRegion
+#else
+#define MAYBE_TestCaptureVisibleRegion TestCaptureVisibleRegion
+#endif
+IN_PROC_BROWSER_TEST_F(WebViewAPITest, MAYBE_TestCaptureVisibleRegion) {
   RunTest("testCaptureVisibleRegion", "web_view/apitest");
 }
 
diff --git a/extensions/shell/browser/shell_browser_main_parts.cc b/extensions/shell/browser/shell_browser_main_parts.cc
index 152df36..fa05bba9 100644
--- a/extensions/shell/browser/shell_browser_main_parts.cc
+++ b/extensions/shell/browser/shell_browser_main_parts.cc
@@ -69,6 +69,7 @@
 #include "chromeos/ash/components/network/network_handler.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/power/power_manager_client.h"
+#include "chromeos/dbus/shill/shill_clients.h"
 #include "extensions/shell/browser/shell_audio_controller_chromeos.h"
 #include "extensions/shell/browser/shell_network_controller_chromeos.h"
 #endif
@@ -124,11 +125,13 @@
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
   if (bus) {
+    chromeos::shill_clients::Initialize(bus);
     ash::hermes_clients::Initialize(bus);
     ash::CrasAudioClient::Initialize(bus);
     chromeos::CrosDisksClient::Initialize(bus);
     chromeos::PowerManagerClient::Initialize(bus);
   } else {
+    chromeos::shill_clients::InitializeFakes();
     ash::hermes_clients::InitializeFakes();
     ash::CrasAudioClient::InitializeFake();
     chromeos::CrosDisksClient::InitializeFake();
@@ -308,6 +311,7 @@
   chromeos::PowerManagerClient::Shutdown();
   chromeos::CrosDisksClient::Shutdown();
   ash::CrasAudioClient::Shutdown();
+  chromeos::shill_clients::Shutdown();
 #endif
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
diff --git a/gin/isolate_holder.cc b/gin/isolate_holder.cc
index 7b4b424..88f9e4d 100644
--- a/gin/isolate_holder.cc
+++ b/gin/isolate_holder.cc
@@ -33,6 +33,20 @@
 const intptr_t* g_reference_table = nullptr;
 v8::FatalErrorCallback g_fatal_error_callback = nullptr;
 v8::OOMErrorCallback g_oom_error_callback = nullptr;
+
+std::unique_ptr<v8::Isolate::CreateParams> getModifiedIsolateParams(
+    std::unique_ptr<v8::Isolate::CreateParams> params,
+    IsolateHolder::AllowAtomicsWaitMode atomics_wait_mode,
+    v8::CreateHistogramCallback create_histogram_callback,
+    v8::AddHistogramSampleCallback add_histogram_sample_callback) {
+  params->create_histogram_callback = create_histogram_callback;
+  params->add_histogram_sample_callback = add_histogram_sample_callback;
+  params->allow_atomics_wait =
+      atomics_wait_mode ==
+      IsolateHolder::AllowAtomicsWaitMode::kAllowAtomicsWait;
+  params->array_buffer_allocator = g_array_buffer_allocator;
+  return params;
+}
 }  // namespace
 
 IsolateHolder::IsolateHolder(
@@ -60,6 +74,21 @@
     IsolateCreationMode isolate_creation_mode,
     v8::CreateHistogramCallback create_histogram_callback,
     v8::AddHistogramSampleCallback add_histogram_sample_callback)
+    : IsolateHolder(task_runner,
+                    access_mode,
+                    isolate_type,
+                    getModifiedIsolateParams(getDefaultIsolateParams(),
+                                             atomics_wait_mode,
+                                             create_histogram_callback,
+                                             add_histogram_sample_callback),
+                    isolate_creation_mode) {}
+
+IsolateHolder::IsolateHolder(
+    scoped_refptr<base::SingleThreadTaskRunner> task_runner,
+    AccessMode access_mode,
+    IsolateType isolate_type,
+    std::unique_ptr<v8::Isolate::CreateParams> params,
+    IsolateCreationMode isolate_creation_mode)
     : access_mode_(access_mode), isolate_type_(isolate_type) {
   CHECK(Initialized())
       << "You need to invoke gin::IsolateHolder::Initialize first";
@@ -67,12 +96,14 @@
   DCHECK(task_runner);
   DCHECK(task_runner->BelongsToCurrentThread());
 
-  v8::ArrayBuffer::Allocator* allocator = g_array_buffer_allocator;
+  v8::ArrayBuffer::Allocator* allocator = params->array_buffer_allocator;
   DCHECK(allocator);
 
   isolate_ = v8::Isolate::Allocate();
   isolate_data_ = std::make_unique<PerIsolateData>(isolate_, allocator,
                                                    access_mode_, task_runner);
+  //  TODO(https://crbug.com/1347092): Refactor such that caller need not
+  //  provide params when creating a snapshot.
   if (isolate_creation_mode == IsolateCreationMode::kCreateSnapshot) {
     // This branch is called when creating a V8 snapshot for Blink.
     // Note SnapshotCreator calls isolate->Enter() in its construction.
@@ -80,24 +111,7 @@
         std::make_unique<v8::SnapshotCreator>(isolate_, g_reference_table);
     DCHECK_EQ(isolate_, snapshot_creator_->GetIsolate());
   } else {
-    v8::Isolate::CreateParams params;
-    params.code_event_handler = DebugImpl::GetJitCodeEventHandler();
-    params.constraints.ConfigureDefaults(
-        base::SysInfo::AmountOfPhysicalMemory(),
-        base::SysInfo::AmountOfVirtualMemory());
-    params.array_buffer_allocator = allocator;
-    params.allow_atomics_wait =
-        atomics_wait_mode == AllowAtomicsWaitMode::kAllowAtomicsWait;
-    params.external_references = g_reference_table;
-    params.only_terminate_in_safe_scope = true;
-    params.embedder_wrapper_type_index = kWrapperInfoIndex;
-    params.embedder_wrapper_object_index = kEncodedValueIndex;
-    params.create_histogram_callback = create_histogram_callback;
-    params.add_histogram_sample_callback = add_histogram_sample_callback;
-    params.fatal_error_callback = g_fatal_error_callback;
-    params.oom_error_callback = g_oom_error_callback;
-
-    v8::Isolate::Initialize(isolate_, params);
+    v8::Isolate::Initialize(isolate_, *params);
   }
 
   // This will attempt register the shared memory dump provider for every
@@ -137,6 +151,29 @@
   return g_array_buffer_allocator;
 }
 
+// static
+std::unique_ptr<v8::Isolate::CreateParams>
+IsolateHolder::getDefaultIsolateParams() {
+  CHECK(Initialized())
+      << "You need to invoke gin::IsolateHolder::Initialize first";
+  // TODO(https://crbug.com/v8/13092): Remove usage of unique_ptr once V8
+  // supports the move constructor on CreateParams.
+  std::unique_ptr<v8::Isolate::CreateParams> params =
+      std::make_unique<v8::Isolate::CreateParams>();
+  params->code_event_handler = DebugImpl::GetJitCodeEventHandler();
+  params->constraints.ConfigureDefaults(base::SysInfo::AmountOfPhysicalMemory(),
+                                        base::SysInfo::AmountOfVirtualMemory());
+  params->array_buffer_allocator = g_array_buffer_allocator;
+  params->allow_atomics_wait = true;
+  params->external_references = g_reference_table;
+  params->only_terminate_in_safe_scope = true;
+  params->embedder_wrapper_type_index = kWrapperInfoIndex;
+  params->embedder_wrapper_object_index = kEncodedValueIndex;
+  params->fatal_error_callback = g_fatal_error_callback;
+  params->oom_error_callback = g_oom_error_callback;
+  return params;
+}
+
 void IsolateHolder::EnableIdleTasks(
     std::unique_ptr<V8IdleTaskRunner> idle_task_runner) {
   DCHECK(isolate_data_.get());
diff --git a/gin/public/isolate_holder.h b/gin/public/isolate_holder.h
index 20cfc22..d773992 100644
--- a/gin/public/isolate_holder.h
+++ b/gin/public/isolate_holder.h
@@ -14,6 +14,7 @@
 #include "v8/include/v8-array-buffer.h"
 #include "v8/include/v8-callbacks.h"
 #include "v8/include/v8-forward.h"
+#include "v8/include/v8-isolate.h"
 
 namespace base {
 class SingleThreadTaskRunner;
@@ -83,6 +84,12 @@
       IsolateCreationMode isolate_creation_mode = IsolateCreationMode::kNormal,
       v8::CreateHistogramCallback create_histogram_callback = nullptr,
       v8::AddHistogramSampleCallback add_histogram_sample_callback = nullptr);
+  IsolateHolder(
+      scoped_refptr<base::SingleThreadTaskRunner> task_runner,
+      AccessMode access_mode,
+      IsolateType isolate_type,
+      std::unique_ptr<v8::Isolate::CreateParams> params,
+      IsolateCreationMode isolate_creation_mode = IsolateCreationMode::kNormal);
   IsolateHolder(const IsolateHolder&) = delete;
   IsolateHolder& operator=(const IsolateHolder&) = delete;
   ~IsolateHolder();
@@ -109,6 +116,9 @@
   // false after returning true).
   static bool Initialized();
 
+  // Should only be called after v8::IsolateHolder::Initialize() is invoked.
+  static std::unique_ptr<v8::Isolate::CreateParams> getDefaultIsolateParams();
+
   v8::Isolate* isolate() { return isolate_; }
 
   // This method returns if v8::Locker is needed to access isolate.
diff --git "a/infra/config/generated/builders/ci/Android arm Builder \050dbg\051/properties.json" "b/infra/config/generated/builders/ci/Android arm Builder \050dbg\051/properties.json"
index ffa80e2..bab675c 100644
--- "a/infra/config/generated/builders/ci/Android arm Builder \050dbg\051/properties.json"
+++ "b/infra/config/generated/builders/ci/Android arm Builder \050dbg\051/properties.json"
@@ -69,6 +69,43 @@
               },
               "run_tests_serially": true
             }
+          },
+          {
+            "builder_id": {
+              "bucket": "ci",
+              "builder": "android-12l-x86-rel",
+              "project": "chromium"
+            },
+            "builder_spec": {
+              "build_gs_bucket": "chromium-android-archive",
+              "builder_group": "chromium.android",
+              "execution_mode": "TEST",
+              "legacy_android_config": {
+                "config": "main_builder_mb"
+              },
+              "legacy_chromium_config": {
+                "apply_configs": [
+                  "download_vr_test_apks"
+                ],
+                "build_config": "Release",
+                "config": "android",
+                "target_bits": 32,
+                "target_platform": "android"
+              },
+              "legacy_gclient_config": {
+                "apply_configs": [
+                  "android",
+                  "enable_reclient"
+                ],
+                "config": "chromium"
+              },
+              "parent": {
+                "bucket": "ci",
+                "builder": "Android arm Builder (dbg)",
+                "project": "chromium"
+              },
+              "run_tests_serially": true
+            }
           }
         ]
       },
@@ -84,6 +121,11 @@
           "bucket": "ci",
           "builder": "Marshmallow Tablet Tester",
           "project": "chromium"
+        },
+        {
+          "bucket": "ci",
+          "builder": "android-12l-x86-rel",
+          "project": "chromium"
         }
       ],
       "mirroring_builder_group_and_names": [
diff --git a/infra/config/generated/builders/ci/android-12l-x86-rel/properties.json b/infra/config/generated/builders/ci/android-12l-x86-rel/properties.json
new file mode 100644
index 0000000..98ed15e2
--- /dev/null
+++ b/infra/config/generated/builders/ci/android-12l-x86-rel/properties.json
@@ -0,0 +1,109 @@
+{
+  "$build/chromium_tests_builder_config": {
+    "builder_config": {
+      "builder_db": {
+        "entries": [
+          {
+            "builder_id": {
+              "bucket": "ci",
+              "builder": "Android arm Builder (dbg)",
+              "project": "chromium"
+            },
+            "builder_spec": {
+              "build_gs_bucket": "chromium-android-archive",
+              "builder_group": "chromium.android",
+              "execution_mode": "COMPILE_AND_TEST",
+              "legacy_android_config": {
+                "config": "main_builder_mb"
+              },
+              "legacy_chromium_config": {
+                "apply_configs": [
+                  "download_vr_test_apks"
+                ],
+                "build_config": "Debug",
+                "config": "android",
+                "target_bits": 32,
+                "target_platform": "android"
+              },
+              "legacy_gclient_config": {
+                "apply_configs": [
+                  "android",
+                  "enable_reclient"
+                ],
+                "config": "chromium"
+              }
+            }
+          },
+          {
+            "builder_id": {
+              "bucket": "ci",
+              "builder": "android-12l-x86-rel",
+              "project": "chromium"
+            },
+            "builder_spec": {
+              "build_gs_bucket": "chromium-android-archive",
+              "builder_group": "chromium.android",
+              "execution_mode": "TEST",
+              "legacy_android_config": {
+                "config": "main_builder_mb"
+              },
+              "legacy_chromium_config": {
+                "apply_configs": [
+                  "download_vr_test_apks"
+                ],
+                "build_config": "Release",
+                "config": "android",
+                "target_bits": 32,
+                "target_platform": "android"
+              },
+              "legacy_gclient_config": {
+                "apply_configs": [
+                  "android",
+                  "enable_reclient"
+                ],
+                "config": "chromium"
+              },
+              "parent": {
+                "bucket": "ci",
+                "builder": "Android arm Builder (dbg)",
+                "project": "chromium"
+              },
+              "run_tests_serially": true
+            }
+          }
+        ]
+      },
+      "builder_ids": [
+        {
+          "bucket": "ci",
+          "builder": "android-12l-x86-rel",
+          "project": "chromium"
+        }
+      ],
+      "mirroring_builder_group_and_names": [
+        {
+          "builder": "android-12l-x86-rel",
+          "group": "tryserver.chromium.android"
+        },
+        {
+          "builder": "android_compile_dbg",
+          "group": "tryserver.chromium.android"
+        }
+      ]
+    }
+  },
+  "$build/reclient": {
+    "instance": "rbe-chromium-trusted",
+    "jobs": 500,
+    "metrics_project": "chromium-reclient-metrics"
+  },
+  "$recipe_engine/resultdb/test_presentation": {
+    "column_keys": [],
+    "grouping_keys": [
+      "status",
+      "v.test_suite"
+    ]
+  },
+  "builder_group": "chromium.android",
+  "recipe": "chromium"
+}
\ No newline at end of file
diff --git a/infra/config/generated/builders/ci/lacros-amd64-generic-rel-skylab-fyi/properties.json b/infra/config/generated/builders/ci/lacros-amd64-generic-rel-skylab-fyi/properties.json
index fc3bce3..ab2f48c0 100644
--- a/infra/config/generated/builders/ci/lacros-amd64-generic-rel-skylab-fyi/properties.json
+++ b/infra/config/generated/builders/ci/lacros-amd64-generic-rel-skylab-fyi/properties.json
@@ -1,4 +1,59 @@
 {
+  "$build/chromium_tests_builder_config": {
+    "builder_config": {
+      "builder_db": {
+        "entries": [
+          {
+            "builder_id": {
+              "bucket": "ci",
+              "builder": "lacros-amd64-generic-rel-skylab-fyi",
+              "project": "chromium"
+            },
+            "builder_spec": {
+              "build_gs_bucket": "chromium-fyi-archive",
+              "builder_group": "chromium.fyi",
+              "execution_mode": "COMPILE_AND_TEST",
+              "legacy_chromium_config": {
+                "apply_configs": [
+                  "mb",
+                  "mb_no_luci_auth"
+                ],
+                "config": "chromium",
+                "cros_boards_with_qemu_images": [
+                  "amd64-generic"
+                ],
+                "target_bits": 64,
+                "target_cros_boards": [
+                  "eve"
+                ],
+                "target_platform": "chromeos"
+              },
+              "legacy_gclient_config": {
+                "apply_configs": [
+                  "chromeos",
+                  "checkout_lacros_sdk"
+                ],
+                "config": "chromium"
+              },
+              "legacy_test_results_config": {
+                "config": "staging_server"
+              },
+              "skylab_upload_location": {
+                "gs_bucket": "gs://lacros-amd64-generic-rel-skylab-try"
+              }
+            }
+          }
+        ]
+      },
+      "builder_ids": [
+        {
+          "bucket": "ci",
+          "builder": "lacros-amd64-generic-rel-skylab-fyi",
+          "project": "chromium"
+        }
+      ]
+    }
+  },
   "$build/goma": {
     "enable_ats": true,
     "rpc_extra_params": "?prod",
diff --git a/infra/config/generated/builders/try/android-12l-x86-rel/properties.json b/infra/config/generated/builders/try/android-12l-x86-rel/properties.json
new file mode 100644
index 0000000..c0a673a9
--- /dev/null
+++ b/infra/config/generated/builders/try/android-12l-x86-rel/properties.json
@@ -0,0 +1,107 @@
+{
+  "$build/chromium_tests_builder_config": {
+    "builder_config": {
+      "builder_db": {
+        "entries": [
+          {
+            "builder_id": {
+              "bucket": "ci",
+              "builder": "Android arm Builder (dbg)",
+              "project": "chromium"
+            },
+            "builder_spec": {
+              "build_gs_bucket": "chromium-android-archive",
+              "builder_group": "chromium.android",
+              "execution_mode": "COMPILE_AND_TEST",
+              "legacy_android_config": {
+                "config": "main_builder_mb"
+              },
+              "legacy_chromium_config": {
+                "apply_configs": [
+                  "download_vr_test_apks"
+                ],
+                "build_config": "Debug",
+                "config": "android",
+                "target_bits": 32,
+                "target_platform": "android"
+              },
+              "legacy_gclient_config": {
+                "apply_configs": [
+                  "android",
+                  "enable_reclient"
+                ],
+                "config": "chromium"
+              }
+            }
+          },
+          {
+            "builder_id": {
+              "bucket": "ci",
+              "builder": "android-12l-x86-rel",
+              "project": "chromium"
+            },
+            "builder_spec": {
+              "build_gs_bucket": "chromium-android-archive",
+              "builder_group": "chromium.android",
+              "execution_mode": "TEST",
+              "legacy_android_config": {
+                "config": "main_builder_mb"
+              },
+              "legacy_chromium_config": {
+                "apply_configs": [
+                  "download_vr_test_apks"
+                ],
+                "build_config": "Release",
+                "config": "android",
+                "target_bits": 32,
+                "target_platform": "android"
+              },
+              "legacy_gclient_config": {
+                "apply_configs": [
+                  "android",
+                  "enable_reclient"
+                ],
+                "config": "chromium"
+              },
+              "parent": {
+                "bucket": "ci",
+                "builder": "Android arm Builder (dbg)",
+                "project": "chromium"
+              },
+              "run_tests_serially": true
+            }
+          }
+        ]
+      },
+      "builder_ids": [
+        {
+          "bucket": "ci",
+          "builder": "Android arm Builder (dbg)",
+          "project": "chromium"
+        }
+      ],
+      "builder_ids_in_scope_for_testing": [
+        {
+          "bucket": "ci",
+          "builder": "android-12l-x86-rel",
+          "project": "chromium"
+        }
+      ]
+    }
+  },
+  "$build/goma": {
+    "enable_ats": true,
+    "rpc_extra_params": "?prod",
+    "server_host": "goma.chromium.org",
+    "use_luci_auth": true
+  },
+  "$recipe_engine/resultdb/test_presentation": {
+    "column_keys": [],
+    "grouping_keys": [
+      "status",
+      "v.test_suite"
+    ]
+  },
+  "builder_group": "tryserver.chromium.android",
+  "recipe": "chromium_trybot"
+}
\ No newline at end of file
diff --git a/infra/config/generated/builders/try/android_compile_dbg/properties.json b/infra/config/generated/builders/try/android_compile_dbg/properties.json
index 932a561..a014bf4 100644
--- a/infra/config/generated/builders/try/android_compile_dbg/properties.json
+++ b/infra/config/generated/builders/try/android_compile_dbg/properties.json
@@ -69,6 +69,43 @@
               },
               "run_tests_serially": true
             }
+          },
+          {
+            "builder_id": {
+              "bucket": "ci",
+              "builder": "android-12l-x86-rel",
+              "project": "chromium"
+            },
+            "builder_spec": {
+              "build_gs_bucket": "chromium-android-archive",
+              "builder_group": "chromium.android",
+              "execution_mode": "TEST",
+              "legacy_android_config": {
+                "config": "main_builder_mb"
+              },
+              "legacy_chromium_config": {
+                "apply_configs": [
+                  "download_vr_test_apks"
+                ],
+                "build_config": "Release",
+                "config": "android",
+                "target_bits": 32,
+                "target_platform": "android"
+              },
+              "legacy_gclient_config": {
+                "apply_configs": [
+                  "android",
+                  "enable_reclient"
+                ],
+                "config": "chromium"
+              },
+              "parent": {
+                "bucket": "ci",
+                "builder": "Android arm Builder (dbg)",
+                "project": "chromium"
+              },
+              "run_tests_serially": true
+            }
           }
         ]
       },
@@ -84,6 +121,11 @@
           "bucket": "ci",
           "builder": "Marshmallow Tablet Tester",
           "project": "chromium"
+        },
+        {
+          "bucket": "ci",
+          "builder": "android-12l-x86-rel",
+          "project": "chromium"
         }
       ],
       "is_compile_only": true
diff --git a/infra/config/generated/builders/try/linux-lacros-rel/properties.json b/infra/config/generated/builders/try/linux-lacros-rel/properties.json
index 95dc0a0..8a5373c 100644
--- a/infra/config/generated/builders/try/linux-lacros-rel/properties.json
+++ b/infra/config/generated/builders/try/linux-lacros-rel/properties.json
@@ -81,6 +81,9 @@
       ]
     }
   },
+  "$build/flakiness": {
+    "check_for_flakiness": true
+  },
   "$build/goma": {
     "enable_ats": true,
     "jobs": 300,
diff --git a/infra/config/generated/cq-builders.md b/infra/config/generated/cq-builders.md
index c383f16..e2403de 100644
--- a/infra/config/generated/cq-builders.md
+++ b/infra/config/generated/cq-builders.md
@@ -480,6 +480,9 @@
 * [android-12-x64-rel](https://ci.chromium.org/p/chromium/builders/try/android-12-x64-rel) ([definition](https://cs.chromium.org/search?q=+file:/try/.*\.star$+""android-12-x64-rel"")) ([matching builders](https://cs.chromium.org/search?q=+file:trybots.py+""android-12-x64-rel""))
   * Experiment percentage: 100.0
 
+* [android-12l-x86-rel](https://ci.chromium.org/p/chromium/builders/try/android-12l-x86-rel) ([definition](https://cs.chromium.org/search?q=+file:/try/.*\.star$+""android-12l-x86-rel"")) ([matching builders](https://cs.chromium.org/search?q=+file:trybots.py+""android-12l-x86-rel""))
+  * Experiment percentage: 2.0
+
 * [android-pie-arm64-coverage-experimental-rel](https://ci.chromium.org/p/chromium/builders/try/android-pie-arm64-coverage-experimental-rel) ([definition](https://cs.chromium.org/search?q=+file:/try/.*\.star$+""android-pie-arm64-coverage-experimental-rel"")) ([matching builders](https://cs.chromium.org/search?q=+file:trybots.py+""android-pie-arm64-coverage-experimental-rel""))
   * Experiment percentage: 3.0
 
diff --git a/infra/config/generated/luci/commit-queue.cfg b/infra/config/generated/luci/commit-queue.cfg
index 03202ac..04afb645 100644
--- a/infra/config/generated/luci/commit-queue.cfg
+++ b/infra/config/generated/luci/commit-queue.cfg
@@ -341,6 +341,30 @@
         includable_only: true
       }
       builders {
+        name: "chromium/try/android-12l-x86-rel"
+        experiment_percentage: 2
+        location_regexp: ".*"
+        location_regexp_exclude: ".+/[+]/docs/.+"
+        location_regexp_exclude: ".+/[+]/infra/config/.+"
+        location_filters {
+          gerrit_host_regexp: ".*"
+          gerrit_project_regexp: ".*"
+          path_regexp: ".*"
+        }
+        location_filters {
+          gerrit_host_regexp: ".*"
+          gerrit_project_regexp: ".*"
+          path_regexp: "docs/.+"
+          exclude: true
+        }
+        location_filters {
+          gerrit_host_regexp: ".*"
+          gerrit_project_regexp: ".*"
+          path_regexp: "infra/config/.+"
+          exclude: true
+        }
+      }
+      builders {
         name: "chromium/try/android-angle-chromium-try"
         includable_only: true
       }
diff --git a/infra/config/generated/luci/cr-buildbucket.cfg b/infra/config/generated/luci/cr-buildbucket.cfg
index 0e1ac6f5..3162670 100644
--- a/infra/config/generated/luci/cr-buildbucket.cfg
+++ b/infra/config/generated/luci/cr-buildbucket.cfg
@@ -23363,6 +23363,86 @@
       }
     }
     builders {
+      name: "android-12l-x86-rel"
+      swarming_host: "chromium-swarm.appspot.com"
+      dimensions: "builderless:1"
+      dimensions: "cores:8"
+      dimensions: "cpu:x86-64"
+      dimensions: "free_space:standard"
+      dimensions: "os:Ubuntu-18.04"
+      dimensions: "pool:luci.chromium.ci"
+      dimensions: "ssd:0"
+      exe {
+        cipd_package: "infra/chromium/bootstrapper/${platform}"
+        cipd_version: "latest"
+        cmd: "bootstrapper"
+      }
+      properties:
+        '{'
+        '  "$bootstrap/exe": {'
+        '    "exe": {'
+        '      "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
+        '      "cipd_version": "refs/heads/main",'
+        '      "cmd": ['
+        '        "luciexe"'
+        '      ]'
+        '    }'
+        '  },'
+        '  "$bootstrap/properties": {'
+        '    "properties_file": "infra/config/generated/builders/ci/android-12l-x86-rel/properties.json",'
+        '    "top_level_project": {'
+        '      "ref": "refs/heads/main",'
+        '      "repo": {'
+        '        "host": "chromium.googlesource.com",'
+        '        "project": "chromium/src"'
+        '      }'
+        '    }'
+        '  },'
+        '  "builder_group": "chromium.android",'
+        '  "led_builder_is_bootstrapped": true,'
+        '  "recipe": "chromium"'
+        '}'
+      execution_timeout_secs: 14400
+      build_numbers: YES
+      service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
+      experiments {
+        key: "luci.recipes.use_python3"
+        value: 100
+      }
+      resultdb {
+        enable: true
+        bq_exports {
+          project: "chrome-luci-data"
+          dataset: "chromium"
+          table: "ci_test_results"
+          test_results {}
+        }
+        bq_exports {
+          project: "chrome-luci-data"
+          dataset: "chromium"
+          table: "gpu_ci_test_results"
+          test_results {
+            predicate {
+              test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
+            }
+          }
+        }
+        bq_exports {
+          project: "chrome-luci-data"
+          dataset: "chromium"
+          table: "blink_web_tests_ci_test_results"
+          test_results {
+            predicate {
+              test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
+            }
+          }
+        }
+        history_options {
+          use_invocation_timestamp: true
+        }
+      }
+    }
+    builders {
       name: "android-androidx-packager"
       swarming_host: "chromium-swarm.appspot.com"
       dimensions: "builderless:1"
@@ -50429,6 +50509,96 @@
       description_html: "This is the compilator half of an orchestrator + compilator pair of builders. The orchestrator is <a href=\"https://ci.chromium.org/p/chromium/builders/try/android-12-x64-rel\">android-12-x64-rel</a>."
     }
     builders {
+      name: "android-12l-x86-rel"
+      swarming_host: "chromium-swarm.appspot.com"
+      dimensions: "builderless:1"
+      dimensions: "cores:8"
+      dimensions: "cpu:x86-64"
+      dimensions: "os:Ubuntu-18.04"
+      dimensions: "pool:luci.chromium.try"
+      dimensions: "ssd:0"
+      exe {
+        cipd_package: "infra/chromium/bootstrapper/${platform}"
+        cipd_version: "latest"
+        cmd: "bootstrapper"
+      }
+      properties:
+        '{'
+        '  "$bootstrap/exe": {'
+        '    "exe": {'
+        '      "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
+        '      "cipd_version": "refs/heads/main",'
+        '      "cmd": ['
+        '        "luciexe"'
+        '      ]'
+        '    }'
+        '  },'
+        '  "$bootstrap/properties": {'
+        '    "properties_file": "infra/config/generated/builders/try/android-12l-x86-rel/properties.json",'
+        '    "top_level_project": {'
+        '      "ref": "refs/heads/main",'
+        '      "repo": {'
+        '        "host": "chromium.googlesource.com",'
+        '        "project": "chromium/src"'
+        '      }'
+        '    }'
+        '  },'
+        '  "builder_group": "tryserver.chromium.android",'
+        '  "led_builder_is_bootstrapped": true,'
+        '  "recipe": "chromium_trybot"'
+        '}'
+      execution_timeout_secs: 14400
+      expiration_secs: 7200
+      grace_period {
+        seconds: 120
+      }
+      caches {
+        name: "win_toolchain"
+        path: "win_toolchain"
+      }
+      build_numbers: YES
+      service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
+      task_template_canary_percentage {
+        value: 5
+      }
+      experiments {
+        key: "luci.recipes.use_python3"
+        value: 100
+      }
+      resultdb {
+        enable: true
+        bq_exports {
+          project: "chrome-luci-data"
+          dataset: "chromium"
+          table: "try_test_results"
+          test_results {}
+        }
+        bq_exports {
+          project: "chrome-luci-data"
+          dataset: "chromium"
+          table: "gpu_try_test_results"
+          test_results {
+            predicate {
+              test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
+            }
+          }
+        }
+        bq_exports {
+          project: "chrome-luci-data"
+          dataset: "chromium"
+          table: "blink_web_tests_try_test_results"
+          test_results {
+            predicate {
+              test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
+            }
+          }
+        }
+        history_options {
+          use_invocation_timestamp: true
+        }
+      }
+    }
+    builders {
       name: "android-angle-chromium-try"
       swarming_host: "chromium-swarm.appspot.com"
       dimensions: "builder:android-angle-chromium-try"
diff --git a/infra/config/generated/luci/luci-milo.cfg b/infra/config/generated/luci/luci-milo.cfg
index 9e456f8..2ad6a0bb 100644
--- a/infra/config/generated/luci/luci-milo.cfg
+++ b/infra/config/generated/luci/luci-milo.cfg
@@ -3746,6 +3746,11 @@
     short_name: "P"
   }
   builders {
+    name: "buildbucket/luci.chromium.ci/android-12l-x86-rel"
+    category: "tester|tablet"
+    short_name: "12L"
+  }
+  builders {
     name: "buildbucket/luci.chromium.ci/Marshmallow Tablet Tester"
     category: "tester|tablet"
     short_name: "M"
@@ -16023,6 +16028,9 @@
     name: "buildbucket/luci.chromium.try/android-12-x64-rel-compilator"
   }
   builders {
+    name: "buildbucket/luci.chromium.try/android-12l-x86-rel"
+  }
+  builders {
     name: "buildbucket/luci.chromium.try/android-angle-chromium-try"
   }
   builders {
@@ -17154,6 +17162,9 @@
     name: "buildbucket/luci.chromium.try/android-12-x64-rel-compilator"
   }
   builders {
+    name: "buildbucket/luci.chromium.try/android-12l-x86-rel"
+  }
+  builders {
     name: "buildbucket/luci.chromium.try/android-arm64-all-targets-dbg"
   }
   builders {
diff --git a/infra/config/generated/luci/luci-scheduler.cfg b/infra/config/generated/luci/luci-scheduler.cfg
index 28c80b88..b4e20bb 100644
--- a/infra/config/generated/luci/luci-scheduler.cfg
+++ b/infra/config/generated/luci/luci-scheduler.cfg
@@ -4167,6 +4167,20 @@
   }
 }
 job {
+  id: "android-12l-x86-rel"
+  realm: "ci"
+  acls {
+    role: TRIGGERER
+    granted_to: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
+  }
+  acl_sets: "ci"
+  buildbucket {
+    server: "cr-buildbucket.appspot.com"
+    bucket: "ci"
+    builder: "android-12l-x86-rel"
+  }
+}
+job {
   id: "android-androidx-packager"
   realm: "ci"
   schedule: "0 7,14,22 * * * *"
diff --git a/infra/config/generated/luci/realms.cfg b/infra/config/generated/luci/realms.cfg
index 17109b2..173e380 100644
--- a/infra/config/generated/luci/realms.cfg
+++ b/infra/config/generated/luci/realms.cfg
@@ -135,6 +135,7 @@
         values: "Win7 (32) Tests"
         values: "Win7 Tests (1)"
         values: "android-12-x64-dbg-tests"
+        values: "android-12l-x86-rel"
         values: "android-cronet-x86-dbg-10-tests"
         values: "android-cronet-x86-dbg-11-tests"
         values: "android-cronet-x86-dbg-lollipop-tests"
diff --git a/infra/config/subprojects/chromium/ci/chromium.android.star b/infra/config/subprojects/chromium/ci/chromium.android.star
index df3551f..5f0dbbe3 100644
--- a/infra/config/subprojects/chromium/ci/chromium.android.star
+++ b/infra/config/subprojects/chromium/ci/chromium.android.star
@@ -684,6 +684,42 @@
 )
 
 ci.builder(
+    name = "android-12l-x86-rel",
+    builder_spec = builder_config.builder_spec(
+        execution_mode = builder_config.execution_mode.TEST,
+        gclient_config = builder_config.gclient_config(
+            config = "chromium",
+            apply_configs = [
+                "android",
+                "enable_reclient",
+            ],
+        ),
+        chromium_config = builder_config.chromium_config(
+            config = "android",
+            apply_configs = [
+                "download_vr_test_apks",
+            ],
+            build_config = builder_config.build_config.RELEASE,
+            target_bits = 32,
+            target_platform = builder_config.target_platform.ANDROID,
+        ),
+        android_config = builder_config.android_config(
+            config = "main_builder_mb",
+        ),
+        build_gs_bucket = "chromium-android-archive",
+        run_tests_serially = True,
+    ),
+    console_view_entry = consoles.console_view_entry(
+        category = "tester|tablet",
+        short_name = "12L",
+    ),
+    # TODO: This can be reduced when builder works.
+    execution_timeout = 4 * time.hour,
+    sheriff_rotations = args.ignore_default(None),
+    triggered_by = ["ci/Android arm Builder (dbg)"],
+)
+
+ci.builder(
     name = "android-arm64-proguard-rel",
     builder_spec = builder_config.builder_spec(
         gclient_config = builder_config.gclient_config(
diff --git a/infra/config/subprojects/chromium/ci/chromium.fyi.star b/infra/config/subprojects/chromium/ci/chromium.fyi.star
index fe06650..ecff2bcc 100644
--- a/infra/config/subprojects/chromium/ci/chromium.fyi.star
+++ b/infra/config/subprojects/chromium/ci/chromium.fyi.star
@@ -372,6 +372,30 @@
         short_name = "lsf",
     ),
     os = os.LINUX_DEFAULT,
+    builder_spec = builder_config.builder_spec(
+        chromium_config = builder_config.chromium_config(
+            config = "chromium",
+            apply_configs = ["mb", "mb_no_luci_auth"],
+            target_bits = 64,
+            target_cros_boards = "eve",
+            cros_boards_with_qemu_images = "amd64-generic",
+            target_platform = "chromeos",
+        ),
+        gclient_config = builder_config.gclient_config(
+            config = "chromium",
+            apply_configs = [
+                "chromeos",
+                "checkout_lacros_sdk",
+            ],
+        ),
+        skylab_upload_location = builder_config.skylab_upload_location(
+            gs_bucket = "gs://lacros-amd64-generic-rel-skylab-try",
+        ),
+        test_results_config = builder_config.test_results_config(
+            config = "staging_server",
+        ),
+        build_gs_bucket = "chromium-fyi-archive",
+    ),
 )
 
 ci.builder(
diff --git a/infra/config/subprojects/chromium/try/tryserver.chromium.android.star b/infra/config/subprojects/chromium/try/tryserver.chromium.android.star
index 05c4058..156a4ded 100644
--- a/infra/config/subprojects/chromium/try/tryserver.chromium.android.star
+++ b/infra/config/subprojects/chromium/try/tryserver.chromium.android.star
@@ -73,6 +73,16 @@
 )
 
 try_.builder(
+    name = "android-12l-x86-rel",
+    mirrors = [
+        "ci/android-12l-x86-rel",
+    ],
+    tryjob = try_.job(
+        experiment_percentage = 2,
+    ),
+)
+
+try_.builder(
     name = "android-asan",
 )
 
diff --git a/infra/config/subprojects/chromium/try/tryserver.chromium.chromiumos.star b/infra/config/subprojects/chromium/try/tryserver.chromium.chromiumos.star
index 5b46913..8afffe3 100644
--- a/infra/config/subprojects/chromium/try/tryserver.chromium.chromiumos.star
+++ b/infra/config/subprojects/chromium/try/tryserver.chromium.chromiumos.star
@@ -239,6 +239,7 @@
     ],
     branch_selector = branches.STANDARD_MILESTONE,
     builderless = not settings.is_main,
+    check_for_flakiness = True,
     cores = 16,
     ssd = True,
     goma_jobs = goma.jobs.J300,
diff --git a/ios/build/chrome_build.gni b/ios/build/chrome_build.gni
index 2cb1a48..5dd6e36 100644
--- a/ios/build/chrome_build.gni
+++ b/ios/build/chrome_build.gni
@@ -38,6 +38,9 @@
   # Controls whether ScreenTime API is used.
   ios_enable_screen_time = true
 
+  # Enable background fetch mode for feed refresh.
+  ios_enable_background_mode = false
+
   # Value of the encryption export compliance code. See "Cryptography and
   # U.S. Export Compliance" in "Submitting the App to App Review" in the
   # Apple developer documentation (https://goo.gl/yv1xEF).
@@ -90,6 +93,8 @@
   is_official_release = false
 }
 
+ios_enable_background_mode = !is_official_release
+
 chromium_bundle_id = "$ios_app_bundle_id_prefix.chrome.ios.dev"
 chromium_handoff_id = "$ios_app_bundle_id_prefix.chrome.handoff"
 ios_move_tab_activity_type = "$ios_app_bundle_id_prefix.chrome.move-tab"
diff --git a/ios/chrome/app/BUILD.gn b/ios/chrome/app/BUILD.gn
index 0c0b53c4..184536b 100644
--- a/ios/chrome/app/BUILD.gn
+++ b/ios/chrome/app/BUILD.gn
@@ -100,6 +100,9 @@
       "resources/Info.plist",
       "resources/ChromeAddition+Info.plist",
     ]
+    if (ios_enable_background_mode) {
+      info_plists += [ "resources/Background+Info.plist" ]
+    }
     if (target_environment == "catalyst") {
       info_plists += [ "resources/Environment+Catalyst.plist" ]
     } else {
diff --git a/ios/chrome/app/resources/Background+Info.plist b/ios/chrome/app/resources/Background+Info.plist
new file mode 100644
index 0000000..9388692
--- /dev/null
+++ b/ios/chrome/app/resources/Background+Info.plist
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>UIBackgroundModes</key>
+	<array>
+		<string>fetch</string>
+	</array>
+	<key>BGTaskSchedulerPermittedIdentifiers</key>
+	<array>
+		<string>chrome.feed.refresh</string>
+	</array>
+</dict>
+</plist>
diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios_strings.grd
index c984902..85e7f58 100644
--- a/ios/chrome/app/strings/ios_strings.grd
+++ b/ios/chrome/app/strings/ios_strings.grd
@@ -3212,6 +3212,15 @@
       <message name="IDS_IOS_TOOLS_MENU_RECENT_TABS" desc="The iOS menu item for opening the panel showing the recently closed tabs and the tabs from other devices." meaning="[In Title case] [iOS only] [Length: Unlimited]">
         Recent Tabs
       </message>
+      <message name="IDS_IOS_OVERFLOW_MENU_SHARE_CHROME" desc="The iOS menu item for opening a share sheet with the URL to the Chrome app in the iOS app store" meaning="[In Title case] [iOS only] [Length: Unlimited]">
+        Share Chrome
+      </message>
+      <message name="IDS_IOS_OVERFLOW_MENU_SHARE_CHROME_TITLE" desc="The title displayed along with the app store link to Chrome, when sharing the chrome app" meaning="[In Title case] [iOS only] [Length: Unlimited]">
+        Chrome for iOS
+      </message>
+      <message name="IDS_IOS_OVERFLOW_MENU_SHARE_CHROME_DESC" desc="The description displayed along with the app store link to Chrome, when sharing the chrome app" meaning="[In Title case] [iOS only] [Length: Unlimited]">
+        Get Chrome for iOS
+      </message>
       <message name="IDS_IOS_TOOLS_MENU_RELOAD" desc="The title of the button in the menu allowing the user to reload the page.">
         Reload
       </message>
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_OVERFLOW_MENU_SHARE_CHROME.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_OVERFLOW_MENU_SHARE_CHROME.png.sha1
new file mode 100644
index 0000000..4dddafe
--- /dev/null
+++ b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_OVERFLOW_MENU_SHARE_CHROME.png.sha1
@@ -0,0 +1 @@
+1ca942381f3377365085bc0c77852d122831378a
\ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_OVERFLOW_MENU_SHARE_CHROME_DESC.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_OVERFLOW_MENU_SHARE_CHROME_DESC.png.sha1
new file mode 100644
index 0000000..6b57eea6
--- /dev/null
+++ b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_OVERFLOW_MENU_SHARE_CHROME_DESC.png.sha1
@@ -0,0 +1 @@
+5e4314eafb6f59c9e8efb6e14cee6591bc7ef1e0
\ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_OVERFLOW_MENU_SHARE_CHROME_TITLE.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_OVERFLOW_MENU_SHARE_CHROME_TITLE.png.sha1
new file mode 100644
index 0000000..4f30bc2
--- /dev/null
+++ b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_OVERFLOW_MENU_SHARE_CHROME_TITLE.png.sha1
@@ -0,0 +1 @@
+78b7eb84bc66bb806f24cd6cf3115fdada6ddd6a
\ No newline at end of file
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_it.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_it.xtb
index e2fe0683..415a066 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_it.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_it.xtb
@@ -120,6 +120,7 @@
 <translation id="8586442755830160949">Copyright <ph name="YEAR" /> The Chromium Authors. Tutti i diritti riservati.</translation>
 <translation id="865600487977764604">Ti protegge su Chromium e potrebbe essere utilizzata per migliorare la tua sicurezza in altre app Google se hai eseguito l'accesso.</translation>
 <translation id="8663480472502753423">Mantieni Chromium aggiornato</translation>
+<translation id="8685813584220679697">Accedi a questo sito e a Chromium.</translation>
 <translation id="8747378496147986285">Quando l'opzione è attiva:
 <ph name="BEGIN_INDENT" />  • Contribuisci a migliorare Chromium per le persone che lo usano come fai tu.<ph name="END_INDENT" />
 
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_my.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_my.xtb
index 5c30a58..9e728251 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_my.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_my.xtb
@@ -120,6 +120,7 @@
 <translation id="8586442755830160949">မူပိုင်ခွင့် <ph name="YEAR" /> The Chromium ပြုစုသူများ။ မူပိုင်ခွင့်များ အားလုံးကို ချုပ်ထိန်းထားသည်။</translation>
 <translation id="865600487977764604">Chromium တွင် ဘေးကင်းစေပြီး အခြား Google app များတွင် သင်လက်မှတ်ထိုးဝင်ထားသည့်အခါ လုံခြုံရေး ပိုကောင်းမွန်စေရန် သုံးနိုင်သည်။</translation>
 <translation id="8663480472502753423">Chromium ကို အပ်ဒိတ်ဖြစ်နေစေသည်</translation>
+<translation id="8685813584220679697">ဤဝဘ်ဆိုက်နှင့် Chromium သို့ လက်မှတ်ထိုးဝင်ပါ။</translation>
 <translation id="8747378496147986285">ဖွင့်ထားပါက-
 <ph name="BEGIN_INDENT" />  • သင့်နည်းတူ Chromium သုံးသူများအတွက် ၎င်းပိုကောင်းလာအောင် ကူညီနိုင်သည်။<ph name="END_INDENT" />
 
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_pl.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_pl.xtb
index 7cd26639..570fcdd 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_pl.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_pl.xtb
@@ -120,6 +120,7 @@
 <translation id="8586442755830160949">Copyright <ph name="YEAR" /> Autorzy Chromium. Wszelkie prawa zastrzeżone.</translation>
 <translation id="865600487977764604">Dba o Twoje bezpieczeństwo w Chromium i może też je poprawiać w innych aplikacjach Google, gdy się w nich zalogujesz.</translation>
 <translation id="8663480472502753423">Zawsze używaj aktualnej wersji Chromium</translation>
+<translation id="8685813584220679697">Zaloguj się w na tej stronie i w Chromium.</translation>
 <translation id="8747378496147986285">Po włączeniu:
 <ph name="BEGIN_INDENT" />  • Pomagaj w udoskonalaniu Chromium pod kątem potrzeb użytkowników, którzy korzystają z przeglądarki w taki sam sposób jak Ty.<ph name="END_INDENT" />
 
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_pt-BR.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_pt-BR.xtb
index 0598604..7920b2b7 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_pt-BR.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_pt-BR.xtb
@@ -120,6 +120,7 @@
 <translation id="8586442755830160949">Copyright <ph name="YEAR" /> Autores do Chromium. Todos os direitos reservados.</translation>
 <translation id="865600487977764604">Protege você no Chromium e pode ser usado para melhorar a segurança em outros apps do Google quando sua conta está conectada.</translation>
 <translation id="8663480472502753423">Manter o Chromium atualizado</translation>
+<translation id="8685813584220679697">Faça login neste site e no Chromium.</translation>
 <translation id="8747378496147986285">Quando ativada, essa configuração:
 <ph name="BEGIN_INDENT" />  • ajuda a melhorar o Chromium para as pessoas que o usam da mesma forma que você.<ph name="END_INDENT" />
 
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_it.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_it.xtb
index d0f2a0e6..8eeabcc 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_it.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_it.xtb
@@ -57,6 +57,7 @@
 <translation id="4249068189593983585">Suggerimento per Chrome. Per vedere più opzioni sulla scheda, tocca e tieni premuto il pulsante Mostra schede della barra degli strumenti, che si trova nella parte inferiore o superiore della schermata.</translation>
 <translation id="4523886039239821078">Alcuni componenti aggiuntivi provocano l'arresto anomalo di Chrome. Disinstallali.</translation>
 <translation id="4633328489441962921">Chrome non può controllare la disponibilità di aggiornamenti</translation>
+<translation id="4636900170638246267">Accedi a questo sito e a Chrome.</translation>
 <translation id="4698415050768537821">Chrome non ha potuto controllare tutte le password. Riprova domani oppure <ph name="BEGIN_LINK" />controlla le password nel tuo Account Google<ph name="END_LINK" />.</translation>
 <translation id="4802922164792993118">Suggerimento per Chrome. Accedi più velocemente selezionando la password salvata nella parte superiore della tastiera.</translation>
 <translation id="4819268619367838612">Per contribuire a migliorare l'app, Chrome invia a Google dati sull'utilizzo e sugli arresti anomali. <ph name="BEGIN_LINK" />Gestisci<ph name="END_LINK" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_my.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_my.xtb
index d0153c2..629f2f3 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_my.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_my.xtb
@@ -57,6 +57,7 @@
 <translation id="4249068189593983585">Chrome အကြံပြုချက်။ နောက်ထပ် တဘ်ရွေးချယ်စရာများအတွက် ဖန်သားပြင်၏ အောက်ခြေ သို့မဟုတ် ထိပ်ဘက်ရှိ ကိရိယာဘားအတွင်း 'တဘ်ကို ပြရန်' ခလုတ်ကို တို့၍ဖိထားပါ။</translation>
 <translation id="4523886039239821078">အချို့သော ပေါင်းထည့်မှုများသည့် Chrome ကို ပျက်စီးစေပါသည်။ ကျေးဇူးပြု၍  ပြန်လည်ဖြုတ်ပါ။</translation>
 <translation id="4633328489441962921">Chrome က အပ်ဒိတ်များကို စစ်ဆေး၍မရပါ</translation>
+<translation id="4636900170638246267">ဤဝဘ်ဆိုက်နှင့် Chrome သို့ လက်မှတ်ထိုးဝင်ပါ။</translation>
 <translation id="4698415050768537821">Chrome က စကားဝှက်အားလုံးကို စစ်ဆေး၍မရပါ။ မနက်ဖြန် ထပ်စမ်းကြည့်ပါ သို့မဟုတ် <ph name="BEGIN_LINK" />သင်၏ Google Account ရှိ စကားဝှက်များကို စစ်ဆေးပါ။<ph name="END_LINK" /></translation>
 <translation id="4802922164792993118">Chrome အကြံပြုချက်။ လက်ကွက်ထိပ်ရှိ သင်သိမ်းထားသော စကားဝှက်များကို ရွေးခြင်းဖြင့် ပိုမြန်စွာ လက်မှတ်ထိုးဝင်နိုင်သည်။</translation>
 <translation id="4819268619367838612">အက်ပ်ပိုကောင်းမွန်စေရန် Chrome သည်အသုံးပြုမှုနှင့် ရပ်တန့်မှုဒေတာများကို Google သို့ ပို့သည်။ <ph name="BEGIN_LINK" />စီမံခန့်ခွဲရန်<ph name="END_LINK" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_pl.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_pl.xtb
index 2c4e905..db5f9ae 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_pl.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_pl.xtb
@@ -57,6 +57,7 @@
 <translation id="4249068189593983585">Wskazówka dla użytkowników Chrome. Aby zobaczyć więcej opcji kart, naciśnij i przytrzymaj przycisk Pokaż karty na pasku narzędzi, który znajduje się na dole lub na górze ekranu.</translation>
 <translation id="4523886039239821078">Niektóre dodatki mogą powodować awarie Chrome. Odinstaluj je.</translation>
 <translation id="4633328489441962921">Chrome nie może sprawdzić dostępności aktualizacji</translation>
+<translation id="4636900170638246267">Zaloguj się w na tej stronie i w Chrome.</translation>
 <translation id="4698415050768537821">Przeglądarce Chrome nie udało się sprawdzić wszystkich haseł. Spróbuj ponownie jutro lub <ph name="BEGIN_LINK" />sprawdź hasła na koncie Google<ph name="END_LINK" />.</translation>
 <translation id="4802922164792993118">Wskazówka dotycząca Chrome. Loguj się szybciej, wybierając zapisane hasło w górnej części klawiatury.</translation>
 <translation id="4819268619367838612">Aby pomóc nam ulepszać aplikację, Chrome wysyła do Google dane o użytkowaniu i awariach. <ph name="BEGIN_LINK" />Zarządzaj<ph name="END_LINK" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_pt-BR.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_pt-BR.xtb
index 22eac467..02aa93d 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_pt-BR.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_pt-BR.xtb
@@ -57,6 +57,7 @@
 <translation id="4249068189593983585">Dica do Chrome. Para ver mais opções de guia, toque no botão "Mostrar guias" na barra de ferramentas localizada na parte superior ou inferior da tela e mantenha-o pressionado.</translation>
 <translation id="4523886039239821078">Alguns complementos causam a falha do Google Chrome. Desinstale-os.</translation>
 <translation id="4633328489441962921">Não é possível verificar se há atualizações</translation>
+<translation id="4636900170638246267">Faça login neste site e no Chrome.</translation>
 <translation id="4698415050768537821">Não foi possível verificar todas as senhas com o Chrome. Tente novamente amanhã ou <ph name="BEGIN_LINK" />verifique-as na sua Conta do Google<ph name="END_LINK" />.</translation>
 <translation id="4802922164792993118">Dica do Chrome: para fazer login mais rapidamente, selecione a senha salva na parte de cima do teclado.</translation>
 <translation id="4819268619367838612">Para ajudar a melhorar o app, o Chrome envia dados de uso e de falhas ao Google. <ph name="BEGIN_LINK" />Gerenciar<ph name="END_LINK" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_am.xtb b/ios/chrome/app/strings/resources/ios_strings_am.xtb
index d6de2ce7..3ed9085 100644
--- a/ios/chrome/app/strings/resources/ios_strings_am.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_am.xtb
@@ -329,6 +329,7 @@
 <translation id="3775743491439407556">ስምረት እየሰራ አይደለም</translation>
 <translation id="3779810277399252432">ምንም የበይነመረብ ግንኙነት የለም።</translation>
 <translation id="3783017676699494206">ምስሉን አስቀምጥ</translation>
+<translation id="3789294999358192700">ከታች ያሉትን እርምጃዎች ይከተሉ፦</translation>
 <translation id="3789841737615482174">ጫን  </translation>
 <translation id="380329542618494757">ስም</translation>
 <translation id="3803696231112616155">ወደዚህ ጣቢያ ለመተርጎም ሐሳብ ያቅርቡ</translation>
@@ -941,6 +942,7 @@
 <translation id="8870413625673593573">በቅርብ ጊዜ የተዘጉ</translation>
 <translation id="8876882697946675716">መሳሪያዎችዎን በስምረት ላይ ያቆዩዋቸው</translation>
 <translation id="8881801611828450202">ይህን ምስል በ<ph name="SEARCH_ENGINE" /> ውስጥ ፈልግ</translation>
+<translation id="8891935667620843985">Chromeን የእርስዎ ነባሪ አሳሽ መተግበሪያ በማድረግ አገናኞችን በራስ-ሰር መክፈት ይችላሉ።</translation>
 <translation id="8898822736010347272">አዲስ ስጋቶችን ለማግኘት እንዲያግዝ እና በድር ላይ ያለ ሁሉንም ሰው ለመጠበቅ የጎበኟቸው የአንዳንድ ገጾች ዩአርኤሎችን፣ የተወሰነ የስርዓት መረጃን እና አንዳንድ የገጽ ይዘትን ወደ Google ይልካል።</translation>
 <translation id="8909135823018751308">አጋራ…</translation>
 <translation id="8917490105272468696">አዎ፣ ገብቼያለሁ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_be.xtb b/ios/chrome/app/strings/resources/ios_strings_be.xtb
index 2937fa2..5d648ed 100644
--- a/ios/chrome/app/strings/resources/ios_strings_be.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_be.xtb
@@ -329,6 +329,7 @@
 <translation id="3775743491439407556">Сінхранізацыя не працуе</translation>
 <translation id="3779810277399252432">Няма падключэння да інтэрнэту.</translation>
 <translation id="3783017676699494206">Захаваць відарыс</translation>
+<translation id="3789294999358192700">Выканайце наступныя дзеянні:</translation>
 <translation id="3789841737615482174">Усталяваць</translation>
 <translation id="380329542618494757">Імя</translation>
 <translation id="3803696231112616155">Прапаноўваць перакласці гэты сайт</translation>
@@ -941,6 +942,7 @@
 <translation id="8870413625673593573">Нядаўна закрытыя</translation>
 <translation id="8876882697946675716">Сінхранізуйце свае прылады</translation>
 <translation id="8881801611828450202">Шукаць гэты відарыс праз <ph name="SEARCH_ENGINE" /></translation>
+<translation id="8891935667620843985">Спасылкі будуць аўтаматычна адкрывацца ў Chrome, калі вы зробіце яго стандартным браўзерам.</translation>
 <translation id="8898822736010347272">Адпраўляе URL-адрасы некаторых наведаных вамі старонак, пэўную сістэмную інфармацыю і фрагменты змесціва старонак у сэрвісы Google, каб дапамагаць выяўляць новыя кіберпагрозы і абараняць усіх у інтэрнэце.</translation>
 <translation id="8909135823018751308">Абагуліць…</translation>
 <translation id="8917490105272468696">Так, я згаджаюся</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_de.xtb b/ios/chrome/app/strings/resources/ios_strings_de.xtb
index 35023a5..5acfc9c 100644
--- a/ios/chrome/app/strings/resources/ios_strings_de.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_de.xtb
@@ -329,6 +329,7 @@
 <translation id="3775743491439407556">Synchronisierung funktioniert nicht</translation>
 <translation id="3779810277399252432">Keine Internetverbindung</translation>
 <translation id="3783017676699494206">Bild speichern</translation>
+<translation id="3789294999358192700">Gehe dazu so vor:</translation>
 <translation id="3789841737615482174">Installieren</translation>
 <translation id="380329542618494757">Name</translation>
 <translation id="3803696231112616155">Übersetzung für diese Seite anbieten</translation>
@@ -941,6 +942,7 @@
 <translation id="8870413625673593573">Kürzlich geschlossen</translation>
 <translation id="8876882697946675716">Alle Geräte immer synchronisiert</translation>
 <translation id="8881801611828450202">In <ph name="SEARCH_ENGINE" /> nach dem Bild suchen</translation>
+<translation id="8891935667620843985">Wenn du Chrome als Standard-Browser-App festlegst, werden Links automatisch dort geöffnet.</translation>
 <translation id="8898822736010347272">URLs einiger von dir besuchter Seiten, eingeschränkte Systemdaten und manche Seiteninhalte werden an Google gesendet, um die Erkennung neuer Bedrohungen zu verbessern und Nutzer im Internet zu schützen.</translation>
 <translation id="8909135823018751308">Teilen...</translation>
 <translation id="8917490105272468696">Ja, bitte</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb b/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb
index 5aed6aa..eef482d 100644
--- a/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb
@@ -477,7 +477,7 @@
 <translation id="498985224078955265">To send this tab to another device, sign in to Chrome on both devices.</translation>
 <translation id="5005498671520578047">Copy password</translation>
 <translation id="5017828934289857214">Remind me later</translation>
-<translation id="5037676449506322593">Select all</translation>
+<translation id="5037676449506322593">Select All</translation>
 <translation id="5039804452771397117">Allow</translation>
 <translation id="5056446788882570708">Issues found <ph name="TIME" />.</translation>
 <translation id="5059136629401106827">OK</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_et.xtb b/ios/chrome/app/strings/resources/ios_strings_et.xtb
index 2033128..31f0fcc 100644
--- a/ios/chrome/app/strings/resources/ios_strings_et.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_et.xtb
@@ -329,6 +329,7 @@
 <translation id="3775743491439407556">Sünkroonimine ei tööta</translation>
 <translation id="3779810277399252432">Interneti-ühendus puudub.</translation>
 <translation id="3783017676699494206">Salvesta kujutis</translation>
+<translation id="3789294999358192700">Järgige allolevaid juhiseid.</translation>
 <translation id="3789841737615482174">Installi</translation>
 <translation id="380329542618494757">Nimi</translation>
 <translation id="3803696231112616155">Selle saidi tõlkimise pakkumine</translation>
@@ -941,6 +942,7 @@
 <translation id="8870413625673593573">Viimati suletud</translation>
 <translation id="8876882697946675716">Hoidke oma seadmed sünkroonituna</translation>
 <translation id="8881801611828450202">Otsi pilti teenusest <ph name="SEARCH_ENGINE" /></translation>
+<translation id="8891935667620843985">Saate Chrome'is linke avada automaatselt, muutes selle oma vaikebrauserirakenduseks.</translation>
 <translation id="8898822736010347272">Saadab mõne teie külastatud lehe URL-i, piiratud süsteemiteabe ja mõne lehe sisu Google'ile, et aidata avastada uusi ohte ja veebis kõiki kaitsta.</translation>
 <translation id="8909135823018751308">Jaga ...</translation>
 <translation id="8917490105272468696">Jah, olen nõus</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_eu.xtb b/ios/chrome/app/strings/resources/ios_strings_eu.xtb
index 45d95ac..abb3791 100644
--- a/ios/chrome/app/strings/resources/ios_strings_eu.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_eu.xtb
@@ -329,6 +329,7 @@
 <translation id="3775743491439407556">Sinkronizazioa ez dabil</translation>
 <translation id="3779810277399252432">Ez zaude konektatuta Internetera.</translation>
 <translation id="3783017676699494206">Gorde irudia</translation>
+<translation id="3789294999358192700">Egin urrats hauek:</translation>
 <translation id="3789841737615482174">Instalatu</translation>
 <translation id="380329542618494757">Izena</translation>
 <translation id="3803696231112616155">Eskaini webgunea itzultzea</translation>
@@ -941,6 +942,7 @@
 <translation id="8870413625673593573">Itxitako azkenak</translation>
 <translation id="8876882697946675716">Mantendu gailuak sinkronizatuta</translation>
 <translation id="8881801611828450202">Bilatu irudia <ph name="SEARCH_ENGINE" /> bilatzailean</translation>
+<translation id="8891935667620843985">Ezarri Chrome arakatzaile lehenetsi gisa eta ireki estekak bertan automatikoki.</translation>
 <translation id="8898822736010347272">Erabiltzen dituzun orri batzuen URLak, sistemari buruzko informazio mugatua eta orrietako eduki batzuk bidaltzen dizkio Google-ri mehatxuak aurkitzeko eta sarearen erabiltzaile guztiak babesteko.</translation>
 <translation id="8909135823018751308">Partekatu…</translation>
 <translation id="8917490105272468696">Bai, ados</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fi.xtb b/ios/chrome/app/strings/resources/ios_strings_fi.xtb
index af97725..829b810 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fi.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fi.xtb
@@ -329,6 +329,7 @@
 <translation id="3775743491439407556">Synkronointi ei toimi</translation>
 <translation id="3779810277399252432">Ei internetyhteyttä</translation>
 <translation id="3783017676699494206">Tallenna kuva</translation>
+<translation id="3789294999358192700">Tee näin:</translation>
 <translation id="3789841737615482174">Asenna</translation>
 <translation id="380329542618494757">Nimi</translation>
 <translation id="3803696231112616155">Tarjoa tämän sivuston kääntämistä</translation>
@@ -941,6 +942,7 @@
 <translation id="8870413625673593573">Hiljattain suljetut</translation>
 <translation id="8876882697946675716">Pidä laitteesi synkronoituina</translation>
 <translation id="8881801611828450202">Hae kuvaa seuraavasta palvelusta: <ph name="SEARCH_ENGINE" /></translation>
+<translation id="8891935667620843985">Voit avata linkkejä Chromessa automaattisesti tekemällä siitä oletusselainsovelluksesi.</translation>
 <translation id="8898822736010347272">Lähettää Googlelle joidenkin vierailemiesi sivujen URL-osoitteita, rajallisia järjestelmätietoja ja osia sivujen sisällöstä auttaakseen löytämään uusia uhkia ja suojaamaan kaikkia verkon käyttäjiä.</translation>
 <translation id="8909135823018751308">Jaa…</translation>
 <translation id="8917490105272468696">Kyllä</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_gu.xtb b/ios/chrome/app/strings/resources/ios_strings_gu.xtb
index 16b5b81..16b5815c 100644
--- a/ios/chrome/app/strings/resources/ios_strings_gu.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_gu.xtb
@@ -329,6 +329,7 @@
 <translation id="3775743491439407556">સિંક કાર્ય કરી રહ્યું નથી</translation>
 <translation id="3779810277399252432">કોઈ ઇન્ટરનેટ કનેક્શન નથી.</translation>
 <translation id="3783017676699494206">ફોટા સાચવો</translation>
+<translation id="3789294999358192700">નીચેના પગલાં અનુસરો:</translation>
 <translation id="3789841737615482174">ઇન્સ્ટોલ કરો</translation>
 <translation id="380329542618494757">નામ</translation>
 <translation id="3803696231112616155">આ સાઇટનો અનુવાદ કરવાનું કહો</translation>
@@ -941,6 +942,7 @@
 <translation id="8870413625673593573">તાજેતરમાં બંધ કરેલા</translation>
 <translation id="8876882697946675716">તમારા ડિવાઇસને સિંક કરેલું રાખો</translation>
 <translation id="8881801611828450202"><ph name="SEARCH_ENGINE" /> પર આ છબી શોધો</translation>
+<translation id="8891935667620843985">તમે Chromeને તમારી ડિફૉલ્ટ બ્રાઉઝર ઍપ બનાવીને ઑટોમૅટિક રીતે તેમાં લિંક ખોલી શકો છો.</translation>
 <translation id="8898822736010347272">વેબ પરના નવા જોખમો શોધી કાઢવા અને દરેક વ્યક્તિની સુરક્ષિતતામાં સહાય કરવા માટે, તમે મુલાકાત લેતા અમુક પેજના URLs, સિસ્ટમની મર્યાદિત માહિતી અને પેજનું અમુક કન્ટેન્ટ Googleને મોકલે છે.</translation>
 <translation id="8909135823018751308">શેર કરો…</translation>
 <translation id="8917490105272468696">હા, હું સંમત છું</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_it.xtb b/ios/chrome/app/strings/resources/ios_strings_it.xtb
index 575a2cd..7d9c0ae 100644
--- a/ios/chrome/app/strings/resources/ios_strings_it.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_it.xtb
@@ -474,6 +474,7 @@
 <translation id="4979397965658815378">Accedi con il tuo Account Google per avere preferiti, password, cronologia e altre impostazioni su tutti i tuoi dispositivi</translation>
 <translation id="4986678885919050584">Rimuovi da questo dispositivo</translation>
 <translation id="4989542687859782284">Non disponibili</translation>
+<translation id="498985224078955265">Per inviare questa scheda a un altro dispositivo, accedi a Chrome su entrambi i dispositivi.</translation>
 <translation id="5005498671520578047">Copia password</translation>
 <translation id="5017828934289857214">Ricordamelo dopo</translation>
 <translation id="5037676449506322593">Seleziona tutto</translation>
@@ -525,6 +526,7 @@
 <translation id="5489208564673669003">Per gestire i cookie per tutti i siti, vedi le <ph name="BEGIN_LINK" />Impostazioni dei cookie<ph name="END_LINK" />.</translation>
 <translation id="5490005495580364134">Blocca tutti i cookie (opzione non consigliata)</translation>
 <translation id="5513681519188741830"><ph name="TIME" /> h fa</translation>
+<translation id="5525095647255982834">Per inviare questa scheda a un altro dispositivo, accedi a Chrome su quel dispositivo.</translation>
 <translation id="5525269841082836315">Crea passphrase</translation>
 <translation id="5542540507657872337">Schede trovate: <ph name="COUNT" /></translation>
 <translation id="5548760955356983418">Handoff ti consente di iniziare a consultare un sito web su questo dispositivo per poi continuare facilmente sul Mac. Il sito web attualmente aperto verrà visualizzato nel Dock sul Mac.
diff --git a/ios/chrome/app/strings/resources/ios_strings_ky.xtb b/ios/chrome/app/strings/resources/ios_strings_ky.xtb
index 6263105..36575880a 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ky.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ky.xtb
@@ -329,6 +329,7 @@
 <translation id="3775743491439407556">Шайкештирүү иштебей жатат</translation>
 <translation id="3779810277399252432">Интернет жок.</translation>
 <translation id="3783017676699494206">Сүрөттү сактоо</translation>
+<translation id="3789294999358192700">Төмөнкү кадамдарды аткарыңыз:</translation>
 <translation id="3789841737615482174">Орнотуу</translation>
 <translation id="380329542618494757">Ата-жөнү</translation>
 <translation id="3803696231112616155">Бул сайтты которууну сунуштоо</translation>
@@ -941,6 +942,7 @@
 <translation id="8870413625673593573">Жакында жабылган</translation>
 <translation id="8876882697946675716">Түзмөктөрүңүздү шайкештириңиз</translation>
 <translation id="8881801611828450202">Бул сүрөттү <ph name="SEARCH_ENGINE" /> издөө каражатынан издөө</translation>
+<translation id="8891935667620843985">Chrome'ду демейки серепчиңиз кылып алып, шилтемелерди автоматтык түрдө ачыңыз.</translation>
 <translation id="8898822736010347272">Сиз баш баккан айрым барактардын URL даректерин, чектелген тутум маалыматын жана айрым барактардын мазмунун бардык колдонуучулар үчүн мүмкүн болгон коркунучтарды аныктап, бөгөттөө үчүн Google'га жөнөтөт.</translation>
 <translation id="8909135823018751308">Бөлүшүү…</translation>
 <translation id="8917490105272468696">Ооба, мен макулмун</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_mr.xtb b/ios/chrome/app/strings/resources/ios_strings_mr.xtb
index 234fb9ce4..a9ee5b3 100644
--- a/ios/chrome/app/strings/resources/ios_strings_mr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_mr.xtb
@@ -329,6 +329,7 @@
 <translation id="3775743491439407556">सिंक काम करत नाही</translation>
 <translation id="3779810277399252432">कोणतेही इंटरनेट कनेक्शन नाही.</translation>
 <translation id="3783017676699494206">इमेज सेव्ह करा</translation>
+<translation id="3789294999358192700">खालील पायर्‍या फॉलो करा:</translation>
 <translation id="3789841737615482174">स्थापना करा</translation>
 <translation id="380329542618494757">नाव</translation>
 <translation id="3803696231112616155">ही साइट भाषांतरित करण्यासाठी ऑफर</translation>
@@ -943,6 +944,7 @@
 <translation id="8870413625673593573">अलीकडे बंद</translation>
 <translation id="8876882697946675716">तुमची डिव्हाइस सिंकमध्ये ठेवा</translation>
 <translation id="8881801611828450202">या इमेजसाठी <ph name="SEARCH_ENGINE" /> शोधा</translation>
+<translation id="8891935667620843985">तुम्ही Chrome ला तुमचे डीफॉल्ट ब्राउझर अ‍ॅप सेट करून त्यामध्ये आपोआप लिंक उघडू शकता.</translation>
 <translation id="8898822736010347272">नवीन धोके शोधण्यात आणि वेबवरील प्रत्येकाचे संरक्षण करण्यात मदत करण्यासाठी, तुम्ही भेट देत असलेल्या काही पेजच्या URL, मर्यादित सिस्टम माहिती आणि काही पेज आशय Google ला पाठवते.</translation>
 <translation id="8909135823018751308">शेअर करा...</translation>
 <translation id="8917490105272468696">होय, मला मान्य आहे</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_my.xtb b/ios/chrome/app/strings/resources/ios_strings_my.xtb
index ce20e56..29856bd2 100644
--- a/ios/chrome/app/strings/resources/ios_strings_my.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_my.xtb
@@ -474,6 +474,7 @@
 <translation id="4979397965658815378">သင့်စက်ပစ္စည်းများအားလုံးပေါ်တွင် စာညှပ်များ၊ စကားဝှက်များ၊ မှတ်တမ်းနှင့် အခြားဆက်တင်များ ရယူအသုံးပြုနိုင်ရန် သင့် Google အကောင့်ဖြင့် လက်မှတ်ထိုးဝင်ပါ</translation>
 <translation id="4986678885919050584">ဤ ‘စက်’ မှဖယ်ရှားရန်</translation>
 <translation id="4989542687859782284">မရရှိနိုင်ခြင်း</translation>
+<translation id="498985224078955265">အခြားစက်သို့ ဤတဘ်ကို ပို့ရန် နှစ်စက်လုံးတွင် Chrome သို့ လက်မှတ်ထိုးဝင်ပါ။</translation>
 <translation id="5005498671520578047">စကားဝှက်ကို ကူးယူပါ</translation>
 <translation id="5017828934289857214">နောက်မှ သတိပေးရန်</translation>
 <translation id="5037676449506322593">အားလုံးကို ရွေးရန်</translation>
@@ -525,6 +526,7 @@
 <translation id="5489208564673669003">ဝဘ်ဆိုက်အားလုံးအတွက် ကွတ်ကီးများကို စီမံရန် <ph name="BEGIN_LINK" />ကွတ်ကီးဆက်တင်များ<ph name="END_LINK" /> ကို ကြည့်ပါ။</translation>
 <translation id="5490005495580364134">ကွတ်ကီးအားလုံး ပိတ်ရန် (အကြံမပြုပါ)</translation>
 <translation id="5513681519188741830">ပြီးခဲ့သော <ph name="TIME" /> h</translation>
+<translation id="5525095647255982834">အခြားစက်သို့ ဤတဘ်ကို ပို့ရန် ထိုနေရာတွင် Chrome သို့ လက်မှတ်ထိုးဝင်ပါ။</translation>
 <translation id="5525269841082836315">စကားစုဝှက် ဖန်တီးမည်</translation>
 <translation id="5542540507657872337"><ph name="COUNT" /> ခု တွေ့သည်</translation>
 <translation id="5548760955356983418">Handoff သည် သင့်အားဤကိရိယာပေါ်တွင် ဝက်ဆိုက်ရွေးချယ်ခြင်းကို စတင်ခွင့်ပြုမည်ဖြစ်ပြီး သင့် Mac ပေါ်တွင်လွယ်ကူစွာ ဆက်လက်လုပ်ဆောင်နိုင်ပါသည်။ လက်ရှိဖွင့်ထားသော ဝက်ဆိုက်သည် သင့်Mac၏ အထိုင်ပေါ်တွင် ပေါ်လာပါလိမ့်မည်။
diff --git a/ios/chrome/app/strings/resources/ios_strings_pl.xtb b/ios/chrome/app/strings/resources/ios_strings_pl.xtb
index b34745a..93310f26 100644
--- a/ios/chrome/app/strings/resources/ios_strings_pl.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_pl.xtb
@@ -474,6 +474,7 @@
 <translation id="4979397965658815378">Zaloguj się na konto Google, by korzystać z zakładek, haseł, historii i innych ustawień na wszystkich urządzeniach</translation>
 <translation id="4986678885919050584">Usuń z tego urządzenia</translation>
 <translation id="4989542687859782284">Niedostępne</translation>
+<translation id="498985224078955265">Aby wysłać tę kartę na inne urządzenie, na obu urządzeniach zaloguj się w Chrome.</translation>
 <translation id="5005498671520578047">Skopiuj hasło</translation>
 <translation id="5017828934289857214">Przypomnij mi później</translation>
 <translation id="5037676449506322593">Wybierz wszystko</translation>
@@ -525,6 +526,7 @@
 <translation id="5489208564673669003">Aby zarządzać plikami cookie we wszystkich witrynach, sprawdź <ph name="BEGIN_LINK" />Ustawienia plików cookie<ph name="END_LINK" />.</translation>
 <translation id="5490005495580364134">Blokuj wszystkie pliki cookie (niezalecane)</translation>
 <translation id="5513681519188741830"><ph name="TIME" /> g temu</translation>
+<translation id="5525095647255982834">Aby wysłać tę kartę na inne urządzenie, zaloguj się na nim w Chrome.</translation>
 <translation id="5525269841082836315">Utwórz hasło</translation>
 <translation id="5542540507657872337">Znaleziono <ph name="COUNT" /></translation>
 <translation id="5548760955356983418">Dzięki funkcji Handoff możesz rozpocząć przeglądanie strony na tym urządzeniu, a następnie płynnie kontynuować na Macu. Aktualnie otwarta strona internetowa wyświetli się w Docku na Macu.
diff --git a/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb b/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
index e58660c..ead132f 100644
--- a/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
@@ -329,6 +329,7 @@
 <translation id="3775743491439407556">A sincronização não está funcionando</translation>
 <translation id="3779810277399252432">Sem conexão com a Internet.</translation>
 <translation id="3783017676699494206">Salvar imagem</translation>
+<translation id="3789294999358192700">Siga as etapas abaixo:</translation>
 <translation id="3789841737615482174">Instalar</translation>
 <translation id="380329542618494757">Nome</translation>
 <translation id="3803696231112616155">Oferecer a opção de traduzir esse site</translation>
@@ -473,6 +474,7 @@
 <translation id="4979397965658815378">Faça login com sua Conta do Google para ter seus favoritos, senhas, histórico e outras configurações em todos os seus dispositivos</translation>
 <translation id="4986678885919050584">Remover deste dispositivo</translation>
 <translation id="4989542687859782284">Indisponível</translation>
+<translation id="498985224078955265">Para enviar esta guia a outro dispositivo, faça login no Chrome nos dois aparelhos.</translation>
 <translation id="5005498671520578047">Copiar senha</translation>
 <translation id="5017828934289857214">Lembrar mais tarde</translation>
 <translation id="5037676449506322593">Selecionar tudo</translation>
@@ -524,6 +526,7 @@
 <translation id="5489208564673669003">Para gerenciar os cookies de todos os sites, acesse <ph name="BEGIN_LINK" />Configurações de cookies<ph name="END_LINK" />.</translation>
 <translation id="5490005495580364134">Bloquear todos os cookies (não recomendado)</translation>
 <translation id="5513681519188741830"><ph name="TIME" />h atrás</translation>
+<translation id="5525095647255982834">Para enviar esta guia a outro dispositivo, faça login no Chrome no outro aparelho.</translation>
 <translation id="5525269841082836315">Criar senha</translation>
 <translation id="5542540507657872337">Encontradas: <ph name="COUNT" /></translation>
 <translation id="5548760955356983418">A "Transição" permite que você comece a navegar por um website neste dispositivo e, em seguida, continue facilmente no seu Mac. O website aberto aparecerá no Dock do Mac.
@@ -941,6 +944,7 @@
 <translation id="8870413625673593573">Fechadas recentemente</translation>
 <translation id="8876882697946675716">Manter os dispositivos sincronizados</translation>
 <translation id="8881801611828450202">Pesquisar esta imagem no <ph name="SEARCH_ENGINE" /></translation>
+<translation id="8891935667620843985">Defina o Chrome como seu navegador padrão para abrir links nele automaticamente.</translation>
 <translation id="8898822736010347272">Envia ao Google URLs de algumas páginas que você visita, informações do sistema limitadas e parte do conteúdo das páginas para ajudar a descobrir novas ameaças e proteger todos os usuários na Web.</translation>
 <translation id="8909135823018751308">Compartilhar...</translation>
 <translation id="8917490105272468696">Sim</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb
index a884961..35163462 100644
--- a/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb
@@ -329,6 +329,7 @@
 <translation id="3775743491439407556">同步功能无法正常运行</translation>
 <translation id="3779810277399252432">无互联网连接。</translation>
 <translation id="3783017676699494206">保存图片</translation>
+<translation id="3789294999358192700">请按照以下步骤操作:</translation>
 <translation id="3789841737615482174">安装</translation>
 <translation id="380329542618494757">名称</translation>
 <translation id="3803696231112616155">主动询问是否翻译此网站</translation>
@@ -941,6 +942,7 @@
 <translation id="8870413625673593573">最近关闭的标签页</translation>
 <translation id="8876882697946675716">让您的各部设备保持同步</translation>
 <translation id="8881801611828450202">在 <ph name="SEARCH_ENGINE" /> 中搜索此图片</translation>
+<translation id="8891935667620843985">只需将 Chrome 设为默认浏览器应用,便可自动在 Chrome 中打开链接。</translation>
 <translation id="8898822736010347272">向 Google 发送您访问的部分网页的网址、有限的系统信息以及部分网页内容,以协助我们发现新威胁并保护网络上的所有用户。</translation>
 <translation id="8909135823018751308">分享…</translation>
 <translation id="8917490105272468696">我同意</translation>
diff --git a/ios/chrome/browser/autofill/form_structure_browsertest.mm b/ios/chrome/browser/autofill/form_structure_browsertest.mm
index 24722a4d..279946f 100644
--- a/ios/chrome/browser/autofill/form_structure_browsertest.mm
+++ b/ios/chrome/browser/autofill/form_structure_browsertest.mm
@@ -196,7 +196,9 @@
        // TODO(crbug.com/1277480): Remove once launched.
        autofill::features::kAutofillEnableNameSurenameParsing,
        // TODO(crbug.com/1190334): Remove once launched.
-       autofill::features::kAutofillParseMerchantPromoCodeFields},
+       autofill::features::kAutofillParseMerchantPromoCodeFields,
+       // TODO(crbug.com/1335549): Remove once launched.
+       autofill::features::kAutofillParseIbanFields},
       // Disabled
       {});
 }
diff --git a/ios/chrome/browser/follow/follow_tab_helper.mm b/ios/chrome/browser/follow/follow_tab_helper.mm
index baa4d5f66..6e5d1b6 100644
--- a/ios/chrome/browser/follow/follow_tab_helper.mm
+++ b/ios/chrome/browser/follow/follow_tab_helper.mm
@@ -25,6 +25,7 @@
 #import "ios/chrome/browser/follow/follow_menu_updater.h"
 #import "ios/chrome/browser/follow/follow_util.h"
 #import "ios/chrome/browser/history/history_service_factory.h"
+#import "ios/chrome/browser/system_flags.h"
 #import "ios/chrome/grit/ios_strings.h"
 #import "ios/public/provider/chrome/browser/chrome_browser_provider.h"
 #import "ios/public/provider/chrome/browser/follow/follow_provider.h"
@@ -260,7 +261,9 @@
 void FollowTabHelper::PresentFollowIPH() {
   DCHECK(follow_iph_presenter_);
   [follow_iph_presenter_ presentFollowWhileBrowsingIPH];
-  StoreFollowIPHPresentingTime(recommended_rss_url_);
+  if (!experimental_flags::ShouldAlwaysShowFollowIPH()) {
+    StoreFollowIPHPresentingTime(recommended_rss_url_);
+  }
 }
 
 WEB_STATE_USER_DATA_KEY_IMPL(FollowTabHelper)
diff --git a/ios/chrome/browser/resources/Settings.bundle/Experimental.plist b/ios/chrome/browser/resources/Settings.bundle/Experimental.plist
index 3654d05..652a1ab 100644
--- a/ios/chrome/browser/resources/Settings.bundle/Experimental.plist
+++ b/ios/chrome/browser/resources/Settings.bundle/Experimental.plist
@@ -53,6 +53,16 @@
 			<false/>
 		</dict>
 		<dict>
+			<key>Type</key>
+			<string>PSToggleSwitchSpecifier</string>
+			<key>Title</key>
+			<string>Always show Follow IPH</string>
+			<key>Key</key>
+			<string>AlwaysShowFollowIPH</string>
+			<key>DefaultValue</key>
+			<false/>
+		</dict>
+		<dict>
 			<key>Title</key>
 			<string>Additional Feed Background Refresh Settings</string>
 			<key>Type</key>
diff --git a/ios/chrome/browser/system_flags.h b/ios/chrome/browser/system_flags.h
index 68bc9ad..fb16fb98 100644
--- a/ios/chrome/browser/system_flags.h
+++ b/ios/chrome/browser/system_flags.h
@@ -59,6 +59,11 @@
 // TODO(crbug.com/1312124): Remove after launch.
 bool ShouldAlwaysShowFirstFollow();
 
+// Returns true if the Follow IPH should always be shown when the user
+// browsing a eligible website in non-incognito mode.
+// TODO(crbug.com/1340154): Remove after launch.
+bool ShouldAlwaysShowFollowIPH();
+
 // Returns true if background refresh should also be used for the Following
 // feed. If false, the default value or finch feature flag value should be used.
 bool IsForceBackgroundRefreshForFollowingFeedEnabled();
diff --git a/ios/chrome/browser/system_flags.mm b/ios/chrome/browser/system_flags.mm
index 2e15d6e..2bc2ff5 100644
--- a/ios/chrome/browser/system_flags.mm
+++ b/ios/chrome/browser/system_flags.mm
@@ -92,6 +92,11 @@
       boolForKey:@"AlwaysShowFirstFollow"];
 }
 
+bool ShouldAlwaysShowFollowIPH() {
+  return
+      [[NSUserDefaults standardUserDefaults] boolForKey:@"AlwaysShowFollowIPH"];
+}
+
 bool IsForceBackgroundRefreshForFollowingFeedEnabled() {
   return [[NSUserDefaults standardUserDefaults]
       boolForKey:kForceBackgroundRefreshForFollowingFeedEnabled];
diff --git a/ios/chrome/browser/ui/bubble/BUILD.gn b/ios/chrome/browser/ui/bubble/BUILD.gn
index bc2c340..8a5fdb076 100644
--- a/ios/chrome/browser/ui/bubble/BUILD.gn
+++ b/ios/chrome/browser/ui/bubble/BUILD.gn
@@ -23,6 +23,7 @@
     "//components/feature_engagement/public",
     "//ios/chrome/app/strings",
     "//ios/chrome/browser:chrome_url_constants",
+    "//ios/chrome/browser:utils",
     "//ios/chrome/browser/browser_state",
     "//ios/chrome/browser/feature_engagement",
     "//ios/chrome/browser/follow:utils",
diff --git a/ios/chrome/browser/ui/bubble/bubble_presenter.mm b/ios/chrome/browser/ui/bubble/bubble_presenter.mm
index 1163192f..d6afa0b 100644
--- a/ios/chrome/browser/ui/bubble/bubble_presenter.mm
+++ b/ios/chrome/browser/ui/bubble/bubble_presenter.mm
@@ -15,6 +15,7 @@
 #import "ios/chrome/browser/chrome_url_constants.h"
 #import "ios/chrome/browser/feature_engagement/tracker_factory.h"
 #import "ios/chrome/browser/follow/follow_util.h"
+#import "ios/chrome/browser/system_flags.h"
 #import "ios/chrome/browser/ui/bubble/bubble_presenter_delegate.h"
 #import "ios/chrome/browser/ui/bubble/bubble_util.h"
 #import "ios/chrome/browser/ui/bubble/bubble_view_controller_presenter.h"
@@ -355,8 +356,9 @@
   presenter.voiceOverAnnouncement = voiceOverAnnouncement;
   if ([presenter canPresentInView:self.rootViewController.view
                       anchorPoint:anchorPoint] &&
-      feature_engagement::TrackerFactory::GetForBrowserState(self.browserState)
-          ->ShouldTriggerHelpUI(feature)) {
+      ([self shouldForcePresentBubbleForFeature:feature] ||
+       feature_engagement::TrackerFactory::GetForBrowserState(self.browserState)
+           ->ShouldTriggerHelpUI(feature))) {
     [presenter presentInViewController:self.rootViewController
                                   view:self.rootViewController.view
                            anchorPoint:anchorPoint];
@@ -520,29 +522,30 @@
                 alignment:(BubbleAlignment)alignment
                      text:(NSString*)text {
   DCHECK(self.browserState);
-  if (!feature_engagement::TrackerFactory::GetForBrowserState(self.browserState)
-           ->WouldTriggerHelpUI(feature)) {
-    return nil;
+  if ([self shouldForcePresentBubbleForFeature:feature] ||
+      feature_engagement::TrackerFactory::GetForBrowserState(self.browserState)
+          ->WouldTriggerHelpUI(feature)) {
+    // Capture `weakSelf` instead of the feature engagement tracker object
+    // because `weakSelf` will safely become `nil` if it is deallocated, whereas
+    // the feature engagement tracker will remain pointing to invalid memory if
+    // its owner (the ChromeBrowserState) is deallocated.
+    __weak BubblePresenter* weakSelf = self;
+    ProceduralBlockWithSnoozeAction dismissalCallback =
+        ^(feature_engagement::Tracker::SnoozeAction snoozeAction) {
+          [weakSelf featureDismissed:feature withSnooze:snoozeAction];
+        };
+
+    BubbleViewControllerPresenter* bubbleViewControllerPresenter =
+        [[BubbleViewControllerPresenter alloc]
+            initDefaultBubbleWithText:text
+                       arrowDirection:direction
+                            alignment:alignment
+                 isLongDurationBubble:[self isLongDurationBubble:feature]
+                    dismissalCallback:dismissalCallback];
+
+    return bubbleViewControllerPresenter;
   }
-  // Capture `weakSelf` instead of the feature engagement tracker object
-  // because `weakSelf` will safely become `nil` if it is deallocated, whereas
-  // the feature engagement tracker will remain pointing to invalid memory if
-  // its owner (the ChromeBrowserState) is deallocated.
-  __weak BubblePresenter* weakSelf = self;
-  ProceduralBlockWithSnoozeAction dismissalCallback =
-      ^(feature_engagement::Tracker::SnoozeAction snoozeAction) {
-        [weakSelf featureDismissed:feature withSnooze:snoozeAction];
-      };
-
-  BubbleViewControllerPresenter* bubbleViewControllerPresenter =
-      [[BubbleViewControllerPresenter alloc]
-          initDefaultBubbleWithText:text
-                     arrowDirection:direction
-                          alignment:alignment
-               isLongDurationBubble:[self isLongDurationBubble:feature]
-                  dismissalCallback:dismissalCallback];
-
-  return bubbleViewControllerPresenter;
+  return nil;
 }
 
 - (void)featureDismissed:(const base::Feature&)feature
@@ -561,4 +564,16 @@
          feature_engagement::kIPHFollowWhileBrowsingFeature.name;
 }
 
+// Return YES if the bubble should always be presented. Ex. if force present
+// bubble set by system experimental settings.
+- (BOOL)shouldForcePresentBubbleForFeature:(const base::Feature&)feature {
+  // Always present follow IPH if it's triggered by system experimental
+  // settings.
+  if (feature.name == feature_engagement::kIPHFollowWhileBrowsingFeature.name &&
+      experimental_flags::ShouldAlwaysShowFollowIPH()) {
+    return YES;
+  }
+  return NO;
+}
+
 @end
diff --git a/ios/chrome/browser/ui/ntp/feed_wrapper_view_controller.mm b/ios/chrome/browser/ui/ntp/feed_wrapper_view_controller.mm
index 363fcac..67b0b72 100644
--- a/ios/chrome/browser/ui/ntp/feed_wrapper_view_controller.mm
+++ b/ios/chrome/browser/ui/ntp/feed_wrapper_view_controller.mm
@@ -5,6 +5,7 @@
 #import <UIKit/UIKit.h>
 
 #import "base/check.h"
+#import "ios/chrome/browser/ui/content_suggestions/content_suggestions_feature.h"
 #import "ios/chrome/browser/ui/content_suggestions/ntp_home_constant.h"
 #import "ios/chrome/browser/ui/ntp/feed_wrapper_view_controller.h"
 #import "ios/chrome/common/ui/util/constraints_ui_util.h"
@@ -77,7 +78,10 @@
   [emptyCollectionView setShowsVerticalScrollIndicator:NO];
   [self.view addSubview:emptyCollectionView];
   self.contentCollectionView = emptyCollectionView;
-  self.contentCollectionView.backgroundColor = ntp_home::kNTPBackgroundColor();
+  self.contentCollectionView.backgroundColor =
+      IsContentSuggestionsUIModuleRefreshEnabled()
+          ? [UIColor clearColor]
+          : ntp_home::kNTPBackgroundColor();
   self.contentCollectionView.translatesAutoresizingMaskIntoConstraints = NO;
   AddSameConstraints(self.contentCollectionView, self.view);
 }
diff --git a/net/base/features.cc b/net/base/features.cc
index 3f22b5d..1bbad8e3 100644
--- a/net/base/features.cc
+++ b/net/base/features.cc
@@ -150,6 +150,10 @@
     "PartitionNelAndReportingByNetworkIsolationKey",
     base::FEATURE_DISABLED_BY_DEFAULT};
 
+const base::Feature kEnableDoubleKeyNetworkAnonymizationKey{
+    "EnableDoubleKeyNetworkAnonymizationKey",
+    base::FEATURE_DISABLED_BY_DEFAULT};
+
 const base::Feature kExpectCTPruning{"ExpectCTPruning",
                                      base::FEATURE_ENABLED_BY_DEFAULT};
 
diff --git a/net/base/features.h b/net/base/features.h
index db0ee1f..e8141f61 100644
--- a/net/base/features.h
+++ b/net/base/features.h
@@ -238,6 +238,12 @@
 NET_EXPORT extern const base::Feature
     kPartitionNelAndReportingByNetworkIsolationKey;
 
+// Creates a double keyed NetworkAnonymizationKey which is used to partition the
+// network state. This double key will have the following properties:
+// `top_frame_site` -> the schemeful site of the top level page.
+// `frame_site ` -> nullopt
+NET_EXPORT extern const base::Feature kEnableDoubleKeyNetworkAnonymizationKey;
+
 // Enables limiting the size of Expect-CT table.
 NET_EXPORT extern const base::Feature kExpectCTPruning;
 
diff --git a/net/base/network_anonymization_key.cc b/net/base/network_anonymization_key.cc
index 14e8e79..495009e 100644
--- a/net/base/network_anonymization_key.cc
+++ b/net/base/network_anonymization_key.cc
@@ -2,7 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 #include "net/base/network_anonymization_key.h"
+#include "base/feature_list.h"
 #include "base/unguessable_token.h"
+#include "net/base/features.h"
 #include "net/base/net_export.h"
 #include "net/base/schemeful_site.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
@@ -15,7 +17,7 @@
     bool is_cross_site,
     const absl::optional<base::UnguessableToken> nonce)
     : top_frame_site_(top_frame_site),
-      frame_site_(frame_site),
+      frame_site_(IsDoubleKeyingEnabled() ? absl::nullopt : frame_site),
       is_cross_site_(is_cross_site),
       nonce_(nonce) {}
 
@@ -53,20 +55,24 @@
 }
 
 bool NetworkAnonymizationKey::IsFullyPopulated() const {
-  // TODO @brgoldstein if NAK is a double key the key is fully populated if
-  // top_frame_site_ has value.
-  return top_frame_site_.has_value() && frame_site_.has_value();
+  return top_frame_site_.has_value() &&
+         (IsDoubleKeyingEnabled() || frame_site_.has_value());
 }
 
 bool NetworkAnonymizationKey::IsTransient() const {
   if (!IsFullyPopulated())
     return true;
-  // TODO @brgoldstein if NAK is a double key do not check if frame_site_ is
-  // opaque.
-  return top_frame_site_->opaque() || frame_site_->opaque() ||
+
+  return top_frame_site_->opaque() ||
+         (!IsDoubleKeyingEnabled() && frame_site_->opaque()) ||
          nonce_.has_value();
 }
 
+bool NetworkAnonymizationKey::IsDoubleKeyingEnabled() {
+  return base::FeatureList::IsEnabled(
+      net::features::kEnableDoubleKeyNetworkAnonymizationKey);
+}
+
 std::string NetworkAnonymizationKey::GetSiteDebugString(
     const absl::optional<SchemefulSite>& site) const {
   return site ? site->GetDebugString() : "null";
diff --git a/net/base/network_anonymization_key.h b/net/base/network_anonymization_key.h
index 155c652..a9610b9 100644
--- a/net/base/network_anonymization_key.h
+++ b/net/base/network_anonymization_key.h
@@ -130,6 +130,12 @@
     return nonce_;
   }
 
+  // Returns true if the NetworkAnonymizationKey has a double keyed scheme. This
+  // means the values of the NetworkAnonymizationKey are as follows:
+  // `top_frame_site` -> the schemeful site of the top level page.
+  // `frame_site ` -> nullopt
+  static bool IsDoubleKeyingEnabled();
+
  private:
   std::string GetSiteDebugString(
       const absl::optional<SchemefulSite>& site) const;
diff --git a/net/base/network_anonymization_key_unittest.cc b/net/base/network_anonymization_key_unittest.cc
index 69b3ac6d..b96950f 100644
--- a/net/base/network_anonymization_key_unittest.cc
+++ b/net/base/network_anonymization_key_unittest.cc
@@ -4,8 +4,10 @@
 
 #include "net/base/network_anonymization_key.h"
 
+#include "base/test/scoped_feature_list.h"
 #include "base/unguessable_token.h"
 #include "base/values.h"
+#include "net/base/features.h"
 #include "net/base/schemeful_site.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
@@ -14,24 +16,44 @@
 
 namespace net {
 
-namespace {
-const SchemefulSite kTestSiteA = SchemefulSite(GURL("http://a.test/"));
-const SchemefulSite kTestSiteB = SchemefulSite(GURL("http://b.test/"));
-const SchemefulSite kDataSite = SchemefulSite(GURL("data:foo"));
-const SchemefulSite kEmptySite;
-const base::UnguessableToken kNonce = base::UnguessableToken::Create();
-}  // namespace
-
-class NetworkAnonymizationKeyTest : public testing::Test {
+class NetworkAnonymizationKeyTest : public testing::Test,
+                                    public testing::WithParamInterface<bool> {
  public:
-  NetworkAnonymizationKeyTest() = default;
-  NetworkAnonymizationKeyTest(const NetworkAnonymizationKeyTest&) = delete;
-  NetworkAnonymizationKeyTest& operator=(const NetworkAnonymizationKeyTest&) =
-      delete;
-  ~NetworkAnonymizationKeyTest() override = default;
+  void SetUp() override {
+    if (IsDoubleKeyEnabled()) {
+      scoped_feature_list_.InitAndEnableFeature(
+          net::features::kEnableDoubleKeyNetworkAnonymizationKey);
+    } else {
+      scoped_feature_list_.InitAndDisableFeature(
+          net::features::kEnableDoubleKeyNetworkAnonymizationKey);
+    }
+  }
+  static bool IsDoubleKeyEnabled() { return GetParam(); }
+
+ protected:
+  const SchemefulSite kTestSiteA = SchemefulSite(GURL("http://a.test/"));
+  const SchemefulSite kTestSiteB = SchemefulSite(GURL("http://b.test/"));
+  const SchemefulSite kDataSite = SchemefulSite(GURL("data:foo"));
+  const base::UnguessableToken kNonce = base::UnguessableToken::Create();
+
+ private:
+  base::test::ScopedFeatureList scoped_feature_list_;
 };
 
-TEST_F(NetworkAnonymizationKeyTest, IsEmpty) {
+INSTANTIATE_TEST_SUITE_P(
+    All,
+    NetworkAnonymizationKeyTest,
+    /*kEnableDoubleKeyNetworkAnonymizationKey*/ testing::Bool());
+
+TEST_P(NetworkAnonymizationKeyTest, IsDoubleKeyingEnabled) {
+  if (IsDoubleKeyEnabled()) {
+    EXPECT_TRUE(NetworkAnonymizationKey::IsDoubleKeyingEnabled());
+  } else {
+    EXPECT_FALSE(NetworkAnonymizationKey::IsDoubleKeyingEnabled());
+  }
+}
+
+TEST_P(NetworkAnonymizationKeyTest, IsEmpty) {
   NetworkAnonymizationKey empty_key;
   NetworkAnonymizationKey populated_key(/*top_frame_site=*/kTestSiteA,
                                         /*frame_site=*/kTestSiteB,
@@ -42,16 +64,12 @@
   EXPECT_FALSE(populated_key.IsEmpty());
 }
 
-TEST_F(NetworkAnonymizationKeyTest, IsTransient) {
+TEST_P(NetworkAnonymizationKeyTest, IsTransient) {
   NetworkAnonymizationKey empty_key;
   NetworkAnonymizationKey populated_key(/*top_frame_site=*/kTestSiteA,
                                         /*frame_site=*/kTestSiteB,
                                         /*is_cross_site=*/false,
                                         /*nonce=*/absl::nullopt);
-  NetworkAnonymizationKey data_frame_key(/*top_frame_site=*/kTestSiteA,
-                                         /*frame_site=*/kDataSite,
-                                         /*is_cross_site=*/false,
-                                         /*nonce=*/absl::nullopt);
   NetworkAnonymizationKey data_top_frame_key(/*top_frame_site=*/kDataSite,
                                              /*frame_site=*/kTestSiteB,
                                              /*is_cross_site=*/false,
@@ -59,57 +77,88 @@
   NetworkAnonymizationKey populated_key_with_nonce(
       /*top_frame_site=*/kTestSiteA, /*frame_site=*/kTestSiteB,
       /*is_cross_site*/ false, base::UnguessableToken::Create());
+  NetworkAnonymizationKey data_frame_key(/*top_frame_site=*/kTestSiteA,
+                                         /*frame_site=*/kDataSite,
+                                         /*is_cross_site=*/false,
+                                         /*nonce=*/absl::nullopt);
+  NetworkAnonymizationKey populated_double_key(/*top_frame_site=*/kTestSiteA,
+                                               /*frame_site=*/absl::nullopt,
+                                               /*is_cross_site=*/false,
+                                               /*nonce=*/absl::nullopt);
 
   EXPECT_TRUE(empty_key.IsTransient());
   EXPECT_FALSE(populated_key.IsTransient());
-  EXPECT_TRUE(data_frame_key.IsTransient());
+  EXPECT_TRUE(data_top_frame_key.IsTransient());
   EXPECT_TRUE(data_top_frame_key.IsTransient());
   EXPECT_TRUE(populated_key_with_nonce.IsTransient());
+
+  if (IsDoubleKeyEnabled()) {
+    EXPECT_FALSE(data_frame_key.IsTransient());
+    EXPECT_FALSE(populated_double_key.IsTransient());
+  } else {
+    EXPECT_TRUE(data_frame_key.IsTransient());
+    EXPECT_TRUE(populated_double_key.IsTransient());
+  }
 }
 
-TEST_F(NetworkAnonymizationKeyTest, IsFullyPopulated) {
+TEST_P(NetworkAnonymizationKeyTest, IsFullyPopulated) {
   NetworkAnonymizationKey empty_key;
   NetworkAnonymizationKey populated_key(/*top_frame_site=*/kTestSiteA,
                                         /*frame_site=*/kTestSiteB,
                                         /*is_cross_site=*/false,
                                         /*nonce=*/absl::nullopt);
   NetworkAnonymizationKey empty_frame_site_key(/*top_frame_site=*/kTestSiteA,
-                                               /*frame_site=*/kEmptySite,
+                                               /*frame_site=*/absl::nullopt,
                                                /*is_cross_site=*/false,
                                                /*nonce=*/absl::nullopt);
-
   EXPECT_TRUE(populated_key.IsFullyPopulated());
   EXPECT_FALSE(empty_key.IsFullyPopulated());
+  if (IsDoubleKeyEnabled()) {
+    EXPECT_TRUE(empty_frame_site_key.IsFullyPopulated());
+  } else {
+    EXPECT_FALSE(empty_frame_site_key.IsFullyPopulated());
+  }
 }
 
-TEST_F(NetworkAnonymizationKeyTest, Getters) {
+TEST_P(NetworkAnonymizationKeyTest, Getters) {
   NetworkAnonymizationKey key(/*top_frame_site=*/kTestSiteA,
                               /*frame_site=*/kTestSiteB,
                               /*is_cross_site=*/true, kNonce);
 
   EXPECT_EQ(key.GetTopFrameSite(), kTestSiteA);
-  EXPECT_EQ(key.GetFrameSite(), kTestSiteB);
   EXPECT_TRUE(key.GetIsCrossSite());
   EXPECT_EQ(key.GetNonce(), kNonce);
+  if (IsDoubleKeyEnabled()) {
+    EXPECT_EQ(key.GetFrameSite(), absl::nullopt);
+  } else {
+    EXPECT_EQ(key.GetFrameSite(), kTestSiteB);
+  }
 }
 
-TEST_F(NetworkAnonymizationKeyTest, ToDebugString) {
+TEST_P(NetworkAnonymizationKeyTest, ToDebugString) {
   NetworkAnonymizationKey key(/*top_frame_site=*/kTestSiteA,
                               /*frame_site=*/kTestSiteB,
                               /*is_cross_site=*/true, kNonce);
   NetworkAnonymizationKey empty_key;
 
-  std::string key_expected_string_value =
-      kTestSiteA.GetDebugString() + " " + kTestSiteB.GetDebugString() +
-      " cross_site (with nonce " + kNonce.ToString() + ")";
-  EXPECT_EQ(key.ToDebugString(), key_expected_string_value);
+  if (IsDoubleKeyEnabled()) {
+    std::string double_key_expected_string_value =
+        kTestSiteA.GetDebugString() + " null" + " cross_site (with nonce " +
+        kNonce.ToString() + ")";
+    EXPECT_EQ(key.ToDebugString(), double_key_expected_string_value);
+  } else {
+    std::string key_expected_string_value =
+        kTestSiteA.GetDebugString() + " " + kTestSiteB.GetDebugString() +
+        " cross_site (with nonce " + kNonce.ToString() + ")";
+    EXPECT_EQ(key.ToDebugString(), key_expected_string_value);
+  }
 
-  // The default NAK should have no nonce and be same_site (is_cross_site =
-  // false).
+  // By default, an empty NAK should have no nonce and be same_site
+  // (is_cross_site = false).
   EXPECT_EQ(empty_key.ToDebugString(), "null null same_site");
 }
 
-TEST_F(NetworkAnonymizationKeyTest, Equality) {
+TEST_P(NetworkAnonymizationKeyTest, Equality) {
   NetworkAnonymizationKey key(/*top_frame_site=*/kTestSiteA,
                               /*frame_site=*/kTestSiteB,
                               /*is_cross_site=*/false, kNonce);
@@ -146,8 +195,14 @@
   NetworkAnonymizationKey key_different_frame_site(
       /*top_frame_site=*/kTestSiteA, /*frame_site=*/kTestSiteA,
       /*is_cross_site=*/false, kNonce);
-  EXPECT_FALSE(key == key_different_frame_site);
-  EXPECT_TRUE(key != key_different_frame_site);
+
+  if (IsDoubleKeyEnabled()) {
+    EXPECT_TRUE(key == key_different_frame_site);
+    EXPECT_FALSE(key != key_different_frame_site);
+  } else {
+    EXPECT_FALSE(key == key_different_frame_site);
+    EXPECT_TRUE(key != key_different_frame_site);
+  }
   EXPECT_FALSE(key < key_different_frame_site);
 
   NetworkAnonymizationKey key_different_top_level_site(
diff --git a/net/http/http_cache.cc b/net/http/http_cache.cc
index de612274..999fafe 100644
--- a/net/http/http_cache.cc
+++ b/net/http/http_cache.cc
@@ -130,9 +130,7 @@
   DCHECK(disk_entry);
 }
 
-HttpCache::ActiveEntry::~ActiveEntry() {
-  disk_entry->Close();
-}
+HttpCache::ActiveEntry::~ActiveEntry() = default;
 
 bool HttpCache::ActiveEntry::HasNoTransactions() {
   return (!writers || writers->IsEmpty()) && readers.empty() &&
@@ -685,7 +683,7 @@
   DCHECK_EQ(0u, doomed_entries_.count(entry_ptr));
   doomed_entries_[entry_ptr] = std::move(entry);
 
-  entry_ptr->disk_entry->Doom();
+  entry_ptr->GetEntry()->Doom();
   entry_ptr->doomed = true;
 
   DCHECK(!entry_ptr->SafeToDestroy());
@@ -770,7 +768,7 @@
   DCHECK(!entry->doomed);
   DCHECK(entry->SafeToDestroy());
 
-  std::string key = entry->disk_entry->GetKey();
+  std::string key = entry->GetEntry()->GetKey();
   if (key.empty())
     return SlowDeactivateEntry(entry);
 
@@ -918,7 +916,7 @@
 int HttpCache::AddTransactionToEntry(ActiveEntry* entry,
                                      Transaction* transaction) {
   DCHECK(entry);
-  DCHECK(entry->disk_entry);
+  DCHECK(entry->GetEntry());
   // Always add a new transaction to the queue to maintain FIFO order.
   entry->add_to_entry_queue.push_back(transaction);
   ProcessQueuedTransactions(entry);
@@ -964,7 +962,7 @@
   bool is_mode_read_only = transaction->mode() == Transaction::READ;
 
   if (!entry_is_complete && !is_mode_read_only && is_partial)
-    entry->disk_entry->CancelSparseIO();
+    entry->GetEntry()->CancelSparseIO();
 
   // Transaction is waiting in the done_headers_queue.
   auto it = std::find(entry->done_headers_queue.begin(),
@@ -1061,12 +1059,12 @@
 
   entry->headers_transaction = nullptr;
   if (entry->SafeToDestroy()) {
-    entry->disk_entry->Doom();
+    entry->GetEntry()->Doom();
     DestroyEntry(entry);
     return;
   }
 
-  DoomActiveEntry(entry->disk_entry->GetKey());
+  DoomActiveEntry(entry->GetEntry()->GetKey());
 
   // Restart only add_to_entry_queue transactions.
   // Post task here to avoid a race in creating the entry between |transaction|
@@ -1107,10 +1105,10 @@
   RemoveAllQueuedTransactions(entry, &list);
 
   if (entry->SafeToDestroy()) {
-    entry->disk_entry->Doom();
+    entry->GetEntry()->Doom();
     DestroyEntry(entry);
   } else {
-    DoomActiveEntry(entry->disk_entry->GetKey());
+    DoomActiveEntry(entry->GetEntry()->GetKey());
   }
   // ERR_CACHE_RACE causes the transaction to restart the whole process.
   for (auto* queued_transaction : list)
diff --git a/net/http/http_cache.h b/net/http/http_cache.h
index df68e4f..fdda7a7e 100644
--- a/net/http/http_cache.h
+++ b/net/http/http_cache.h
@@ -36,6 +36,7 @@
 #include "net/base/net_errors.h"
 #include "net/base/net_export.h"
 #include "net/base/request_priority.h"
+#include "net/disk_cache/disk_cache.h"
 #include "net/http/http_transaction_factory.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
@@ -45,14 +46,6 @@
 class ApplicationStatusListener;
 }  // namespace base::android
 
-namespace disk_cache {
-class Backend;
-struct BackendResult;
-class BackendFileOperationsFactory;
-class Entry;
-class EntryResult;
-}  // namespace disk_cache
-
 namespace net {
 
 class HttpNetworkSession;
@@ -374,9 +367,11 @@
 
     bool TransactionInReaders(Transaction* transaction) const;
 
+    disk_cache::Entry* GetEntry() { return disk_entry.get(); }
+
     base::SafeRef<ActiveEntry> GetSafeRef() const;
 
-    const raw_ptr<disk_cache::Entry, DanglingUntriaged> disk_entry;
+    disk_cache::ScopedEntryPtr disk_entry;
 
     // Indicates if the disk_entry was opened or not (i.e.: created).
     // It is set to true when a transaction is added to an entry so that other,
diff --git a/net/http/http_cache_transaction.cc b/net/http/http_cache_transaction.cc
index 02733e0..2053d11 100644
--- a/net/http/http_cache_transaction.cc
+++ b/net/http/http_cache_transaction.cc
@@ -413,7 +413,7 @@
   // If it's a writer and a full request then it may read from the cache if its
   // offset is behind the current offset else from the network.
   int disk_entry_size =
-      safe_entry_.value()->disk_entry->GetDataSize(kResponseContentIndex);
+      safe_entry_.value()->GetEntry()->GetDataSize(kResponseContentIndex);
   if (read_offset_ == disk_entry_size ||
       safe_entry_.value()->writers->network_read_only()) {
     next_state_ = STATE_NETWORK_READ_CACHE_WRITE;
@@ -1488,7 +1488,7 @@
   // already written, to avoid data race since cache thread can also access
   // this.
   if (!cache_->IsWritingInProgress(entry()))
-    open_entry_last_used_ = safe_entry_.value()->disk_entry->GetLastUsed();
+    open_entry_last_used_ = safe_entry_.value()->GetEntry()->GetLastUsed();
 
   // TODO(jkarlin): We should either handle the case or DCHECK.
   if (result != OK) {
@@ -1550,11 +1550,11 @@
   TransitionToState(STATE_CACHE_READ_RESPONSE_COMPLETE);
 
   io_buf_len_ =
-      safe_entry_.value()->disk_entry->GetDataSize(kResponseInfoIndex);
+      safe_entry_.value()->GetEntry()->GetDataSize(kResponseInfoIndex);
   read_buf_ = base::MakeRefCounted<IOBuffer>(io_buf_len_);
 
   net_log_.BeginEvent(NetLogEventType::HTTP_CACHE_READ_INFO);
-  return safe_entry_.value()->disk_entry->ReadData(
+  return safe_entry_.value()->GetEntry()->ReadData(
       kResponseInfoIndex, 0, read_buf_.get(), io_buf_len_, io_callback_);
 }
 
@@ -1599,7 +1599,7 @@
   // associated bug.
   if (!cache_->IsWritingInProgress(entry())) {
     int current_size =
-        safe_entry_.value()->disk_entry->GetDataSize(kResponseContentIndex);
+        safe_entry_.value()->GetEntry()->GetDataSize(kResponseContentIndex);
     int64_t full_response_length = response_.headers->GetContentLength();
 
     // Some resources may have slipped in as truncated when they're not.
@@ -1731,7 +1731,7 @@
 
 int HttpCache::Transaction::DoCacheQueryData() {
   TransitionToState(STATE_CACHE_QUERY_DATA_COMPLETE);
-  return safe_entry_.value()->disk_entry->ReadyForSparseIO(io_callback_);
+  return safe_entry_.value()->GetEntry()->ReadyForSparseIO(io_callback_);
 }
 
 int HttpCache::Transaction::DoCacheQueryDataComplete(int result) {
@@ -1752,7 +1752,7 @@
   }
 
   TransitionToState(STATE_COMPLETE_PARTIAL_CACHE_VALIDATION);
-  return partial_->ShouldValidateCache(safe_entry_.value()->disk_entry,
+  return partial_->ShouldValidateCache(safe_entry_.value()->GetEntry(),
                                        io_callback_);
 }
 
@@ -1769,7 +1769,7 @@
     return result;
   }
 
-  partial_->PrepareCacheValidation(safe_entry_.value()->disk_entry,
+  partial_->PrepareCacheValidation(safe_entry_.value()->GetEntry(),
                                    &custom_request_->extra_headers);
 
   if (reading_ && partial_->IsCurrentRangeCached()) {
@@ -2225,7 +2225,7 @@
     return OK;
   net_log_.BeginEvent(NetLogEventType::HTTP_CACHE_WRITE_DATA);
   // Truncate the stream.
-  return safe_entry_.value()->disk_entry->WriteData(
+  return safe_entry_.value()->GetEntry()->WriteData(
       kResponseContentIndex, /*offset=*/0,
       /*buf=*/nullptr, /*buf_len=*/0, io_callback_, /*truncate=*/true);
 }
@@ -2475,11 +2475,11 @@
 
   net_log_.BeginEvent(NetLogEventType::HTTP_CACHE_READ_DATA);
   if (partial_) {
-    return partial_->CacheRead(safe_entry_.value()->disk_entry, read_buf_.get(),
+    return partial_->CacheRead(safe_entry_.value()->GetEntry(), read_buf_.get(),
                                read_buf_len_, io_callback_);
   }
 
-  return safe_entry_.value()->disk_entry->ReadData(
+  return safe_entry_.value()->GetEntry()->ReadData(
       kResponseContentIndex, read_offset_, read_buf_.get(), read_buf_len_,
       io_callback_);
 }
@@ -2851,7 +2851,7 @@
   DCHECK_EQ(mode_, READ_WRITE);
 
   if (!partial_->UpdateFromStoredHeaders(
-          response_.headers.get(), safe_entry_.value()->disk_entry, truncated_,
+          response_.headers.get(), safe_entry_.value()->GetEntry(), truncated_,
           cache_->IsWritingInProgress(entry()))) {
     return DoRestartPartialRequest();
   }
@@ -3436,7 +3436,7 @@
                         : 0);
   }
 
-  return safe_entry_.value()->disk_entry->WriteData(
+  return safe_entry_.value()->GetEntry()->WriteData(
       kResponseInfoIndex, 0, data.get(), io_buf_len_, io_callback_, true);
 }
 
@@ -3649,7 +3649,7 @@
 bool HttpCache::Transaction::CanResume(bool has_data) {
   // Double check that there is something worth keeping.
   if (has_data &&
-      !safe_entry_.value()->disk_entry->GetDataSize(kResponseContentIndex))
+      !safe_entry_.value()->GetEntry()->GetDataSize(kResponseContentIndex))
     return false;
 
   if (method_ != "GET")
diff --git a/net/http/http_cache_writers.cc b/net/http/http_cache_writers.cc
index a911db20..b70dbec 100644
--- a/net/http/http_cache_writers.cc
+++ b/net/http/http_cache_writers.cc
@@ -496,7 +496,7 @@
                                        read_buf_.get(), num_bytes,
                                        std::move(io_callback), true);
   } else {
-    rv = partial->CacheWrite(entry_->disk_entry, read_buf_.get(), num_bytes,
+    rv = partial->CacheWrite(entry_->GetEntry(), read_buf_.get(), num_bytes,
                              std::move(io_callback));
   }
   return rv;
diff --git a/net/http/transport_security_state_static.pins b/net/http/transport_security_state_static.pins
index d3c98f0..66e3939 100644
--- a/net/http/transport_security_state_static.pins
+++ b/net/http/transport_security_state_static.pins
@@ -43,9 +43,9 @@
 #   hash function for preloaded entries again (we have already done so once).
 #
 
-# Last updated: 2022-07-24 12:55 UTC
+# Last updated: 2022-07-25 12:54 UTC
 PinsListTimestamp
-1658667350
+1658753669
 
 TestSPKI
 sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
diff --git a/sandbox/win/src/sandbox_policy_diagnostic.cc b/sandbox/win/src/sandbox_policy_diagnostic.cc
index 2acfd37..428d6b9 100644
--- a/sandbox/win/src/sandbox_policy_diagnostic.cc
+++ b/sandbox/win/src/sandbox_policy_diagnostic.cc
@@ -445,7 +445,7 @@
              base::AsStringPiece16(GetSidAsString(*app_container_sid_)));
     base::Value::List caps;
     for (const auto& sid : capabilities_) {
-      auto sid_value = base::AsStringPiece16(GetSidAsString(sid));
+      auto sid_value = base::Value(base::AsStringPiece16(GetSidAsString(sid)));
       caps.Append(std::move(sid_value));
     }
     if (!caps.empty()) {
@@ -453,7 +453,7 @@
     }
     base::Value::List imp_caps;
     for (const auto& sid : initial_capabilities_) {
-      auto sid_value = base::AsStringPiece16(GetSidAsString(sid));
+      auto sid_value = base::Value(base::AsStringPiece16(GetSidAsString(sid)));
       imp_caps.Append(std::move(sid_value));
     }
     if (!imp_caps.empty()) {
diff --git a/testing/buildbot/chromium.android.fyi.json b/testing/buildbot/chromium.android.fyi.json
index 8a8c035..e8396ba 100644
--- a/testing/buildbot/chromium.android.fyi.json
+++ b/testing/buildbot/chromium.android.fyi.json
@@ -7354,58 +7354,6 @@
       },
       {
         "args": [
-          "--platform=android",
-          "--avd-config=../../tools/android/avd/proto/generic_android24.textpb"
-        ],
-        "isolate_name": "content_shell_crash_test",
-        "isolate_profile_data": true,
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "content_shell_crash_test",
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "cipd_packages": [
-            {
-              "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
-              "location": "bin",
-              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
-            }
-          ],
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "device_os": null,
-              "device_type": null,
-              "machine_type": "n1-standard-4|e2-standard-4",
-              "os": "Ubuntu-18.04",
-              "pool": "chromium.tests.avd"
-            }
-          ],
-          "named_caches": [
-            {
-              "name": "generic_android25",
-              "path": ".android_emulator/generic_android25"
-            }
-          ],
-          "optional_dimensions": {
-            "60": [
-              {
-                "caches": "generic_android25"
-              }
-            ]
-          },
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test_id_prefix": "ninja://content/shell:content_shell_crash_test/"
-      },
-      {
-        "args": [
           "--avd-config=../../tools/android/avd/proto/generic_android24.textpb"
         ],
         "isolate_name": "monochrome_public_apk_checker",
diff --git a/testing/buildbot/chromium.chromiumos.json b/testing/buildbot/chromium.chromiumos.json
index 95ee84a..6e2c84a 100644
--- a/testing/buildbot/chromium.chromiumos.json
+++ b/testing/buildbot/chromium.chromiumos.json
@@ -5756,21 +5756,21 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5200.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5201.0/test_ash_chrome"
         ],
         "isolate_profile_data": true,
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "interactive_ui_tests Lacros version skew testing ash 106.0.5200.0",
+        "name": "interactive_ui_tests Lacros version skew testing ash 106.0.5201.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v106.0.5200.0",
-              "revision": "version:106.0.5200.0"
+              "location": "lacros_version_skew_tests_v106.0.5201.0",
+              "revision": "version:106.0.5201.0"
             }
           ],
           "dimension_sets": [
@@ -5783,7 +5783,7 @@
         },
         "test": "interactive_ui_tests",
         "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/",
-        "variant_id": "Lacros version skew testing ash 106.0.5200.0"
+        "variant_id": "Lacros version skew testing ash 106.0.5201.0"
       },
       {
         "isolate_profile_data": true,
@@ -5921,21 +5921,21 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5200.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5201.0/test_ash_chrome"
         ],
         "isolate_profile_data": true,
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests Lacros version skew testing ash 106.0.5200.0",
+        "name": "lacros_chrome_browsertests Lacros version skew testing ash 106.0.5201.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v106.0.5200.0",
-              "revision": "version:106.0.5200.0"
+              "location": "lacros_version_skew_tests_v106.0.5201.0",
+              "revision": "version:106.0.5201.0"
             }
           ],
           "dimension_sets": [
@@ -5947,7 +5947,7 @@
         },
         "test": "lacros_chrome_browsertests",
         "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests/",
-        "variant_id": "Lacros version skew testing ash 106.0.5200.0"
+        "variant_id": "Lacros version skew testing ash 106.0.5201.0"
       },
       {
         "args": [
@@ -6067,21 +6067,21 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5200.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5201.0/test_ash_chrome"
         ],
         "isolate_profile_data": true,
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 106.0.5200.0",
+        "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 106.0.5201.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v106.0.5200.0",
-              "revision": "version:106.0.5200.0"
+              "location": "lacros_version_skew_tests_v106.0.5201.0",
+              "revision": "version:106.0.5201.0"
             }
           ],
           "dimension_sets": [
@@ -6093,7 +6093,7 @@
         },
         "test": "lacros_chrome_browsertests_run_in_series",
         "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests_run_in_series/",
-        "variant_id": "Lacros version skew testing ash 106.0.5200.0"
+        "variant_id": "Lacros version skew testing ash 106.0.5201.0"
       },
       {
         "isolate_profile_data": true,
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json
index ca5bd2c2..c213824 100644
--- a/testing/buildbot/chromium.fyi.json
+++ b/testing/buildbot/chromium.fyi.json
@@ -76618,7 +76618,7 @@
       {
         "args": [],
         "cros_board": "octopus",
-        "cros_img": "octopus-full/R101-14543.0.0-rc1",
+        "cros_img": "chromiumos-image-archive/octopus-public/R105-14988.0.0",
         "name": "lacros_fyi_tast_tests OCTOPUS_FULL",
         "swarming": {},
         "tast_expr": "(\"group:mainline\" && \"dep:lacros\" && !informational)",
@@ -76630,7 +76630,7 @@
       {
         "args": [],
         "cros_board": "eve",
-        "cros_img": "eve-full/R100-14495.0.0-rc1",
+        "cros_img": "chromiumos-image-archive/eve-public/R105-14988.0.0",
         "name": "lacros_fyi_tast_tests EVE_FULL",
         "swarming": {},
         "tast_expr": "(\"group:mainline\" && \"dep:lacros\" && !informational)",
@@ -76642,7 +76642,7 @@
       {
         "args": [],
         "cros_board": "octopus",
-        "cros_img": "octopus-full/R101-14543.0.0-rc1",
+        "cros_img": "chromiumos-image-archive/octopus-public/R105-14988.0.0",
         "name": "ozone_unittests OCTOPUS_FULL",
         "swarming": {},
         "test": "ozone_unittests",
@@ -76653,7 +76653,7 @@
       {
         "args": [],
         "cros_board": "eve",
-        "cros_img": "eve-full/R100-14495.0.0-rc1",
+        "cros_img": "chromiumos-image-archive/eve-public/R105-14988.0.0",
         "name": "ozone_unittests EVE_FULL",
         "swarming": {},
         "test": "ozone_unittests",
@@ -85847,21 +85847,21 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5200.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5201.0/test_ash_chrome"
         ],
         "isolate_profile_data": true,
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "interactive_ui_tests Lacros version skew testing ash 106.0.5200.0",
+        "name": "interactive_ui_tests Lacros version skew testing ash 106.0.5201.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v106.0.5200.0",
-              "revision": "version:106.0.5200.0"
+              "location": "lacros_version_skew_tests_v106.0.5201.0",
+              "revision": "version:106.0.5201.0"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
@@ -85869,7 +85869,7 @@
         },
         "test": "interactive_ui_tests",
         "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/",
-        "variant_id": "Lacros version skew testing ash 106.0.5200.0"
+        "variant_id": "Lacros version skew testing ash 106.0.5201.0"
       },
       {
         "isolate_profile_data": true,
@@ -85982,28 +85982,28 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5200.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5201.0/test_ash_chrome"
         ],
         "isolate_profile_data": true,
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests Lacros version skew testing ash 106.0.5200.0",
+        "name": "lacros_chrome_browsertests Lacros version skew testing ash 106.0.5201.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v106.0.5200.0",
-              "revision": "version:106.0.5200.0"
+              "location": "lacros_version_skew_tests_v106.0.5201.0",
+              "revision": "version:106.0.5201.0"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
         "test": "lacros_chrome_browsertests",
         "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests/",
-        "variant_id": "Lacros version skew testing ash 106.0.5200.0"
+        "variant_id": "Lacros version skew testing ash 106.0.5201.0"
       },
       {
         "args": [
@@ -86103,28 +86103,28 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5200.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5201.0/test_ash_chrome"
         ],
         "isolate_profile_data": true,
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 106.0.5200.0",
+        "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 106.0.5201.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v106.0.5200.0",
-              "revision": "version:106.0.5200.0"
+              "location": "lacros_version_skew_tests_v106.0.5201.0",
+              "revision": "version:106.0.5201.0"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
         "test": "lacros_chrome_browsertests_run_in_series",
         "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests_run_in_series/",
-        "variant_id": "Lacros version skew testing ash 106.0.5200.0"
+        "variant_id": "Lacros version skew testing ash 106.0.5201.0"
       },
       {
         "isolate_profile_data": true,
@@ -87462,20 +87462,20 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5200.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5201.0/test_ash_chrome"
         ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "interactive_ui_tests Lacros version skew testing ash 106.0.5200.0",
+        "name": "interactive_ui_tests Lacros version skew testing ash 106.0.5201.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v106.0.5200.0",
-              "revision": "version:106.0.5200.0"
+              "location": "lacros_version_skew_tests_v106.0.5201.0",
+              "revision": "version:106.0.5201.0"
             }
           ],
           "dimension_sets": [
@@ -87489,7 +87489,7 @@
         },
         "test": "interactive_ui_tests",
         "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/",
-        "variant_id": "Lacros version skew testing ash 106.0.5200.0"
+        "variant_id": "Lacros version skew testing ash 106.0.5201.0"
       },
       {
         "merge": {
@@ -87627,20 +87627,20 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5200.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5201.0/test_ash_chrome"
         ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests Lacros version skew testing ash 106.0.5200.0",
+        "name": "lacros_chrome_browsertests Lacros version skew testing ash 106.0.5201.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v106.0.5200.0",
-              "revision": "version:106.0.5200.0"
+              "location": "lacros_version_skew_tests_v106.0.5201.0",
+              "revision": "version:106.0.5201.0"
             }
           ],
           "dimension_sets": [
@@ -87653,7 +87653,7 @@
         },
         "test": "lacros_chrome_browsertests",
         "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests/",
-        "variant_id": "Lacros version skew testing ash 106.0.5200.0"
+        "variant_id": "Lacros version skew testing ash 106.0.5201.0"
       },
       {
         "args": [
@@ -87773,20 +87773,20 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5200.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5201.0/test_ash_chrome"
         ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 106.0.5200.0",
+        "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 106.0.5201.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v106.0.5200.0",
-              "revision": "version:106.0.5200.0"
+              "location": "lacros_version_skew_tests_v106.0.5201.0",
+              "revision": "version:106.0.5201.0"
             }
           ],
           "dimension_sets": [
@@ -87799,7 +87799,7 @@
         },
         "test": "lacros_chrome_browsertests_run_in_series",
         "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests_run_in_series/",
-        "variant_id": "Lacros version skew testing ash 106.0.5200.0"
+        "variant_id": "Lacros version skew testing ash 106.0.5201.0"
       },
       {
         "merge": {
@@ -89295,20 +89295,20 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5200.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5201.0/test_ash_chrome"
         ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "interactive_ui_tests Lacros version skew testing ash 106.0.5200.0",
+        "name": "interactive_ui_tests Lacros version skew testing ash 106.0.5201.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v106.0.5200.0",
-              "revision": "version:106.0.5200.0"
+              "location": "lacros_version_skew_tests_v106.0.5201.0",
+              "revision": "version:106.0.5201.0"
             }
           ],
           "dimension_sets": [
@@ -89322,7 +89322,7 @@
         },
         "test": "interactive_ui_tests",
         "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/",
-        "variant_id": "Lacros version skew testing ash 106.0.5200.0"
+        "variant_id": "Lacros version skew testing ash 106.0.5201.0"
       },
       {
         "merge": {
@@ -89460,20 +89460,20 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5200.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5201.0/test_ash_chrome"
         ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests Lacros version skew testing ash 106.0.5200.0",
+        "name": "lacros_chrome_browsertests Lacros version skew testing ash 106.0.5201.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v106.0.5200.0",
-              "revision": "version:106.0.5200.0"
+              "location": "lacros_version_skew_tests_v106.0.5201.0",
+              "revision": "version:106.0.5201.0"
             }
           ],
           "dimension_sets": [
@@ -89486,7 +89486,7 @@
         },
         "test": "lacros_chrome_browsertests",
         "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests/",
-        "variant_id": "Lacros version skew testing ash 106.0.5200.0"
+        "variant_id": "Lacros version skew testing ash 106.0.5201.0"
       },
       {
         "args": [
@@ -89606,20 +89606,20 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5200.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5201.0/test_ash_chrome"
         ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 106.0.5200.0",
+        "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 106.0.5201.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v106.0.5200.0",
-              "revision": "version:106.0.5200.0"
+              "location": "lacros_version_skew_tests_v106.0.5201.0",
+              "revision": "version:106.0.5201.0"
             }
           ],
           "dimension_sets": [
@@ -89632,7 +89632,7 @@
         },
         "test": "lacros_chrome_browsertests_run_in_series",
         "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests_run_in_series/",
-        "variant_id": "Lacros version skew testing ash 106.0.5200.0"
+        "variant_id": "Lacros version skew testing ash 106.0.5201.0"
       },
       {
         "merge": {
@@ -90367,20 +90367,20 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5200.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5201.0/test_ash_chrome"
         ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "interactive_ui_tests Lacros version skew testing ash 106.0.5200.0",
+        "name": "interactive_ui_tests Lacros version skew testing ash 106.0.5201.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v106.0.5200.0",
-              "revision": "version:106.0.5200.0"
+              "location": "lacros_version_skew_tests_v106.0.5201.0",
+              "revision": "version:106.0.5201.0"
             }
           ],
           "dimension_sets": [
@@ -90393,7 +90393,7 @@
         },
         "test": "interactive_ui_tests",
         "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/",
-        "variant_id": "Lacros version skew testing ash 106.0.5200.0"
+        "variant_id": "Lacros version skew testing ash 106.0.5201.0"
       }
     ]
   },
diff --git a/testing/buildbot/chromium.memory.json b/testing/buildbot/chromium.memory.json
index 1fa0b68..74498614 100644
--- a/testing/buildbot/chromium.memory.json
+++ b/testing/buildbot/chromium.memory.json
@@ -20875,21 +20875,21 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5200.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5201.0/test_ash_chrome"
         ],
         "isolate_profile_data": true,
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "interactive_ui_tests Lacros version skew testing ash 106.0.5200.0",
+        "name": "interactive_ui_tests Lacros version skew testing ash 106.0.5201.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v106.0.5200.0",
-              "revision": "version:106.0.5200.0"
+              "location": "lacros_version_skew_tests_v106.0.5201.0",
+              "revision": "version:106.0.5201.0"
             }
           ],
           "dimension_sets": [
@@ -20902,7 +20902,7 @@
         },
         "test": "interactive_ui_tests",
         "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/",
-        "variant_id": "Lacros version skew testing ash 106.0.5200.0"
+        "variant_id": "Lacros version skew testing ash 106.0.5201.0"
       },
       {
         "isolate_profile_data": true,
@@ -21040,21 +21040,21 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5200.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5201.0/test_ash_chrome"
         ],
         "isolate_profile_data": true,
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests Lacros version skew testing ash 106.0.5200.0",
+        "name": "lacros_chrome_browsertests Lacros version skew testing ash 106.0.5201.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v106.0.5200.0",
-              "revision": "version:106.0.5200.0"
+              "location": "lacros_version_skew_tests_v106.0.5201.0",
+              "revision": "version:106.0.5201.0"
             }
           ],
           "dimension_sets": [
@@ -21066,7 +21066,7 @@
         },
         "test": "lacros_chrome_browsertests",
         "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests/",
-        "variant_id": "Lacros version skew testing ash 106.0.5200.0"
+        "variant_id": "Lacros version skew testing ash 106.0.5201.0"
       },
       {
         "args": [
@@ -21186,21 +21186,21 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5200.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5201.0/test_ash_chrome"
         ],
         "isolate_profile_data": true,
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 106.0.5200.0",
+        "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 106.0.5201.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v106.0.5200.0",
-              "revision": "version:106.0.5200.0"
+              "location": "lacros_version_skew_tests_v106.0.5201.0",
+              "revision": "version:106.0.5201.0"
             }
           ],
           "dimension_sets": [
@@ -21212,7 +21212,7 @@
         },
         "test": "lacros_chrome_browsertests_run_in_series",
         "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests_run_in_series/",
-        "variant_id": "Lacros version skew testing ash 106.0.5200.0"
+        "variant_id": "Lacros version skew testing ash 106.0.5201.0"
       },
       {
         "isolate_profile_data": true,
diff --git a/testing/buildbot/test_suite_exceptions.pyl b/testing/buildbot/test_suite_exceptions.pyl
index c57fba36..589e5f5 100644
--- a/testing/buildbot/test_suite_exceptions.pyl
+++ b/testing/buildbot/test_suite_exceptions.pyl
@@ -1771,6 +1771,7 @@
   'content_shell_crash_test': {
     'remove_from': [
       'android-marshmallow-x86-rel-non-cq', # crbug.com/1084353
+      'android-nougat-x86-rel', # crbug.com/1084353
     ],
     'modifications': {
       'Win10 Tests x64 (dbg)': {
diff --git a/testing/buildbot/variants.pyl b/testing/buildbot/variants.pyl
index 9f847431c..0f31fb2 100644
--- a/testing/buildbot/variants.pyl
+++ b/testing/buildbot/variants.pyl
@@ -22,15 +22,15 @@
   },
   'LACROS_VERSION_SKEW_CANARY': {
     'args': [
-      '--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5200.0/test_ash_chrome',
+      '--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5201.0/test_ash_chrome',
     ],
-    'identifier': 'Lacros version skew testing ash 106.0.5200.0',
+    'identifier': 'Lacros version skew testing ash 106.0.5201.0',
     'swarming': {
       'cipd_packages': [
         {
           'cipd_package': 'chromium/testing/linux-ash-chromium/x86_64/ash.zip',
-          'location': 'lacros_version_skew_tests_v106.0.5200.0',
-          'revision': 'version:106.0.5200.0',
+          'location': 'lacros_version_skew_tests_v106.0.5201.0',
+          'revision': 'version:106.0.5201.0',
         },
       ],
     },
@@ -1034,8 +1034,8 @@
   'CROS_EVE_FULL': {
     'skylab': {
       'cros_board': 'eve',
-      'cros_chrome_version': '100.0.4863.0',
-      'cros_img': 'eve-full/R100-14495.0.0-rc1',
+      'cros_chrome_version': '105.0.5190.0',
+      'cros_img': 'chromiumos-image-archive/eve-public/R105-14988.0.0',
     },
     'enabled': True,
     'identifier': 'EVE_FULL',
@@ -1115,8 +1115,8 @@
   'CROS_OCTOPUS_FULL': {
     'skylab': {
       'cros_board': 'octopus',
-      'cros_chrome_version': '101.0.4918.0',
-      'cros_img': 'octopus-full/R101-14543.0.0-rc1',
+      'cros_chrome_version': '105.0.5190.0',
+      'cros_img': 'chromiumos-image-archive/octopus-public/R105-14988.0.0',
     },
     'enabled': True,
     'identifier': 'OCTOPUS_FULL',
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
index ccd5873d..2f649a4 100644
--- a/testing/variations/fieldtrial_testing_config.json
+++ b/testing/variations/fieldtrial_testing_config.json
@@ -2099,6 +2099,23 @@
             ]
         }
     ],
+    "CacheSiteIsolationMemoryThreshold": [
+        {
+            "platforms": [
+                "android",
+                "android_webview",
+                "android_weblayer"
+            ],
+            "experiments": [
+                {
+                    "name": "Enabled",
+                    "enable_features": [
+                        "CacheSiteIsolationMemoryThreshold"
+                    ]
+                }
+            ]
+        }
+    ],
     "CacheTransparency": [
         {
             "platforms": [
@@ -3536,6 +3553,26 @@
             ]
         }
     ],
+    "DisableResourceScheduler": [
+        {
+            "platforms": [
+                "android",
+                "chromeos",
+                "chromeos_lacros",
+                "linux",
+                "mac",
+                "windows"
+            ],
+            "experiments": [
+                {
+                    "name": "Enabled_20220725",
+                    "enable_features": [
+                        "DisableResourceScheduler"
+                    ]
+                }
+            ]
+        }
+    ],
     "DiscardableMemoryExperiments": [
         {
             "platforms": [
diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc
index 97433374..516a839 100644
--- a/third_party/blink/common/features.cc
+++ b/third_party/blink/common/features.cc
@@ -437,7 +437,7 @@
     "ServiceWorkerUpdateDelay", base::FEATURE_DISABLED_BY_DEFAULT};
 
 // Enable the use of Speculation Rules in access the private prefetch proxy
-// (chrome/browser/prefetch/prefetch_proxy/).
+// (chrome/browser/preloading/prefetch/prefetch_proxy/).
 // https://crbug.com/1190167
 const base::Feature kSpeculationRulesPrefetchProxy {
   "SpeculationRulesPrefetchProxy",
@@ -1565,6 +1565,9 @@
 const base::Feature kCSSOverflowForReplacedElements{
     "CSSOverflowForReplacedElements", base::FEATURE_ENABLED_BY_DEFAULT};
 
+const base::Feature kScrollUpdateOptimizations{
+    "ScrollUpdateOptimizations", base::FEATURE_DISABLED_BY_DEFAULT};
+
 const base::Feature kClipboardUnsanitizedContent{
     "ClipboardUnsanitizedContent", base::FEATURE_DISABLED_BY_DEFAULT};
 
diff --git a/third_party/blink/perf_tests/paint/wavy-decorations-long.html b/third_party/blink/perf_tests/paint/wavy-decorations-long.html
new file mode 100644
index 0000000..09432c6
--- /dev/null
+++ b/third_party/blink/perf_tests/paint/wavy-decorations-long.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<title>Wavy decoration painting: one long decoration</title>
+<script src="../resources/runner.js"></script>
+<script src="resources/paint.js"></script>
+<style>
+* {
+  text-decoration-skip: none;
+  text-decoration-skip-ink: none;
+}
+main {
+  text-decoration: red wavy underline;
+}
+main.blue {
+  text-decoration: blue wavy underline;
+}
+</style>
+<main>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. </main>
+<script>
+  const main = document.querySelector("main");
+  main.innerHTML = main.innerHTML.repeat(420);
+
+  measurePaint({
+    description: "Measure frame time for painting wavy decorations with one long decoration",
+    run: () => void document.querySelector("main").classList.toggle("blue"),
+  });
+</script>
diff --git a/third_party/blink/perf_tests/paint/wavy-decorations-many.html b/third_party/blink/perf_tests/paint/wavy-decorations-many.html
new file mode 100644
index 0000000..921242c
--- /dev/null
+++ b/third_party/blink/perf_tests/paint/wavy-decorations-many.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<title>Wavy decoration painting: many short decorations</title>
+<script src="../resources/runner.js"></script>
+<script src="resources/paint.js"></script>
+<style>
+* {
+  text-decoration-skip: none;
+  text-decoration-skip-ink: none;
+}
+main > span {
+  text-decoration: red wavy underline;
+}
+main.blue > span {
+  text-decoration: blue wavy underline;
+}
+</style>
+<main><span>Lorem</span> <span>ipsum</span> <span>dolor</span> <span>sit</span> <span>amet,</span> <span>consectetur</span> <span>adipiscing</span> <span>elit,</span> <span>sed</span> <span>do</span> <span>eiusmod</span> <span>tempor</span> <span>incididunt</span> <span>ut</span> <span>labore</span> <span>et</span> <span>dolore</span> <span>magna</span> <span>aliqua.</span> </main>
+<script>
+  const main = document.querySelector("main");
+  main.innerHTML = main.innerHTML.repeat(420);
+
+  measurePaint({
+    description: "Measure frame time for painting wavy decorations with many short decorations",
+    run: () => void document.querySelector("main").classList.toggle("blue"),
+  });
+</script>
diff --git a/third_party/blink/public/common/features.h b/third_party/blink/public/common/features.h
index 279fe6b..72b6c0477 100644
--- a/third_party/blink/public/common/features.h
+++ b/third_party/blink/public/common/features.h
@@ -824,6 +824,10 @@
 // CSSOverflowForReplacedElements, if necessary, due to compat issues.
 BLINK_COMMON_EXPORT extern const base::Feature kCSSOverflowForReplacedElements;
 
+// Whether to enable scroll update optimizations. See crbug.com/1346789,
+// It controls RuntimeEnabledFeatures::ScrollUpdateOptimizationsEnabled().
+BLINK_COMMON_EXPORT extern const base::Feature kScrollUpdateOptimizations;
+
 // Allows reading/writing unsanitized content from/to the clipboard. Currently,
 // it is only applicable to HTML format. See crbug.com/1268679.
 BLINK_COMMON_EXPORT extern const base::Feature kClipboardUnsanitizedContent;
diff --git a/third_party/blink/public/mojom/BUILD.gn b/third_party/blink/public/mojom/BUILD.gn
index 1b0f047..66ebe840 100644
--- a/third_party/blink/public/mojom/BUILD.gn
+++ b/third_party/blink/public/mojom/BUILD.gn
@@ -97,6 +97,7 @@
     "input/pointer_lock_context.mojom",
     "input/pointer_lock_result.mojom",
     "input/scroll_direction.mojom",
+    "input/stylus_writing_gesture.mojom",
     "input/touch_event.mojom",
     "interest_group/ad_auction_service.mojom",
     "interest_group/interest_group_types.mojom",
diff --git a/third_party/blink/public/mojom/input/input_handler.mojom b/third_party/blink/public/mojom/input/input_handler.mojom
index e68e5454..3b5cedc 100644
--- a/third_party/blink/public/mojom/input/input_handler.mojom
+++ b/third_party/blink/public/mojom/input/input_handler.mojom
@@ -16,6 +16,7 @@
 import "third_party/blink/public/mojom/input/touch_event.mojom";
 import "third_party/blink/public/mojom/selection_menu/selection_menu_behavior.mojom";
 import "ui/base/ime/mojom/ime_types.mojom";
+import "third_party/blink/public/mojom/input/stylus_writing_gesture.mojom";
 import "ui/events/mojom/event.mojom";
 import "ui/events/mojom/event_constants.mojom";
 import "ui/events/mojom/scroll_granularity.mojom";
@@ -300,6 +301,9 @@
   // editable field.
   SetEditableSelectionOffsets(int32 start, int32 end);
 
+  // Stylus Writing - perform Gesture action in input using gesture data.
+  HandleStylusWritingGestureAction(blink.mojom.StylusWritingGestureData gesture_data);
+
   // Message payload is the name/value of a WebCore edit command to execute.
   ExecuteEditCommand(string command, mojo_base.mojom.String16? value);
 
diff --git a/third_party/blink/public/mojom/input/stylus_writing_gesture.mojom b/third_party/blink/public/mojom/input/stylus_writing_gesture.mojom
new file mode 100644
index 0000000..0b56cacd
--- /dev/null
+++ b/third_party/blink/public/mojom/input/stylus_writing_gesture.mojom
@@ -0,0 +1,44 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+module blink.mojom;
+
+import "mojo/public/mojom/base/string16.mojom";
+import "ui/gfx/geometry/mojom/geometry.mojom";
+
+// This enum defines the various gesture actions to be supported for
+// corresponding stylus writing gestures detected by Android platform's stylus
+// writing service.
+enum StylusWritingGestureAction {
+  DELETE_TEXT,
+  ADD_SPACE_OR_TEXT,
+  REMOVE_SPACES,
+};
+
+// This structure contains the gesture data sent by the stylus writing service
+// to perform the corresponding gesture action in html input.
+struct StylusWritingGestureData {
+  // The gesture action to be performed for this gesture.
+  StylusWritingGestureAction action;
+
+  // The DELETE_TEXT, REMOVE_SPACES gestures would contain two points, that is
+  // where the gesture started and ended to determine the text offset under the
+  // gesture. ADD_SPACE_OR_TEXT needs to be done after determing cursor position
+  // at one given point in the gesture, and hence would have only start point.
+  // So, a start point is always present in all gestures.
+  gfx.mojom.Point start_point;
+
+  // The end point of this gesture. This is optional as explained above.
+  gfx.mojom.Point? end_point;
+
+  // This is the alternate text to be inserted at current cursor in case the
+  // gesture could not be applied using above start and/or end points in the
+  // current focused input.
+  mojo_base.mojom.String16 text_alternative;
+
+  // This contains text to be added at a given point in the gesture. This is
+  // applicable only to gesture action ADD_SPACE_OR_TEXT and it would contain
+  // space character if there was no text to insert in the gesture.
+  mojo_base.mojom.String16? text_to_insert;
+};
diff --git a/third_party/blink/public/platform/scheduler/test/web_fake_thread_scheduler.h b/third_party/blink/public/platform/scheduler/test/web_fake_thread_scheduler.h
index 2bca7b4..5144c5c2 100644
--- a/third_party/blink/public/platform/scheduler/test/web_fake_thread_scheduler.h
+++ b/third_party/blink/public/platform/scheduler/test/web_fake_thread_scheduler.h
@@ -26,7 +26,6 @@
   WebAgentGroupScheduler* GetCurrentAgentGroupScheduler() override;
   void SetRendererHidden(bool hidden) override;
   void SetRendererBackgrounded(bool backgrounded) override;
-  std::unique_ptr<RendererPauseHandle> PauseRenderer() override;
 #if BUILDFLAG(IS_ANDROID)
   void PauseTimersForAndroidWebView() override;
   void ResumeTimersForAndroidWebView() override;
diff --git a/third_party/blink/public/platform/scheduler/test/web_mock_thread_scheduler.h b/third_party/blink/public/platform/scheduler/test/web_mock_thread_scheduler.h
index 37430b14..5c8ec08 100644
--- a/third_party/blink/public/platform/scheduler/test/web_mock_thread_scheduler.h
+++ b/third_party/blink/public/platform/scheduler/test/web_mock_thread_scheduler.h
@@ -41,7 +41,6 @@
   MOCK_METHOD0(GetCurrentAgentGroupScheduler, WebAgentGroupScheduler*());
   MOCK_METHOD1(SetRendererHidden, void(bool));
   MOCK_METHOD1(SetRendererBackgrounded, void(bool));
-  MOCK_METHOD0(PauseRenderer, std::unique_ptr<RendererPauseHandle>());
 #if BUILDFLAG(IS_ANDROID)
   MOCK_METHOD0(PauseTimersForAndroidWebView, void());
   MOCK_METHOD0(ResumeTimersForAndroidWebView, void());
diff --git a/third_party/blink/public/platform/scheduler/web_scoped_virtual_time_pauser.h b/third_party/blink/public/platform/scheduler/web_scoped_virtual_time_pauser.h
index 3a7e28c..f75e1f8e 100644
--- a/third_party/blink/public/platform/scheduler/web_scoped_virtual_time_pauser.h
+++ b/third_party/blink/public/platform/scheduler/web_scoped_virtual_time_pauser.h
@@ -12,7 +12,7 @@
 
 namespace blink {
 namespace scheduler {
-class ThreadSchedulerImpl;
+class ThreadSchedulerBase;
 }  // namespace scheduler
 
 // VirtualTime is a headless feature which is intended to make renders (more)
@@ -36,7 +36,7 @@
   // non-existent resource and it has an error handler which always fetches
   // another non-existent resource, then there is a risk that virtual time will
   // be blocked forever unless we use VirtualTaskDuration::kNonInstant).
-  WebScopedVirtualTimePauser(scheduler::ThreadSchedulerImpl*,
+  WebScopedVirtualTimePauser(scheduler::ThreadSchedulerBase*,
                              VirtualTaskDuration,
                              const WebString& debug_name);
 
@@ -63,7 +63,7 @@
   bool paused_ = false;
   bool virtual_time_enabled_when_paused_ = false;
   VirtualTaskDuration duration_ = VirtualTaskDuration::kInstant;
-  raw_ptr<scheduler::ThreadSchedulerImpl> scheduler_;  // NOT OWNED
+  raw_ptr<scheduler::ThreadSchedulerBase> scheduler_;  // NOT OWNED
   WebString debug_name_;
   intptr_t trace_id_;
 };
diff --git a/third_party/blink/public/platform/scheduler/web_thread_scheduler.h b/third_party/blink/public/platform/scheduler/web_thread_scheduler.h
index 57e4416..28583ab 100644
--- a/third_party/blink/public/platform/scheduler/web_thread_scheduler.h
+++ b/third_party/blink/public/platform/scheduler/web_thread_scheduler.h
@@ -111,24 +111,6 @@
   virtual void ResumeTimersForAndroidWebView();
 #endif  // BUILDFLAG(IS_ANDROID)
 
-  // RAII handle for pausing the renderer. Renderer is paused while
-  // at least one pause handle exists.
-  class BLINK_PLATFORM_EXPORT RendererPauseHandle {
-   public:
-    RendererPauseHandle() = default;
-    RendererPauseHandle(const RendererPauseHandle&) = delete;
-    RendererPauseHandle& operator=(const RendererPauseHandle&) = delete;
-    virtual ~RendererPauseHandle() = default;
-  };
-
-  // Tells the scheduler that the renderer process should be paused.
-  // Pausing means that all javascript callbacks should not fire.
-  // https://html.spec.whatwg.org/#pause
-  //
-  // Renderer will be resumed when the handle is destroyed.
-  // Handle should be destroyed before the renderer.
-  [[nodiscard]] virtual std::unique_ptr<RendererPauseHandle> PauseRenderer();
-
   // Sets the default blame context to which top level work should be
   // attributed in this renderer. |blame_context| must outlive this scheduler.
   virtual void SetTopLevelBlameContext(
diff --git a/third_party/blink/renderer/core/css/style_engine.cc b/third_party/blink/renderer/core/css/style_engine.cc
index 8300a187..416726f 100644
--- a/third_party/blink/renderer/core/css/style_engine.cc
+++ b/third_party/blink/renderer/core/css/style_engine.cc
@@ -3416,7 +3416,7 @@
 }
 
 void StyleEngine::ReportUseOfLegacyLayoutWithContainerQueries() {
-  DCHECK(!RuntimeEnabledFeatures::LayoutNGTableFragmentationEnabled());
+  DCHECK(!RuntimeEnabledFeatures::LayoutNGPrintingEnabled());
 
   // Only report once.
   if (legacy_layout_query_container_)
diff --git a/third_party/blink/renderer/core/dom/idle_deadline_test.cc b/third_party/blink/renderer/core/dom/idle_deadline_test.cc
index 3883c18..fde25ef 100644
--- a/third_party/blink/renderer/core/dom/idle_deadline_test.cc
+++ b/third_party/blink/renderer/core/dom/idle_deadline_test.cc
@@ -54,9 +54,6 @@
       override {
     return nullptr;
   }
-  std::unique_ptr<RendererPauseHandle> PauseScheduler() override {
-    return nullptr;
-  }
 
   base::TimeTicks MonotonicallyIncreasingVirtualTime() override {
     return base::TimeTicks();
diff --git a/third_party/blink/renderer/core/dom/scripted_idle_task_controller_test.cc b/third_party/blink/renderer/core/dom/scripted_idle_task_controller_test.cc
index a2df0aeb..812b8f5 100644
--- a/third_party/blink/renderer/core/dom/scripted_idle_task_controller_test.cc
+++ b/third_party/blink/renderer/core/dom/scripted_idle_task_controller_test.cc
@@ -63,9 +63,6 @@
     NOTREACHED();
     return nullptr;
   }
-  std::unique_ptr<RendererPauseHandle> PauseScheduler() override {
-    return nullptr;
-  }
   scheduler::WebAgentGroupScheduler* GetCurrentAgentGroupScheduler() override {
     NOTREACHED();
     return nullptr;
diff --git a/third_party/blink/renderer/core/editing/build.gni b/third_party/blink/renderer/core/editing/build.gni
index 1f6e8e5..fa4b244 100644
--- a/third_party/blink/renderer/core/editing/build.gni
+++ b/third_party/blink/renderer/core/editing/build.gni
@@ -158,6 +158,8 @@
   "ime/ime_text_span_vector_builder.h",
   "ime/input_method_controller.cc",
   "ime/input_method_controller.h",
+  "ime/stylus_writing_gesture.cc",
+  "ime/stylus_writing_gesture.h",
   "ime/text_format.cc",
   "ime/text_format.h",
   "ime/text_format_update_event.cc",
@@ -391,6 +393,7 @@
   "ime/cached_text_input_info_test.cc",
   "ime/ime_text_span_test.cc",
   "ime/input_method_controller_test.cc",
+  "ime/stylus_writing_gesture_test.cc",
   "inline_box_position_test.cc",
   "iterators/character_iterator_test.cc",
   "iterators/simplified_backwards_text_iterator_test.cc",
diff --git a/third_party/blink/renderer/core/editing/caret_display_item_client_test.cc b/third_party/blink/renderer/core/editing/caret_display_item_client_test.cc
index 9a44f43..e321066e 100644
--- a/third_party/blink/renderer/core/editing/caret_display_item_client_test.cc
+++ b/third_party/blink/renderer/core/editing/caret_display_item_client_test.cc
@@ -516,6 +516,24 @@
   EXPECT_EQ(PhysicalRect(70, 0, 1, 10), CaretLocalRect());
 }
 
+// http://crbug.com/1330093
+TEST_P(CaretDisplayItemClientTest, CaretAtStartInWhiteSpacePreWrapRTL) {
+  LoadNoto();
+  SetBodyInnerHTML(
+      "<style>"
+      "  body { margin: 0; padding: 0; }"
+      "  div { white-space: pre-wrap; width: 90px; margin: 0; padding: 5px; "
+      "  font: 20px NotoArabic }"
+      "</style>"
+      "<div dir=rtl contenteditable>&#1575;&#1582;&#1578;&#1576;&#1585; "
+      "</div>");
+
+  const Element& div = *GetDocument().QuerySelector("div");
+  const Position& position = Position::FirstPositionInNode(div);
+  const PhysicalRect& rect = ComputeCaretRect(PositionWithAffinity(position));
+  EXPECT_EQ(94, rect.X());
+}
+
 class ParameterizedComputeCaretRectTest
     : public EditingTestBase,
       private ScopedLayoutNGForTest,
diff --git a/third_party/blink/renderer/core/editing/editor.cc b/third_party/blink/renderer/core/editing/editor.cc
index 188f1379..8205bff 100644
--- a/third_party/blink/renderer/core/editing/editor.cc
+++ b/third_party/blink/renderer/core/editing/editor.cc
@@ -716,6 +716,28 @@
   return EphemeralRange();
 }
 
+EphemeralRange Editor::RangeBetweenPoints(const gfx::Point& start_point,
+                                          const gfx::Point& end_point) const {
+  const PositionWithAffinity start_position =
+      GetFrame().PositionForPoint(PhysicalOffset(start_point));
+  if (start_position.IsNull())
+    return EphemeralRange();
+  const VisiblePosition start_visible_position =
+      CreateVisiblePosition(start_position);
+  if (start_visible_position.IsNull())
+    return EphemeralRange();
+
+  const PositionWithAffinity end_position =
+      GetFrame().PositionForPoint(PhysicalOffset(end_point));
+  if (end_position.IsNull())
+    return EphemeralRange();
+  const VisiblePosition end_visible_position =
+      CreateVisiblePosition(end_position);
+  if (end_visible_position.IsNull())
+    return EphemeralRange();
+  return MakeRange(start_visible_position, end_visible_position);
+}
+
 void Editor::ComputeAndSetTypingStyle(CSSPropertyValueSet* style,
                                       InputEvent::InputType input_type) {
   if (!style || style->IsEmpty()) {
diff --git a/third_party/blink/renderer/core/editing/editor.h b/third_party/blink/renderer/core/editing/editor.h
index 7b836dc7..e5f9571 100644
--- a/third_party/blink/renderer/core/editing/editor.h
+++ b/third_party/blink/renderer/core/editing/editor.h
@@ -175,6 +175,8 @@
   void ComputeAndSetTypingStyle(CSSPropertyValueSet*, InputEvent::InputType);
 
   EphemeralRange RangeForPoint(const gfx::Point&) const;
+  EphemeralRange RangeBetweenPoints(const gfx::Point& start_point,
+                                    const gfx::Point& end_point) const;
 
   void RespondToChangedSelection();
   void SyncSelection(blink::SyncCondition force_sync);
diff --git a/third_party/blink/renderer/core/editing/ime/stylus_writing_gesture.cc b/third_party/blink/renderer/core/editing/ime/stylus_writing_gesture.cc
new file mode 100644
index 0000000..425cb00
--- /dev/null
+++ b/third_party/blink/renderer/core/editing/ime/stylus_writing_gesture.cc
@@ -0,0 +1,278 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "third_party/blink/renderer/core/editing/ime/stylus_writing_gesture.h"
+#include "third_party/blink/renderer/core/editing/editor.h"
+#include "third_party/blink/renderer/core/editing/ephemeral_range.h"
+#include "third_party/blink/renderer/core/editing/frame_selection.h"
+#include "third_party/blink/renderer/core/editing/ime/input_method_controller.h"
+#include "third_party/blink/renderer/core/editing/iterators/text_iterator.h"
+#include "third_party/blink/renderer/core/editing/plain_text_range.h"
+#include "third_party/blink/renderer/core/html/parser/html_parser_idioms.h"
+
+namespace blink {
+
+namespace {
+
+class StylusWritingTwoPointGesture : public StylusWritingGesture {
+ public:
+  ~StylusWritingTwoPointGesture() override = default;
+
+ protected:
+  StylusWritingTwoPointGesture(const gfx::Point& start_point,
+                               const gfx::Point& end_point,
+                               const String& text_alternative);
+
+  // Gets the text range in input between the start and end points of this
+  // gesture. Returns null if the gesture is not over valid text input.
+  absl::optional<PlainTextRange> GestureRange(LocalFrame*);
+
+  // End point of the gesure.
+  gfx::Point end_point_;
+};
+
+class StylusWritingGestureDelete : public StylusWritingTwoPointGesture {
+ public:
+  ~StylusWritingGestureDelete() override = default;
+
+  StylusWritingGestureDelete(const gfx::Point& start_point,
+                             const gfx::Point& end_point,
+                             const String& text_alternative);
+  bool MaybeApplyGesture(LocalFrame*) override;
+};
+
+class StylusWritingGestureRemoveSpaces : public StylusWritingTwoPointGesture {
+ public:
+  ~StylusWritingGestureRemoveSpaces() override = default;
+
+  StylusWritingGestureRemoveSpaces(const gfx::Point& start_point,
+                                   const gfx::Point& end_point,
+                                   const String& text_alternative);
+  bool MaybeApplyGesture(LocalFrame*) override;
+};
+
+class StylusWritingGestureAddText : public StylusWritingGesture {
+ public:
+  ~StylusWritingGestureAddText() override = default;
+
+  StylusWritingGestureAddText(const gfx::Point& start_point,
+                              const String& text_to_insert,
+                              const String& text_alternative);
+  bool MaybeApplyGesture(LocalFrame*) override;
+
+ private:
+  // Text to insert for the add text gesture. This also includes adding space
+  // character.
+  String text_to_insert_;
+};
+
+std::unique_ptr<StylusWritingGesture> CreateGesture(
+    mojom::blink::StylusWritingGestureDataPtr gesture_data) {
+  gfx::Point start_point = gesture_data->start_point;
+  String text_alternative = gesture_data->text_alternative;
+
+  switch (gesture_data->action) {
+    case mojom::blink::StylusWritingGestureAction::DELETE_TEXT: {
+      return std::make_unique<blink::StylusWritingGestureDelete>(
+          start_point, gesture_data->end_point.value(), text_alternative);
+    }
+    case mojom::blink::StylusWritingGestureAction::ADD_SPACE_OR_TEXT: {
+      return std::make_unique<blink::StylusWritingGestureAddText>(
+          start_point, gesture_data->text_to_insert, text_alternative);
+    }
+    case mojom::blink::StylusWritingGestureAction::REMOVE_SPACES: {
+      return std::make_unique<blink::StylusWritingGestureRemoveSpaces>(
+          start_point, gesture_data->end_point.value(), text_alternative);
+    }
+    default: {
+      NOTREACHED();
+      return nullptr;
+    }
+  }
+}
+
+// Gets the text range for continuous spaces, or range for first spaces found in
+// given gesture range.
+absl::optional<PlainTextRange> GetTextRangeForSpaces(
+    PlainTextRange& gesture_range,
+    const String& gesture_text) {
+  wtf_size_t space_start = kNotFound;
+  wtf_size_t space_end = kNotFound;
+  // Use this boolean to set the start/end offsets of space range.
+  bool space_found = false;
+
+  for (wtf_size_t index = 0; index < gesture_text.length(); index++) {
+    if (IsHTMLSpace(gesture_text[index])) {
+      if (!space_found) {
+        space_found = true;
+        space_start = index;
+      }
+      space_end = index + 1;
+    } else if (space_found) {
+      break;
+    }
+  }
+
+  if (!space_found)
+    return absl::nullopt;
+
+  // Return range for space wrt input text range.
+  return PlainTextRange(space_start + gesture_range.Start(),
+                        space_end + gesture_range.Start());
+}
+
+}  // namespace
+
+// static
+void StylusWritingGesture::ApplyGesture(
+    LocalFrame* local_frame,
+    mojom::blink::StylusWritingGestureDataPtr gesture_data) {
+  if (!local_frame->GetEditor().CanEdit())
+    return;
+
+  if (!local_frame->Selection().RootEditableElementOrDocumentElement())
+    return;
+
+  // TODO(editing-dev): The use of UpdateStyleAndLayout
+  // needs to be audited. See http://crbug.com/590369 for more details.
+  local_frame->GetDocument()->UpdateStyleAndLayout(
+      DocumentUpdateReason::kEditing);
+
+  InputMethodController& input_method_controller =
+      local_frame->GetInputMethodController();
+  // Finish composition if its active before doing gesture actions.
+  if (input_method_controller.HasComposition()) {
+    input_method_controller.FinishComposingText(
+        InputMethodController::kKeepSelection);
+  }
+
+  // Create gesture corresponding to gesture data action.
+  std::unique_ptr<StylusWritingGesture> gesture =
+      CreateGesture(std::move(gesture_data));
+  if (!gesture->MaybeApplyGesture(local_frame)) {
+    // If the Stylus writing gesture could not be applied due the gesture
+    // coordinates not being over a valid text position in the current focused
+    // input, then insert the alternative text recognized.
+    local_frame->GetEditor().InsertText(gesture->text_alternative_,
+                                        /* triggering_event = */ nullptr);
+  }
+}
+
+StylusWritingGesture::StylusWritingGesture(const gfx::Point& start_point,
+                                           const String& text_alternative)
+    : start_point_(start_point), text_alternative_(text_alternative) {}
+
+wtf_size_t StylusWritingGesture::GetStartTextIndex(LocalFrame* local_frame) {
+  auto* frame_view = local_frame->View();
+  DCHECK(frame_view);
+  return local_frame->Selection().CharacterIndexForPoint(
+      frame_view->ViewportToFrame(start_point_));
+}
+
+StylusWritingTwoPointGesture::StylusWritingTwoPointGesture(
+    const gfx::Point& start_point,
+    const gfx::Point& end_point,
+    const String& text_alternative)
+    : StylusWritingGesture(start_point, text_alternative),
+      end_point_(end_point) {}
+
+absl::optional<PlainTextRange> StylusWritingTwoPointGesture::GestureRange(
+    LocalFrame* local_frame) {
+  auto* frame_view = local_frame->View();
+  DCHECK(frame_view);
+  Element* const root_editable_element =
+      local_frame->Selection().RootEditableElementOrDocumentElement();
+  EphemeralRange ephemeral_range = local_frame->GetEditor().RangeBetweenPoints(
+      frame_view->ViewportToFrame(start_point_),
+      frame_view->ViewportToFrame(end_point_));
+  if (ephemeral_range.IsCollapsed())
+    return absl::nullopt;
+
+  PlainTextRange gesture_range =
+      PlainTextRange::Create(*root_editable_element, ephemeral_range);
+
+  if (gesture_range.IsNull() || gesture_range.Start() >= gesture_range.End()) {
+    // Gesture points do not have valid offsets in input.
+    return absl::nullopt;
+  }
+
+  return gesture_range;
+}
+
+StylusWritingGestureDelete::StylusWritingGestureDelete(
+    const gfx::Point& start_point,
+    const gfx::Point& end_point,
+    const String& text_alternative)
+    : StylusWritingTwoPointGesture(start_point, end_point, text_alternative) {}
+
+bool StylusWritingGestureDelete::MaybeApplyGesture(LocalFrame* frame) {
+  absl::optional<PlainTextRange> gesture_range = GestureRange(frame);
+  if (!gesture_range.has_value()) {
+    // Invalid gesture, return false to insert the alternative text.
+    return false;
+  }
+
+  // Delete the text between offsets and set cursor.
+  InputMethodController& input_method_controller =
+      frame->GetInputMethodController();
+  input_method_controller.ReplaceText("", gesture_range.value());
+  input_method_controller.SetEditableSelectionOffsets(
+      PlainTextRange(gesture_range->Start(), gesture_range->Start()));
+  return true;
+}
+
+StylusWritingGestureRemoveSpaces::StylusWritingGestureRemoveSpaces(
+    const gfx::Point& start_point,
+    const gfx::Point& end_point,
+    const String& text_alternative)
+    : StylusWritingTwoPointGesture(start_point, end_point, text_alternative) {}
+
+bool StylusWritingGestureRemoveSpaces::MaybeApplyGesture(LocalFrame* frame) {
+  absl::optional<PlainTextRange> gesture_range = GestureRange(frame);
+  if (!gesture_range.has_value()) {
+    // Invalid gesture, return false to insert the alternative text.
+    return false;
+  }
+
+  Element* const root_editable_element =
+      frame->Selection().RootEditableElementOrDocumentElement();
+  String gesture_text =
+      PlainText(gesture_range->CreateRange(*root_editable_element));
+  absl::optional<PlainTextRange> space_range =
+      GetTextRangeForSpaces(gesture_range.value(), gesture_text);
+  if (!space_range.has_value())
+    return false;
+
+  InputMethodController& input_method_controller =
+      frame->GetInputMethodController();
+  input_method_controller.ReplaceText("", space_range.value());
+  input_method_controller.SetEditableSelectionOffsets(
+      PlainTextRange(space_range->Start(), space_range->Start()));
+  return true;
+}
+
+StylusWritingGestureAddText::StylusWritingGestureAddText(
+    const gfx::Point& start_point,
+    const String& text_to_insert,
+    const String& text_alternative)
+    : StylusWritingGesture(start_point, text_alternative),
+      text_to_insert_(text_to_insert) {}
+
+bool StylusWritingGestureAddText::MaybeApplyGesture(LocalFrame* frame) {
+  wtf_size_t gesture_text_index = GetStartTextIndex(frame);
+  // When the gesture point is outside the input text range, we get a kNotFound.
+  // Return false here to insert the text alternative.
+  if (gesture_text_index == kNotFound)
+    return false;
+
+  InputMethodController& input_method_controller =
+      frame->GetInputMethodController();
+  input_method_controller.SetEditableSelectionOffsets(
+      PlainTextRange(gesture_text_index, gesture_text_index));
+  frame->GetEditor().InsertText(text_to_insert_,
+                                /* triggering_event = */ nullptr);
+  return true;
+}
+
+}  // namespace blink
diff --git a/third_party/blink/renderer/core/editing/ime/stylus_writing_gesture.h b/third_party/blink/renderer/core/editing/ime/stylus_writing_gesture.h
new file mode 100644
index 0000000..c721cdb
--- /dev/null
+++ b/third_party/blink/renderer/core/editing/ime/stylus_writing_gesture.h
@@ -0,0 +1,46 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_EDITING_IME_STYLUS_WRITING_GESTURE_H_
+#define THIRD_PARTY_BLINK_RENDERER_CORE_EDITING_IME_STYLUS_WRITING_GESTURE_H_
+
+#include "third_party/blink/public/mojom/input/stylus_writing_gesture.mojom-blink.h"
+#include "third_party/blink/renderer/core/frame/local_frame.h"
+#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
+#include "ui/gfx/geometry/point.h"
+
+namespace blink {
+
+// Class that receives the stylus writing gesture data and performs the
+// corresponding gesture action.
+class StylusWritingGesture {
+ public:
+  virtual ~StylusWritingGesture() = default;
+
+  static void ApplyGesture(LocalFrame*,
+                           mojom::blink::StylusWritingGestureDataPtr);
+
+ protected:
+  StylusWritingGesture(const gfx::Point& start_point,
+                       const String& text_alternative);
+
+  // Apply this gesture in the current focused input element from the set
+  // parameters and return true if the gesture coordinates are over a valid text
+  // input position and the gesture was applied. Return false otherwise so that
+  // the text alternative can be inserted at the current cursor.
+  virtual bool MaybeApplyGesture(LocalFrame*) = 0;
+
+  // Get the text index of the start_point_ in the current frame's focused
+  // input.
+  wtf_size_t GetStartTextIndex(LocalFrame*);
+
+  // Start point of the gesture.
+  gfx::Point start_point_;
+  // Alternate text to be inserted in case the gesture could not be applied.
+  String text_alternative_;
+};
+
+}  // namespace blink
+
+#endif  // THIRD_PARTY_BLINK_RENDERER_CORE_EDITING_IME_STYLUS_WRITING_GESTURE_H_
diff --git a/third_party/blink/renderer/core/editing/ime/stylus_writing_gesture_test.cc b/third_party/blink/renderer/core/editing/ime/stylus_writing_gesture_test.cc
new file mode 100644
index 0000000..0797c24
--- /dev/null
+++ b/third_party/blink/renderer/core/editing/ime/stylus_writing_gesture_test.cc
@@ -0,0 +1,204 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <gtest/gtest.h>
+#include "third_party/blink/public/mojom/input/stylus_writing_gesture.mojom-blink.h"
+#include "third_party/blink/renderer/core/css/style_engine.h"
+#include "third_party/blink/renderer/core/html/forms/html_input_element.h"
+#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/testing/unit_test_helpers.h"
+
+namespace blink {
+
+class StylusWritingGestureTest : public SimTest {
+ public:
+  StylusWritingGestureTest() = default;
+
+ protected:
+  static Vector<char> ReadAhemWoff2() {
+    return test::ReadFromFile(test::CoreTestDataPath("Ahem.woff2"))
+        ->CopyAs<Vector<char>>();
+  }
+
+  HTMLInputElement* SetUpSingleInput();
+
+  WebFrameWidgetImpl* WidgetImpl() {
+    return static_cast<WebFrameWidgetImpl*>(LocalFrameRoot().FrameWidget());
+  }
+
+  WebInputMethodController* Controller() {
+    return WidgetImpl()->GetActiveWebInputMethodController();
+  }
+
+  String text_alternative = "XX";
+};
+
+HTMLInputElement* StylusWritingGestureTest::SetUpSingleInput() {
+  SimRequest main_resource("https://example.com", "text/html");
+  SimSubresourceRequest font_resource("https://example.com/Ahem.woff2",
+                                      "font/woff2");
+
+  LoadURL("https://example.com");
+  main_resource.Complete(R"HTML(
+    <!doctype html>
+    <style>
+      @font-face {
+        font-family: custom-font;
+        src: url(https://example.com/Ahem.woff2) format("woff2");
+      }
+      body {
+        margin: 0;
+      }
+      #target {
+        font: 25px/1 custom-font, monospace;
+        padding: none;
+        border: none;
+      }
+    </style>
+    <input type='text' id='target'/>
+  )HTML");
+
+  Compositor().BeginFrame();
+  // Finish font loading, and trigger invalidations.
+  font_resource.Complete(ReadAhemWoff2());
+  GetDocument().GetStyleEngine().InvalidateStyleAndLayoutForFontUpdates();
+  Compositor().BeginFrame();
+  HTMLInputElement* input_element =
+      DynamicTo<HTMLInputElement>(*GetDocument().getElementById("target"));
+  input_element->Focus();
+  return input_element;
+}
+
+TEST_F(StylusWritingGestureTest, TestGestureDelete) {
+  auto* input = SetUpSingleInput();
+  input->SetValue("ABCD EFGH");
+  // Input value = "ABCD EFGH". Try to delete BCD.
+  // Expected value after delete gesture = "A EFGH". And cursor to be after A.
+  mojom::blink::StylusWritingGestureDataPtr gesture_data(
+      mojom::blink::StylusWritingGestureData::New());
+  gesture_data->action = mojom::blink::StylusWritingGestureAction::DELETE_TEXT;
+  gesture_data->start_point = gfx::Point(25, 15);
+  gesture_data->end_point = gfx::Point(100, 15);
+  gesture_data->text_alternative = text_alternative;
+
+  WidgetImpl()->HandleStylusWritingGestureAction(std::move(gesture_data));
+  WebRange range = Controller()->GetSelectionOffsets();
+  EXPECT_EQ("A EFGH", input->Value());
+  EXPECT_EQ(1, range.StartOffset());
+  EXPECT_EQ(1, range.EndOffset());
+
+  // Try to do delete gesture outside the current input range.
+  // This should insert the text alternative at current cursor.
+  mojom::blink::StylusWritingGestureDataPtr gesture_data2(
+      mojom::blink::StylusWritingGestureData::New());
+  gesture_data2->action = mojom::blink::StylusWritingGestureAction::DELETE_TEXT;
+  gesture_data2->start_point = gfx::Point(200, 15);
+  gesture_data2->end_point = gfx::Point(250, 15);
+  gesture_data2->text_alternative = text_alternative;
+
+  WidgetImpl()->HandleStylusWritingGestureAction(std::move(gesture_data2));
+  range = Controller()->GetSelectionOffsets();
+  EXPECT_EQ("AXX EFGH", input->Value());
+  EXPECT_EQ(3, range.StartOffset());
+  EXPECT_EQ(3, range.EndOffset());
+}
+
+TEST_F(StylusWritingGestureTest, TestGestureRemoveSpaces) {
+  auto* input = SetUpSingleInput();
+  input->SetValue("ABCD   EFGH");
+
+  // Input value = "ABCD   EFGH". Try to remove spaces after ABCD.
+  // Expected value after gesture = "ABCDEFGH". And cursor to be after D.
+  // We start gesture from C to F, and all spaces between to be removed.
+  mojom::blink::StylusWritingGestureDataPtr gesture_data(
+      mojom::blink::StylusWritingGestureData::New());
+  gesture_data->action =
+      mojom::blink::StylusWritingGestureAction::REMOVE_SPACES;
+  gesture_data->start_point = gfx::Point(75, 15);
+  gesture_data->end_point = gfx::Point(225, 15);
+  gesture_data->text_alternative = text_alternative;
+
+  WidgetImpl()->HandleStylusWritingGestureAction(std::move(gesture_data));
+  WebRange range = Controller()->GetSelectionOffsets();
+  EXPECT_EQ("ABCDEFGH", input->Value());
+  EXPECT_EQ(4, range.StartOffset());
+  EXPECT_EQ(4, range.EndOffset());
+
+  // Try to do remove space gesture outside the current input range.
+  // This should insert the text alternative at current cursor.
+  mojom::blink::StylusWritingGestureDataPtr gesture_data2(
+      mojom::blink::StylusWritingGestureData::New());
+  gesture_data2->action =
+      mojom::blink::StylusWritingGestureAction::REMOVE_SPACES;
+  gesture_data2->start_point = gfx::Point(250, 15);
+  gesture_data2->end_point = gfx::Point(300, 15);
+  gesture_data2->text_alternative = text_alternative;
+
+  WidgetImpl()->HandleStylusWritingGestureAction(std::move(gesture_data2));
+  range = Controller()->GetSelectionOffsets();
+  EXPECT_EQ("ABCDXXEFGH", input->Value());
+  EXPECT_EQ(6, range.StartOffset());
+  EXPECT_EQ(6, range.EndOffset());
+}
+
+TEST_F(StylusWritingGestureTest, TestGestureRemoveFirstSpace) {
+  auto* input = SetUpSingleInput();
+  input->SetValue("AB CD EF GH");
+
+  // Try to do remove space gesture over more than one space.
+  // This should remove the first space only.
+  mojom::blink::StylusWritingGestureDataPtr gesture_data(
+      mojom::blink::StylusWritingGestureData::New());
+  gesture_data->action =
+      mojom::blink::StylusWritingGestureAction::REMOVE_SPACES;
+  gesture_data->start_point = gfx::Point(25, 15);
+  gesture_data->end_point = gfx::Point(250, 15);
+  gesture_data->text_alternative = text_alternative;
+
+  WidgetImpl()->HandleStylusWritingGestureAction(std::move(gesture_data));
+  WebRange range = Controller()->GetSelectionOffsets();
+  EXPECT_EQ("ABCD EF GH", input->Value());
+  EXPECT_EQ(2, range.StartOffset());
+  EXPECT_EQ(2, range.EndOffset());
+}
+
+TEST_F(StylusWritingGestureTest, TestGestureAddSpaceOrText) {
+  auto* input = SetUpSingleInput();
+  input->SetValue("ABCDEFGH");
+
+  // Input value = "ABCDEFGH". Try to add space after ABCD.
+  // Expected value after gesture = "ABCD EFGH". And cursor to be after space.
+  mojom::blink::StylusWritingGestureDataPtr gesture_data(
+      mojom::blink::StylusWritingGestureData::New());
+  gesture_data->action =
+      mojom::blink::StylusWritingGestureAction::ADD_SPACE_OR_TEXT;
+  gesture_data->start_point = gfx::Point(105, 15);
+  gesture_data->text_to_insert = " ";
+  gesture_data->text_alternative = text_alternative;
+
+  WidgetImpl()->HandleStylusWritingGestureAction(std::move(gesture_data));
+  WebRange range = Controller()->GetSelectionOffsets();
+  EXPECT_EQ("ABCD EFGH", input->Value());
+  EXPECT_EQ(5, range.StartOffset());
+  EXPECT_EQ(5, range.EndOffset());
+
+  // Try to do add space gesture outside the current input range.
+  // This should insert the text alternative at current cursor.
+  mojom::blink::StylusWritingGestureDataPtr gesture_data2(
+      mojom::blink::StylusWritingGestureData::New());
+  gesture_data2->action =
+      mojom::blink::StylusWritingGestureAction::ADD_SPACE_OR_TEXT;
+  gesture_data2->start_point = gfx::Point(300, 15);
+  gesture_data2->text_to_insert = " ";
+  gesture_data2->text_alternative = text_alternative;
+
+  WidgetImpl()->HandleStylusWritingGestureAction(std::move(gesture_data2));
+  range = Controller()->GetSelectionOffsets();
+  EXPECT_EQ("ABCD XXEFGH", input->Value());
+  EXPECT_EQ(7, range.StartOffset());
+  EXPECT_EQ(7, range.EndOffset());
+}
+
+}  // namespace blink
diff --git a/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc b/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc
index d32fefe..542c95bc 100644
--- a/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc
+++ b/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc
@@ -69,6 +69,7 @@
 #include "third_party/blink/renderer/core/editing/frame_selection.h"
 #include "third_party/blink/renderer/core/editing/ime/edit_context.h"
 #include "third_party/blink/renderer/core/editing/ime/input_method_controller.h"
+#include "third_party/blink/renderer/core/editing/ime/stylus_writing_gesture.h"
 #include "third_party/blink/renderer/core/editing/selection_template.h"
 #include "third_party/blink/renderer/core/events/current_input_event.h"
 #include "third_party/blink/renderer/core/events/pointer_event_factory.h"
@@ -549,6 +550,14 @@
   std::move(callback).Run(absl::nullopt, absl::nullopt);
 }
 
+void WebFrameWidgetImpl::HandleStylusWritingGestureAction(
+    mojom::blink::StylusWritingGestureDataPtr gesture_data) {
+  LocalFrame* focused_frame = FocusedLocalFrameInWidget();
+  if (!focused_frame)
+    return;
+  StylusWritingGesture::ApplyGesture(focused_frame, std::move(gesture_data));
+}
+
 void WebFrameWidgetImpl::SetBackgroundOpaque(bool opaque) {
   View()->SetBaseBackgroundColorOverrideTransparent(!opaque);
 }
diff --git a/third_party/blink/renderer/core/frame/web_frame_widget_impl.h b/third_party/blink/renderer/core/frame/web_frame_widget_impl.h
index 130e4fc..a63dcc8 100644
--- a/third_party/blink/renderer/core/frame/web_frame_widget_impl.h
+++ b/third_party/blink/renderer/core/frame/web_frame_widget_impl.h
@@ -45,6 +45,7 @@
 #include "third_party/blink/public/common/input/web_gesture_device.h"
 #include "third_party/blink/public/mojom/drag/drag.mojom-blink.h"
 #include "third_party/blink/public/mojom/input/input_handler.mojom-blink-forward.h"
+#include "third_party/blink/public/mojom/input/stylus_writing_gesture.mojom-blink.h"
 #include "third_party/blink/public/mojom/manifest/display_mode.mojom-blink.h"
 #include "third_party/blink/public/mojom/page/widget.mojom-blink.h"
 #include "third_party/blink/public/mojom/scroll/scroll_into_view_params.mojom-blink-forward.h"
@@ -424,6 +425,10 @@
                          ui::mojom::blink::DragOperation,
                          base::OnceClosure callback) override;
 
+  // mojom::blink::FrameWidgetInputHandler overrides:
+  void HandleStylusWritingGestureAction(
+      mojom::blink::StylusWritingGestureDataPtr gesture_data) override;
+
   // Sets the display mode, which comes from the top-level browsing context and
   // is applied to all widgets.
   void SetDisplayMode(mojom::blink::DisplayMode);
diff --git a/third_party/blink/renderer/core/layout/layout_object_factory.cc b/third_party/blink/renderer/core/layout/layout_object_factory.cc
index a55024f..6f7df8d 100644
--- a/third_party/blink/renderer/core/layout/layout_object_factory.cc
+++ b/third_party/blink/renderer/core/layout/layout_object_factory.cc
@@ -193,7 +193,7 @@
     // marking a list-item ancestor with a size container-type for forced legacy
     // without re-attaching it during interleaved style recalc. Enforce
     // legacy/ng consistency between list-item and marker.
-    DCHECK(!RuntimeEnabledFeatures::LayoutNGTableFragmentationEnabled());
+    DCHECK(!RuntimeEnabledFeatures::LayoutNGPrintingEnabled());
     DCHECK(parent->GetLayoutObject());
     if (parent->GetLayoutObject()->IsLayoutNGObject())
       legacy = LegacyLayout::kAuto;
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_caret_rect.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_caret_rect.cc
index 9d89c46..6c6fe02a 100644
--- a/third_party/blink/renderer/core/layout/ng/inline/ng_caret_rect.cc
+++ b/third_party/blink/renderer/core/layout/ng/inline/ng_caret_rect.cc
@@ -153,6 +153,24 @@
       line_box.Current().OffsetInContainerFragment();
   const PhysicalRect line_box_rect(line_box_offset, line_box.Current().Size());
 
+  // If there are hanging spaces, grow the line rect to encompass them so the
+  // caret can be placed there. Note that per UAX#9 L1 and L2, trailing spaces
+  // are always visually at the end of the line in the paragraph direction.
+  const LayoutUnit hanging_inline_size =
+      line_box.Current()->LineBoxHangingInlineSize();
+  PhysicalRect line_box_rect_with_hanging = line_box_rect;
+  if (UNLIKELY(hanging_inline_size)) {
+    if (is_horizontal) {
+      if (IsRtl(line_box.Current().BaseDirection()))
+        line_box_rect_with_hanging.offset.left -= hanging_inline_size;
+      line_box_rect_with_hanging.size.width += hanging_inline_size;
+    } else {
+      if (IsRtl(line_box.Current().BaseDirection()))
+        line_box_rect_with_hanging.offset.top -= hanging_inline_size;
+      line_box_rect_with_hanging.size.height += hanging_inline_size;
+    }
+  }
+
   const NGInlineBreakToken* break_token = line_box.Current().InlineBreakToken();
   const bool is_last_line = !break_token || break_token->IsForcedBreak();
   const ComputedStyle& block_style = fragment.Style();
@@ -162,29 +180,39 @@
       (style.GetUnicodeBidi() != UnicodeBidi::kPlaintext ||
        IsLtr(ResolvedDirection(cursor)));
 
-  // For horizontal text, adjust the location in the x direction to ensure that
-  // it completely falls in the union of line box and containing block, and
-  // then round it to the nearest pixel.
+  // Adjust the location in the inline direction to ensure that it falls either
+  // on the line box proper, or on the intersection of the line's hanging text
+  // and the containing block. Then round the location to the nearest pixel.
+  // Additionally, since we don't want the caret to go past the start of the
+  // line or past the end of the container, we subtract the width of the caret
+  // in some cases.
   if (is_horizontal) {
-    if (should_align_caret_right) {
-      const LayoutUnit left_edge = std::min(LayoutUnit(), line_box_rect.X());
-      const LayoutUnit right_limit = line_box_rect.Right() - caret_width;
-      caret_location.left =
-          ClampAndRound(caret_location.left, left_edge, right_limit);
-    } else {
-      const LayoutUnit right_limit =
-          std::max(fragment.Size().width, line_box_rect.Right()) - caret_width;
-      caret_location.left =
-          ClampAndRound(caret_location.left, line_box_rect.X(), right_limit);
-    }
-    return PhysicalRect(caret_location, caret_size);
+    const LayoutUnit right_aligned_caret =
+        should_align_caret_right ? caret_width : LayoutUnit();
+    const LayoutUnit left_limit =
+        std::min(line_box_rect.X(),
+                 std::max(line_box_rect_with_hanging.X() - right_aligned_caret,
+                          LayoutUnit()));
+    const LayoutUnit right_limit = std::max(
+        line_box_rect.Right() - caret_width,
+        std::min(line_box_rect_with_hanging.Right() - right_aligned_caret,
+                 fragment.Size().width - caret_width));
+    caret_location.left =
+        ClampAndRound(caret_location.left, left_limit, right_limit);
+  } else {
+    const LayoutUnit bottom_aligned_caret =
+        should_align_caret_right ? caret_height : LayoutUnit();
+    const LayoutUnit top_limit =
+        std::min(line_box_rect.Y(),
+                 std::max(line_box_rect_with_hanging.Y() - bottom_aligned_caret,
+                          LayoutUnit()));
+    const LayoutUnit bottom_limit = std::max(
+        line_box_rect.Bottom() - caret_height,
+        std::min(line_box_rect_with_hanging.Bottom() - bottom_aligned_caret,
+                 fragment.Size().height - caret_height));
+    caret_location.top =
+        ClampAndRound(caret_location.top, top_limit, bottom_limit);
   }
-
-  // Similar adjustment and rounding for vertical text.
-  const LayoutUnit min_y = std::min(LayoutUnit(), line_box_offset.top);
-  const LayoutUnit bottom_limit =
-      std::max(fragment.Size().height, line_box_rect.Bottom()) - caret_height;
-  caret_location.top = ClampAndRound(caret_location.top, min_y, bottom_limit);
   return PhysicalRect(caret_location, caret_size);
 }
 
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_fragment_item.h b/third_party/blink/renderer/core/layout/ng/inline/ng_fragment_item.h
index 67d6fb4..d5bfae4 100644
--- a/third_party/blink/renderer/core/layout/ng/inline/ng_fragment_item.h
+++ b/third_party/blink/renderer/core/layout/ng/inline/ng_fragment_item.h
@@ -304,6 +304,11 @@
     return NGLineBoxType::kNormalLineBox;
   }
 
+  LayoutUnit LineBoxHangingInlineSize() const {
+    DCHECK_EQ(Type(), kLine);
+    return LineBoxFragment()->HangingInlineSize();
+  }
+
   static PhysicalRect LocalVisualRectFor(const LayoutObject& layout_object);
 
   // Re-compute the ink overflow for the |cursor| until its end.
@@ -362,9 +367,7 @@
     return IsHorizontalWritingMode(GetWritingMode());
   }
 
-  WritingMode GetWritingMode() const {
-    return Style().GetWritingMode();
-  }
+  WritingMode GetWritingMode() const { return Style().GetWritingMode(); }
 
   // Functions for |TextItem|, |SvgTextItem|, and |GeneratedTextItem|.
   NGTextType TextType() const {
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm.cc
index 4dde00b1..f5c9d7e 100644
--- a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm.cc
+++ b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm.cc
@@ -160,31 +160,21 @@
   if (IsLtr(line_info->BaseDirection()))
     return LayoutUnit();
 
-  // If the hang_width cause overflow, we don't want to adjust the line_offset
-  // so that it becomes negative, which causes some difficulties for the
-  // NGLayoutOverflowCalculator to apply its own adjustements in the
-  // AdjustOverflowForHanging function. Instead, we'll shift the line items so
-  // that we ignore the hanging width when the NGInlineLayoutStateStack computes
-  // their positions in ComputeInlinePositions function.
+  // If !line_info->ShouldHangTrailingSpaces(), the hang width is not considered
+  // in ApplyTextAlign, and so line_offset points to where the left edge of the
+  // hanging spaces should be. Since the line box rect has to start at the left
+  // edge of the text instead (needed for caret positioning), we increase
+  // line_offset.
   LayoutUnit hang_width = line_info->HangWidth();
-  if (line_offset < hang_width) {
-    // If we haven't considered the hang_width in ApplyTextAlign, we might end
-    // up with a negative line_offset, so shift the offset to ignore hanging
-    // spaces.
-    if (!line_info->ShouldHangTrailingSpaces())
-      line_offset += hang_width;
-    return -hang_width;
+  if (!line_info->ShouldHangTrailingSpaces()) {
+    line_offset += hang_width;
   }
 
-  // At this point we have a RTL line with hanging spaces that shouldn't be
-  // ignored based on the text-align property. Hence the final line_offset value
-  // should consider the hang_width. Note that this line_offset will be used
-  // later to compute the caret position in ComputeLocalCaretRectAtTextOffset,
-  // that's why we need to adjust the offset. Once we adjust the line_offset, we
-  // can use 0 as initial position for the line items, as we do in the case of a
-  // LTR line.
-  line_offset -= hang_width;
-  return LayoutUnit();
+  // Now line_offset always points to where the left edge of the text should be.
+  // If there are any hanging spaces, the starting position of the line must be
+  // offset by the width of the hanging spaces so that the text starts at
+  // line_offset.
+  return -hang_width;
 }
 
 void NGInlineLayoutAlgorithm::RebuildBoxStates(
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm_test.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm_test.cc
index 14ccc9f..ae16108b 100644
--- a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm_test.cc
+++ b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm_test.cc
@@ -7,6 +7,7 @@
 #include <sstream>
 #include "testing/gmock/include/gmock/gmock.h"
 #include "third_party/blink/renderer/core/dom/tag_collection.h"
+#include "third_party/blink/renderer/core/html/forms/html_text_area_element.h"
 #include "third_party/blink/renderer/core/layout/layout_block_flow.h"
 #include "third_party/blink/renderer/core/layout/ng/inline/ng_inline_box_state.h"
 #include "third_party/blink/renderer/core/layout/ng/inline/ng_inline_break_token.h"
@@ -704,6 +705,86 @@
                 *To<LayoutBlockFlow>(GetLayoutObjectByElementId("target"))));
 }
 
+TEST_F(NGInlineLayoutAlgorithmTest, LineBoxWithHangingWidthRTLRightAligned) {
+  LoadAhem();
+  InsertStyleElement(
+      "textarea {"
+      "  width: 100px;"
+      "  text-align: right;"
+      "  font: 10px/10px Ahem;"
+      "}");
+  SetBodyInnerHTML(R"HTML(
+    <!DOCTYPE html>
+    <textarea dir="rtl" id="hangingDoesntOverflow">abc  </textarea>
+    <textarea dir="rtl" id="hangingOverflows">abc        </textarea>
+  )HTML");
+
+  HTMLTextAreaElement* hanging_doesnt_overflow =
+      To<HTMLTextAreaElement>(GetElementById("hangingDoesntOverflow"));
+  NGInlineCursor hanging_doesnt_overflow_cursor(*To<LayoutBlockFlow>(
+      hanging_doesnt_overflow->InnerEditorElement()->GetLayoutObject()));
+  hanging_doesnt_overflow_cursor.MoveToFirstLine();
+  EXPECT_TRUE(hanging_doesnt_overflow_cursor.IsNotNull());
+  PhysicalRect hanging_doesnt_overflow_rect(
+      hanging_doesnt_overflow_cursor.Current().OffsetInContainerFragment(),
+      hanging_doesnt_overflow_cursor.Current().Size());
+  EXPECT_EQ(PhysicalRect(70, 0, 30, 10), hanging_doesnt_overflow_rect);
+
+  HTMLTextAreaElement* hanging_overflows =
+      To<HTMLTextAreaElement>(GetElementById("hangingOverflows"));
+  NGInlineCursor hanging_overflows_cursor(*To<LayoutBlockFlow>(
+      hanging_overflows->InnerEditorElement()->GetLayoutObject()));
+  hanging_overflows_cursor.MoveToFirstLine();
+  EXPECT_TRUE(hanging_overflows_cursor.IsNotNull());
+  PhysicalRect hanging_overflows_rect(
+      hanging_overflows_cursor.Current().OffsetInContainerFragment(),
+      hanging_overflows_cursor.Current().Size());
+  EXPECT_EQ(PhysicalRect(70, 0, 30, 10), hanging_overflows_rect);
+}
+
+TEST_F(NGInlineLayoutAlgorithmTest, LineBoxWithHangingWidthRTLCenterAligned) {
+  LoadAhem();
+  InsertStyleElement(
+      "textarea {"
+      "  width: 100px;"
+      "  text-align: center;"
+      "  font: 10px/10px Ahem;"
+      "}");
+  SetBodyInnerHTML(R"HTML(
+    <!DOCTYPE html>
+    <textarea dir="rtl" id="a">abc  </textarea>
+    <textarea dir="rtl" id="b">abc      </textarea>
+  )HTML");
+
+  HTMLTextAreaElement* a_textarea =
+      To<HTMLTextAreaElement>(GetElementById("a"));
+  NGInlineCursor a_cursor(*To<LayoutBlockFlow>(
+      a_textarea->InnerEditorElement()->GetLayoutObject()));
+  a_cursor.MoveToFirstLine();
+  EXPECT_TRUE(a_cursor.IsNotNull());
+  PhysicalRect a_rect(a_cursor.Current().OffsetInContainerFragment(),
+                      a_cursor.Current().Size());
+  // The line size is 30px and the hanging width is 20px. The rectangle
+  // containing the line and the hanging width is centered, so its right edge
+  // is at (100 + 30 + 20)/2 = 75px. Since the line's base direction is RTL, the
+  // text is at the right and its left edge is at 75px - 30 = 45px.
+  EXPECT_EQ(PhysicalRect(45, 0, 30, 10), a_rect);
+
+  HTMLTextAreaElement* b_textarea =
+      To<HTMLTextAreaElement>(GetElementById("b"));
+  NGInlineCursor b_cursor(*To<LayoutBlockFlow>(
+      b_textarea->InnerEditorElement()->GetLayoutObject()));
+  b_cursor.MoveToFirstLine();
+  EXPECT_TRUE(b_cursor.IsNotNull());
+  PhysicalRect b_rect(b_cursor.Current().OffsetInContainerFragment(),
+                      b_cursor.Current().Size());
+  // The line size is 30px and the hanging width is 60px. The rectangle
+  // containing the line and the hanging width is centered, so its right edge
+  // is at (100 + 30 + 60)/2 = 95px. Since the line's base direction is RTL, the
+  // text is at the right and its left edge is at 95px - 30 = 65px.
+  EXPECT_EQ(PhysicalRect(65, 0, 30, 10), b_rect);
+}
+
 #undef MAYBE_VerticalAlignBottomReplaced
 }  // namespace
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_physical_line_box_fragment.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_physical_line_box_fragment.cc
index 315803a..90b0d49 100644
--- a/third_party/blink/renderer/core/layout/ng/inline/ng_physical_line_box_fragment.cc
+++ b/third_party/blink/renderer/core/layout/ng/inline/ng_physical_line_box_fragment.cc
@@ -20,6 +20,7 @@
 
 struct SameSizeAsNGPhysicalLineBoxFragment : NGPhysicalFragment {
   FontHeight metrics;
+  LayoutUnit hanging_inline_size;
 };
 
 ASSERT_SIZE(NGPhysicalLineBoxFragment, SameSizeAsNGPhysicalLineBoxFragment);
@@ -44,11 +45,11 @@
                          builder->GetWritingMode(),
                          kFragmentLineBox,
                          builder->line_box_type_),
-      metrics_(builder->metrics_) {
+      metrics_(builder->metrics_),
+      hanging_inline_size_(builder->hang_inline_size_) {
   // A line box must have a metrics unless it's an empty line box.
   DCHECK(!metrics_.IsEmpty() || IsEmptyLineBox());
   base_direction_ = static_cast<unsigned>(builder->base_direction_);
-  has_hanging_ = builder->hang_inline_size_ != 0;
   has_propagated_descendants_ = has_floating_descendants_for_paint_ ||
                                 HasOutOfFlowPositionedDescendants() ||
                                 builder->unpositioned_list_marker_;
@@ -57,9 +58,10 @@
 NGPhysicalLineBoxFragment::NGPhysicalLineBoxFragment(
     PassKey key,
     const NGPhysicalLineBoxFragment& other)
-    : NGPhysicalFragment(other), metrics_(other.metrics_) {
+    : NGPhysicalFragment(other),
+      metrics_(other.metrics_),
+      hanging_inline_size_(other.hanging_inline_size_) {
   base_direction_ = other.base_direction_;
-  has_hanging_ = other.has_hanging_;
   has_propagated_descendants_ = other.has_propagated_descendants_;
 }
 
@@ -120,7 +122,7 @@
 
   PhysicalRect overflow;
   AddScrollableOverflowForInlineChild(container, container_style, line,
-                                      has_hanging_, cursor, height_type,
+                                      HasHanging(), cursor, height_type,
                                       &overflow);
 
   // Make sure we include the inline-size of the line-box in the overflow.
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_physical_line_box_fragment.h b/third_party/blink/renderer/core/layout/ng/inline/ng_physical_line_box_fragment.h
index f5a725a..051e430b 100644
--- a/third_party/blink/renderer/core/layout/ng/inline/ng_physical_line_box_fragment.h
+++ b/third_party/blink/renderer/core/layout/ng/inline/ng_physical_line_box_fragment.h
@@ -49,7 +49,9 @@
   bool HasPropagatedDescendants() const { return has_propagated_descendants_; }
 
   // True if there is any hanging white-space or similar.
-  bool HasHanging() const { return has_hanging_; }
+  bool HasHanging() const { return hanging_inline_size_ > 0; }
+
+  LayoutUnit HangingInlineSize() const { return hanging_inline_size_; }
 
   const FontHeight& Metrics() const { return metrics_; }
 
@@ -89,6 +91,7 @@
 
  private:
   FontHeight metrics_;
+  LayoutUnit hanging_inline_size_;
 };
 
 template <>
diff --git a/third_party/blink/renderer/core/layout/ng/ng_physical_fragment.cc b/third_party/blink/renderer/core/layout/ng/ng_physical_fragment.cc
index f8af03f..790f43c 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_physical_fragment.cc
+++ b/third_party/blink/renderer/core/layout/ng/ng_physical_fragment.cc
@@ -433,7 +433,6 @@
           other.depends_on_percentage_block_size_),
       children_valid_(other.children_valid_),
       has_propagated_descendants_(other.has_propagated_descendants_),
-      has_hanging_(other.has_hanging_),
       type_(other.type_),
       sub_type_(other.sub_type_),
       style_variant_(other.style_variant_),
diff --git a/third_party/blink/renderer/core/layout/ng/ng_physical_fragment.h b/third_party/blink/renderer/core/layout/ng/ng_physical_fragment.h
index c87bd76..bdb9387 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_physical_fragment.h
+++ b/third_party/blink/renderer/core/layout/ng/ng_physical_fragment.h
@@ -695,10 +695,9 @@
   unsigned depends_on_percentage_block_size_ : 1;
   mutable unsigned children_valid_ : 1;
 
-  // The following bitfields are only to be used by NGPhysicalLineBoxFragment
+  // The following bitfield is only to be used by NGPhysicalLineBoxFragment
   // (it's defined here to save memory, since that class has no bitfields).
   unsigned has_propagated_descendants_ : 1;
-  unsigned has_hanging_ : 1;
 
   const unsigned type_ : 1;           // NGFragmentType
   const unsigned sub_type_ : 4;       // NGBoxType, NGTextType, or NGLineBoxType
diff --git a/third_party/blink/renderer/core/page/scoped_page_pauser.cc b/third_party/blink/renderer/core/page/scoped_page_pauser.cc
index 501019a..98bc024 100644
--- a/third_party/blink/renderer/core/page/scoped_page_pauser.cc
+++ b/third_party/blink/renderer/core/page/scoped_page_pauser.cc
@@ -41,7 +41,11 @@
     return;
 
   SetPaused(true);
-  pause_handle_ = ThreadScheduler::Current()->PauseScheduler();
+  pause_handle_ = ThreadScheduler::Current()->ToMainThreadScheduler()
+                      ? ThreadScheduler::Current()
+                            ->ToMainThreadScheduler()
+                            ->PauseScheduler()
+                      : nullptr;
 }
 
 ScopedPagePauser::~ScopedPagePauser() {
diff --git a/third_party/blink/renderer/core/page/scoped_page_pauser.h b/third_party/blink/renderer/core/page/scoped_page_pauser.h
index 9be24a4d..ff1ff2f5 100644
--- a/third_party/blink/renderer/core/page/scoped_page_pauser.h
+++ b/third_party/blink/renderer/core/page/scoped_page_pauser.h
@@ -21,7 +21,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_CORE_PAGE_SCOPED_PAGE_PAUSER_H_
 
 #include "third_party/blink/renderer/core/core_export.h"
-#include "third_party/blink/renderer/platform/scheduler/public/thread_scheduler.h"
+#include "third_party/blink/renderer/platform/scheduler/public/main_thread_scheduler.h"
 #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
 
 namespace blink {
@@ -43,7 +43,7 @@
   static void SetPaused(bool);
   static bool IsActive();
 
-  std::unique_ptr<ThreadScheduler::RendererPauseHandle> pause_handle_;
+  std::unique_ptr<MainThreadScheduler::RendererPauseHandle> pause_handle_;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/paint/applied_decoration_painter.cc b/third_party/blink/renderer/core/paint/applied_decoration_painter.cc
index eeced84..bc8ae84 100644
--- a/third_party/blink/renderer/core/paint/applied_decoration_painter.cc
+++ b/third_party/blink/renderer/core/paint/applied_decoration_painter.cc
@@ -11,15 +11,19 @@
 namespace blink {
 
 void AppliedDecorationPainter::Paint(const cc::PaintFlags* flags) {
+  ETextDecorationStyle decoration_style = decoration_info_.DecorationStyle();
+
   context_.SetStrokeStyle(decoration_info_.StrokeStyle());
   context_.SetStrokeColor(decoration_info_.LineColor());
 
   AutoDarkMode auto_dark_mode(
       PaintAutoDarkMode(decoration_info_.TargetStyle(),
                         DarkModeFilter::ElementRole::kForeground));
-  switch (decoration_info_.DecorationStyle()) {
+
+  // TODO(crbug.com/1346281) make other decoration styles work with PaintFlags
+  switch (decoration_style) {
     case ETextDecorationStyle::kWavy:
-      StrokeWavyTextDecoration(flags);
+      PaintWavyTextDecoration();
       break;
     case ETextDecorationStyle::kDotted:
     case ETextDecorationStyle::kDashed:
@@ -38,8 +42,7 @@
   }
 }
 
-void AppliedDecorationPainter::StrokeWavyTextDecoration(
-    const cc::PaintFlags* flags) {
+void AppliedDecorationPainter::PaintWavyTextDecoration() {
   // We need this because of the clipping we're doing below, as we paint both
   // overlines and underlines here. That clip would hide the overlines, when
   // painting the underlines.
@@ -49,16 +52,21 @@
 
   // The wavy line is larger than the line, as we add whole waves before and
   // after the line in TextDecorationInfo::PrepareWavyStrokePath().
-  context_.Clip(decoration_info_.Bounds());
+  gfx::PointF origin = decoration_info_.Bounds().origin();
 
-  absl::optional<Path> path = decoration_info_.StrokePath();
   AutoDarkMode auto_dark_mode(
       PaintAutoDarkMode(decoration_info_.TargetStyle(),
                         DarkModeFilter::ElementRole::kForeground));
-  if (flags)
-    context_.DrawPath(path->GetSkPath(), *flags, auto_dark_mode);
-  else
-    context_.StrokePath(path.value(), auto_dark_mode);
+  cc::PaintFlags flags;
+
+  flags.setAntiAlias(true);
+  flags.setShader(PaintShader::MakePaintRecord(
+      decoration_info_.WavyTileRecord(),
+      gfx::RectFToSkRect(decoration_info_.WavyTileRect()), SkTileMode::kRepeat,
+      SkTileMode::kDecal, nullptr));
+  context_.Translate(origin.x(), origin.y());
+  context_.DrawRect(gfx::RectFToSkRect(decoration_info_.WavyPaintRect()), flags,
+                    auto_dark_mode);
 }
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/paint/applied_decoration_painter.h b/third_party/blink/renderer/core/paint/applied_decoration_painter.h
index e7256e27..c4b08fc 100644
--- a/third_party/blink/renderer/core/paint/applied_decoration_painter.h
+++ b/third_party/blink/renderer/core/paint/applied_decoration_painter.h
@@ -26,7 +26,7 @@
   void Paint(const cc::PaintFlags* flags = nullptr);
 
  private:
-  void StrokeWavyTextDecoration(const cc::PaintFlags* flags);
+  void PaintWavyTextDecoration();
 
   GraphicsContext& context_;
   const TextDecorationInfo& decoration_info_;
diff --git a/third_party/blink/renderer/core/paint/text_decoration_info.cc b/third_party/blink/renderer/core/paint/text_decoration_info.cc
index 6eca63e..892ff4f1 100644
--- a/third_party/blink/renderer/core/paint/text_decoration_info.cc
+++ b/third_party/blink/renderer/core/paint/text_decoration_info.cc
@@ -144,6 +144,139 @@
   return stroke_style;
 }
 
+struct WavyParams {
+  float resolved_thickness;
+  bool spelling_grammar;
+  Color color;
+};
+
+float WavyDecorationSizing(const WavyParams& params) {
+  // Minimum unit we use to compute control point distance and step to define
+  // the path of the Bezier curve.
+  return std::max<float>(2, params.resolved_thickness);
+}
+
+float WavyControlPointDistance(const WavyParams& params) {
+  // Distance between decoration's axis and Bezier curve's control points. The
+  // height of the curve is based on this distance. Increases the curve's height
+  // as strokeThickness increases to make the curve look better.
+  if (params.spelling_grammar)
+    return 5;
+
+  return 3.5 * WavyDecorationSizing(params);
+}
+
+float WavyStep(const WavyParams& params) {
+  // Increment used to form the diamond shape between start point (p1), control
+  // points and end point (p2) along the axis of the decoration. Makes the curve
+  // wider as strokeThickness increases to make the curve look better.
+  if (params.spelling_grammar)
+    return 3;
+
+  return 2.5 * WavyDecorationSizing(params);
+}
+
+// Computes the wavy pattern rect, which is where the desired wavy pattern would
+// be found when painting the wavy stroke path at the origin, or in other words,
+// how far PrepareWavyTileRecord needs to translate in the opposite direction
+// when painting to ensure that nothing is painted at y<0.
+gfx::RectF ComputeWavyPatternRect(const WavyParams& params,
+                                  const Path& stroke_path) {
+  StrokeData stroke_data;
+  stroke_data.SetThickness(params.resolved_thickness);
+
+  // Expand the stroke rect to integer y coordinates in both directions, to
+  // avoid messing with the vertical antialiasing.
+  gfx::RectF stroke_rect = stroke_path.StrokeBoundingRect(stroke_data);
+  DCHECK_LT(stroke_rect.y(), 0.f);
+  float top = -std::ceilf(std::fabsf(stroke_rect.y()));
+  float bottom = std::ceilf(stroke_rect.bottom());
+  return {0.f, top, 2.f * WavyStep(params), bottom - top};
+}
+
+// Prepares a path for a cubic Bezier curve repeated three times, yielding a
+// wavy pattern that we can cut into a tiling shader (PrepareWavyTileRecord).
+//
+// The result ignores the local origin, line offset, and (wavy) double offset,
+// so the midpoints are always at y=0.5, while the phase is shifted for either
+// wavy or spelling/grammar decorations so the desired pattern starts at x=0.
+//
+// The start point, control points (cp1 and cp2), and end point of each curve
+// form a diamond shape:
+//
+//            cp2                      cp2                      cp2
+// ---         +                        +                        +
+// |               x=0
+// | control         |--- spelling/grammar ---|
+// | point          . .                      . .                      . .
+// | distance     .     .                  .     .                  .     .
+// |            .         .              .         .              .         .
+// +-- y=0.5   .            +           .            +           .            +
+//  .         .              .         .              .         .
+//    .     .                  .     .                  .     .
+//      . .                      . .                      . .
+//                          |-------- other ---------|
+//                        x=0
+//             +                        +                        +
+//            cp1                      cp1                      cp1
+// |-----------|------------|
+//     step         step
+Path PrepareWavyStrokePath(const WavyParams& params) {
+  float control_point_distance = WavyControlPointDistance(params);
+  float step = WavyStep(params);
+
+  // We paint the wave before and after the text line (to cover the whole length
+  // of the line) and then we clip it at
+  // AppliedDecorationPainter::StrokeWavyTextDecoration().
+  // Offset the start point, so the beizer curve starts before the current line,
+  // that way we can clip it exactly the same way in both ends.
+  // For spelling and grammar errors we offset by half a step less, to get a
+  // result closer to Microsoft Word circa 2021.
+  float phase_shift = (params.spelling_grammar ? -1.5f : -2.f) * step;
+
+  // Midpoints at y=0.5, to reduce vertical antialiasing.
+  gfx::PointF start{phase_shift, 0.5f};
+  gfx::PointF end{start + gfx::Vector2dF(2.f * step, 0.f)};
+  gfx::PointF cp1{start + gfx::Vector2dF(step, +control_point_distance)};
+  gfx::PointF cp2{start + gfx::Vector2dF(step, -control_point_distance)};
+
+  Path result{};
+  result.MoveTo(start);
+
+  result.AddBezierCurveTo(cp1, cp2, end);
+  cp1.set_x(cp1.x() + 2.f * step);
+  cp2.set_x(cp2.x() + 2.f * step);
+  end.set_x(end.x() + 2.f * step);
+  result.AddBezierCurveTo(cp1, cp2, end);
+  cp1.set_x(cp1.x() + 2.f * step);
+  cp2.set_x(cp2.x() + 2.f * step);
+  end.set_x(end.x() + 2.f * step);
+  result.AddBezierCurveTo(cp1, cp2, end);
+
+  return result;
+}
+
+sk_sp<cc::PaintRecord> PrepareWavyTileRecord(const WavyParams& params,
+                                             const Path& stroke_path,
+                                             const gfx::RectF& pattern_rect) {
+  cc::PaintFlags flags;
+  flags.setAntiAlias(true);
+  flags.setColor(params.color.Rgb());
+  flags.setStyle(cc::PaintFlags::kStroke_Style);
+  flags.setStrokeWidth(params.resolved_thickness);
+
+  // Create a canvas with origin (0,0) and size of the wavy pattern rect.
+  PaintRecorder recorder;
+  recorder.beginRecording(pattern_rect.width(), pattern_rect.height());
+
+  // Translate the wavy pattern so that nothing is painted at y<0.
+  cc::RecordPaintCanvas* canvas = recorder.getRecordingCanvas();
+  canvas->translate(-pattern_rect.x(), -pattern_rect.y());
+  canvas->cc::PaintCanvas::drawPath(stroke_path.GetSkPath(), flags);
+
+  return recorder.finishRecordingAsPicture();
+}
+
 }  // anonymous namespace
 
 TextDecorationInfo::TextDecorationInfo(
@@ -302,12 +435,16 @@
     case ETextDecorationStyle::kDotted:
     case ETextDecorationStyle::kDashed:
       line_data_.stroke_path = PrepareDottedOrDashedStrokePath();
+      line_data_.wavy_tile_record.reset();
       break;
     case ETextDecorationStyle::kWavy:
-      line_data_.stroke_path = PrepareWavyStrokePath();
+      line_data_.stroke_path.reset();
+      ComputeWavyLineData(line_data_.wavy_pattern_rect,
+                          line_data_.wavy_tile_record);
       break;
     default:
       line_data_.stroke_path.reset();
+      line_data_.wavy_tile_record.reset();
   }
 }
 
@@ -481,6 +618,33 @@
   return thickness;
 }
 
+void TextDecorationInfo::ComputeWavyLineData(
+    gfx::RectF& pattern_rect,
+    sk_sp<cc::PaintRecord>& tile_record) const {
+  struct WavyCache {
+    WavyParams key;
+    gfx::RectF pattern_rect;
+    sk_sp<cc::PaintRecord> tile_record;
+  };
+
+  DEFINE_STATIC_LOCAL(absl::optional<WavyCache>, wavy_cache, (absl::nullopt));
+
+  if (wavy_cache && wavy_cache->key.resolved_thickness == ResolvedThickness() &&
+      wavy_cache->key.spelling_grammar == IsSpellingOrGrammarError() &&
+      wavy_cache->key.color == LineColor()) {
+    pattern_rect = wavy_cache->pattern_rect;
+    tile_record = wavy_cache->tile_record;
+    return;
+  }
+
+  WavyParams params{ResolvedThickness(), IsSpellingOrGrammarError(),
+                    LineColor()};
+  Path stroke_path = PrepareWavyStrokePath(params);
+  pattern_rect = ComputeWavyPatternRect(params, stroke_path);
+  tile_record = PrepareWavyTileRecord(params, stroke_path, pattern_rect);
+  wavy_cache = WavyCache{params, pattern_rect, tile_record};
+}
+
 gfx::RectF TextDecorationInfo::Bounds() const {
   gfx::PointF start_point = StartPoint();
   switch (DecorationStyle()) {
@@ -513,18 +677,42 @@
   return line_data_.stroke_path.value().StrokeBoundingRect(stroke_data);
 }
 
+// Returns the wavy bounds, which is the same size as the wavy paint rect but
+// at the origin needed by the actual decoration, for the global transform.
+//
+// The origin is the sum of the local origin, line offset, (wavy) double offset,
+// and the origin of the wavy pattern rect (around minus half the amplitude).
 gfx::RectF TextDecorationInfo::BoundsForWavy() const {
-  StrokeData stroke_data;
-  stroke_data.SetThickness(ResolvedThickness());
-  auto bounding_rect = line_data_.stroke_path->StrokeBoundingRect(stroke_data);
-
-  bounding_rect.set_x(StartPoint().x());
-  bounding_rect.set_width(width_);
-  return bounding_rect;
+  gfx::SizeF size = WavyPaintRect().size();
+  gfx::PointF origin = line_data_.wavy_pattern_rect.origin();
+  origin += StartPoint().OffsetFromOrigin();
+  origin += gfx::Vector2dF{0.f, DoubleOffset() * line_data_.wavy_offset_factor};
+  return {origin, size};
 }
 
-absl::optional<Path> TextDecorationInfo::StrokePath() const {
-  return line_data_.stroke_path;
+// Returns the wavy paint rect, which has the height of the wavy tile rect but
+// the width needed by the actual decoration, for the DrawRect operation.
+//
+// The origin is still (0,0) so that the shader local matrix is independent of
+// the origin of the decoration, allowing Skia to cache the tile. To determine
+// the origin of the decoration, use Bounds().origin().
+gfx::RectF TextDecorationInfo::WavyPaintRect() const {
+  gfx::RectF result = WavyTileRect();
+  result.set_width(width_);
+  return result;
+}
+
+// Returns the wavy tile rect, which is the same size as the wavy pattern rect
+// but at origin (0,0), for converting the PaintRecord to a PaintShader.
+gfx::RectF TextDecorationInfo::WavyTileRect() const {
+  gfx::RectF result = line_data_.wavy_pattern_rect;
+  result.set_x(0.f);
+  result.set_y(0.f);
+  return result;
+}
+
+sk_sp<cc::PaintRecord> TextDecorationInfo::WavyTileRecord() const {
+  return line_data_.wavy_tile_record;
 }
 
 void TextDecorationInfo::SetHighlightOverrideColor(
@@ -532,32 +720,6 @@
   highlight_override_ = color;
 }
 
-float TextDecorationInfo::WavyDecorationSizing() const {
-  // Minimum unit we use to compute control point distance and step to define
-  // the path of the Bezier curve.
-  return std::max<float>(2, ResolvedThickness());
-}
-
-float TextDecorationInfo::ControlPointDistanceFromResolvedThickness() const {
-  // Distance between decoration's axis and Bezier curve's control points. The
-  // height of the curve is based on this distance. Increases the curve's height
-  // as strokeThickness increases to make the curve look better.
-  if (IsSpellingOrGrammarError())
-    return 5;
-
-  return 3.5 * WavyDecorationSizing();
-}
-
-float TextDecorationInfo::StepFromResolvedThickness() const {
-  // Increment used to form the diamond shape between start point (p1), control
-  // points and end point (p2) along the axis of the decoration. Makes the curve
-  // wider as strokeThickness increases to make the curve look better.
-  if (IsSpellingOrGrammarError())
-    return 3;
-
-  return 2.5 * WavyDecorationSizing();
-}
-
 Path TextDecorationInfo::PrepareDottedOrDashedStrokePath() const {
   // These coordinate transforms need to match what's happening in
   // GraphicsContext's drawLineForText and drawLine.
@@ -567,118 +729,4 @@
       TextDecorationStyleToStrokeStyle(DecorationStyle()));
 }
 
-/*
- * Prepare a path for a cubic Bezier curve and repeat the same pattern long the
- * the decoration's axis.  The start point (p1), controlPoint1, controlPoint2
- * and end point (p2) of the Bezier curve form a diamond shape:
- *
- *                              step
- *                         |-----------|
- *
- *                   controlPoint1
- *                         +
- *
- *
- *                  . .
- *                .     .
- *              .         .
- * (x1, y1) p1 +           .            + p2 (x2, y2) - <--- Decoration's axis
- *                          .         .               |
- *                            .     .                 |
- *                              . .                   | controlPointDistance
- *                                                    |
- *                                                    |
- *                         +                          -
- *                   controlPoint2
- *
- *             |-----------|
- *                 step
- */
-Path TextDecorationInfo::PrepareWavyStrokePath() const {
-  float wave_offset = DoubleOffset() * line_data_.wavy_offset_factor;
-
-  float control_point_distance = ControlPointDistanceFromResolvedThickness();
-  // For spelling and grammar errors we invert the control_point_distance to get
-  // a result closer to Microsoft Word circa 2021.
-  if (IsSpellingOrGrammarError())
-    control_point_distance = -control_point_distance;
-  float step = StepFromResolvedThickness();
-
-  gfx::PointF start_point = StartPoint();
-  // We paint the wave before and after the text line (to cover the whole length
-  // of the line) and then we clip it at
-  // AppliedDecorationPainter::StrokeWavyTextDecoration().
-  // Offset the start point, so the beizer curve starts before the current line,
-  // that way we can clip it exactly the same way in both ends.
-  // For spelling and grammar errors we offset an extra half step, to get a
-  // result closer to Microsoft Word circa 2021.
-  float start_offset = (IsSpellingOrGrammarError() ? -2.5 : -2) * step;
-  gfx::PointF p1(start_point + gfx::Vector2dF(start_offset, wave_offset));
-  // Increase the width including the previous offset, plus an extra wave to be
-  // painted after the line.
-  float extra_width = (IsSpellingOrGrammarError() ? 4.5 : 4) * step;
-  gfx::PointF p2(start_point +
-                 gfx::Vector2dF(width_ + extra_width, wave_offset));
-
-  GraphicsContext::AdjustLineToPixelBoundaries(p1, p2, ResolvedThickness());
-
-  Path path;
-  path.MoveTo(p1);
-
-  bool is_vertical_line = (p1.x() == p2.x());
-
-  if (is_vertical_line) {
-    DCHECK(p1.x() == p2.x());
-
-    float x_axis = p1.x();
-    float y1;
-    float y2;
-
-    if (p1.y() < p2.y()) {
-      y1 = p1.y();
-      y2 = p2.y();
-    } else {
-      y1 = p2.y();
-      y2 = p1.y();
-    }
-
-    gfx::PointF control_point1(x_axis + control_point_distance, 0);
-    gfx::PointF control_point2(x_axis - control_point_distance, 0);
-
-    for (float y = y1; y + 2 * step <= y2;) {
-      control_point1.set_y(y + step);
-      control_point2.set_y(y + step);
-      y += 2 * step;
-      path.AddBezierCurveTo(control_point1, control_point2,
-                            gfx::PointF(x_axis, y));
-    }
-  } else {
-    DCHECK(p1.y() == p2.y());
-
-    float y_axis = p1.y();
-    float x1;
-    float x2;
-
-    if (p1.x() < p2.x()) {
-      x1 = p1.x();
-      x2 = p2.x();
-    } else {
-      x1 = p2.x();
-      x2 = p1.x();
-    }
-
-    gfx::PointF control_point1(0, y_axis + control_point_distance);
-    gfx::PointF control_point2(0, y_axis - control_point_distance);
-
-    for (float x = x1; x + 2 * step <= x2;) {
-      control_point1.set_x(x + step);
-      control_point2.set_x(x + step);
-      x += 2 * step;
-      path.AddBezierCurveTo(control_point1, control_point2,
-                            gfx::PointF(x, y_axis));
-    }
-  }
-  return path;
-}
-
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/paint/text_decoration_info.h b/third_party/blink/renderer/core/paint/text_decoration_info.h
index 8f6cff8..58a3b43c 100644
--- a/third_party/blink/renderer/core/paint/text_decoration_info.h
+++ b/third_party/blink/renderer/core/paint/text_decoration_info.h
@@ -6,6 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_CORE_PAINT_TEXT_DECORATION_INFO_H_
 
 #include "base/types/strong_alias.h"
+#include "cc/paint/paint_op_buffer.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/layout/geometry/physical_offset.h"
@@ -142,8 +143,10 @@
   // Compute bounds for the given line and the current decoration.
   gfx::RectF Bounds() const;
 
-  // Return a path for current decoration.
-  absl::optional<Path> StrokePath() const;
+  // Returns tile record and coordinates for wavy decorations.
+  sk_sp<cc::PaintRecord> WavyTileRecord() const;
+  gfx::RectF WavyPaintRect() const;
+  gfx::RectF WavyTileRect() const;
 
   // Overrides the line color with the given topmost active highlight ‘color’.
   void SetHighlightOverrideColor(const absl::optional<Color>&);
@@ -154,14 +157,12 @@
   float ComputeUnderlineThickness(
       const TextDecorationThickness& applied_decoration_thickness,
       const ComputedStyle* decorating_box_style) const;
+  void ComputeWavyLineData(gfx::RectF& pattern_rect,
+                           sk_sp<cc::PaintRecord>& tile_record) const;
 
   gfx::RectF BoundsForDottedOrDashed() const;
   gfx::RectF BoundsForWavy() const;
-  float WavyDecorationSizing() const;
-  float ControlPointDistanceFromResolvedThickness() const;
-  float StepFromResolvedThickness() const;
   Path PrepareDottedOrDashedStrokePath() const;
-  Path PrepareWavyStrokePath() const;
   bool IsSpellingOrGrammarError() const {
     return line_data_.line == TextDecorationLine::kSpellingError ||
            line_data_.line == TextDecorationLine::kGrammarError;
@@ -228,8 +229,14 @@
     TextDecorationLine line;
     float line_offset;
     float double_offset;
-    int wavy_offset_factor;
+
+    // Only used for kDotted and kDashed lines.
     absl::optional<Path> stroke_path;
+
+    // Only used for kWavy lines.
+    int wavy_offset_factor;
+    gfx::RectF wavy_pattern_rect;
+    sk_sp<cc::PaintRecord> wavy_tile_record;
   };
   LineData line_data_;
   absl::optional<Color> highlight_override_;
diff --git a/third_party/blink/renderer/modules/accessibility/ax_node_object.cc b/third_party/blink/renderer/modules/accessibility/ax_node_object.cc
index 59492f6..2f4fa29 100644
--- a/third_party/blink/renderer/modules/accessibility/ax_node_object.cc
+++ b/third_party/blink/renderer/modules/accessibility/ax_node_object.cc
@@ -4001,7 +4001,7 @@
   // https://crrev.com/c/chromium/src/+/3591572/9/third_party/blink/renderer/modules/accessibility/ax_node_object.cc#3973
   // TODO(accessibility) Remove this once legacy layout is completely removed,
   // as this problem will go away.
-  AXObject* ax_dom_parent = AXObjectCache().GetWithoutInvalidation(
+  AXObject* ax_dom_parent = AXObjectCache().SafeGet(
       LayoutTreeBuilderTraversal::Parent(*child.GetNode()));
   if (ax_dom_parent &&
       !ax_dom_parent->ShouldUseLayoutObjectTraversalForChildren()) {
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object.cc b/third_party/blink/renderer/modules/accessibility/ax_object.cc
index 88cf408..542e654 100644
--- a/third_party/blink/renderer/modules/accessibility/ax_object.cc
+++ b/third_party/blink/renderer/modules/accessibility/ax_object.cc
@@ -5229,8 +5229,7 @@
     // at this time. However, do allow invalidations if an object changes its
     // display locking (content-visibility: auto) status, as this may be the
     // only chance to do that, and it's safe to do now.
-    AXObject* ax_child_from_node =
-        AXObjectCache().GetWithoutInvalidation(child_node, true);
+    AXObject* ax_child_from_node = AXObjectCache().SafeGet(child_node, true);
     if (ax_child_from_node &&
         ax_child_from_node->CachedParentObject() == this) {
       // Check current parent first. It may be owned by another node.
@@ -6707,8 +6706,8 @@
       string_builder = string_builder + " focused";
     if (!IsDetached() && AXObjectCache().IsAriaOwned(this))
       string_builder = string_builder + " isAriaOwned";
-    if (cached_values_only ? LastKnownIsIgnoredValue()
-                           : AccessibilityIsIgnored()) {
+    if (!IsDetached() && (cached_values_only ? LastKnownIsIgnoredValue()
+                                             : AccessibilityIsIgnored())) {
       string_builder = string_builder + " isIgnored";
 #if defined(AX_FAIL_FAST_BUILD)
       // TODO(accessibility) Move this out of AX_FAIL_FAST_BUILD by having a new
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 879d0ad4..b15b1ee 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
@@ -816,9 +816,8 @@
   return result;
 }
 
-AXObject* AXObjectCacheImpl::GetWithoutInvalidation(
-    const Node* node,
-    bool allow_display_locking_invalidation) {
+AXObject* AXObjectCacheImpl::SafeGet(const Node* node,
+                                     bool allow_display_locking_invalidation) {
   if (!node)
     return nullptr;
 
@@ -874,7 +873,7 @@
     return nullptr;
 
   if (has_been_disposed_)
-    return GetWithoutInvalidation(node);
+    return SafeGet(node);
 
   LayoutObject* layout_object = node->GetLayoutObject();
 
@@ -2255,14 +2254,14 @@
 }
 
 void AXObjectCacheImpl::SlotAssignmentWillChange(Node* node) {
-  // Use GetWithoutInvalidation(), because right before slot assignment is a
-  // dangerous time to test whether the slot must be invalidated, because
-  // this currently requires looking at the <slot> children in
+  // Use SafeGet(), because right before slot assignment is a dangerous time to
+  // test whether the slot must be invalidated, because this currently requires
+  // looking at the <slot> children in
   // IsShadowContentRelevantForAccessibility(), resulting in an infinite loop
   // as looking at the children causes slot assignment to be recalculated.
   // TODO(accessibility) In the future this may be simplified.
   // See crbug.com/1219311.
-  ChildrenChanged(GetWithoutInvalidation(node));
+  ChildrenChanged(SafeGet(node));
 }
 
 void AXObjectCacheImpl::ChildrenChanged(Node* node) {
@@ -2338,7 +2337,7 @@
 #if DCHECK_IS_ON()
   if (obj && optional_node) {
     DCHECK_EQ(obj->GetNode(), optional_node);
-    DCHECK_EQ(obj, GetWithoutInvalidation(optional_node));
+    DCHECK_EQ(obj, SafeGet(optional_node));
   }
   Document* document = obj ? obj->GetDocument() : &optional_node->GetDocument();
   DCHECK(document);
@@ -2631,7 +2630,7 @@
         DCHECK(!obj->IsDetached());
         if (node) {
           DCHECK_EQ(node, obj->GetNode());
-          DCHECK_EQ(GetWithoutInvalidation(node), obj);
+          DCHECK_EQ(SafeGet(node), obj);
         }
         DCHECK_EQ(obj->GetDocument(), document);
       }
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.h b/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.h
index b28a966f..e9c1a4d 100644
--- a/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.h
+++ b/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.h
@@ -238,13 +238,16 @@
   AXObject* Get(const Node*);
   AXObject* Get(const LayoutObject*);
 
-  // Get an AXObject* without making any calls into layout that could be
-  // dangerous during an unclean layout phase.
-  // Also will not do invalidations from display locking changes, unless the
-  // caller passes in true for allow_display_locking_invalidation.
-  AXObject* GetWithoutInvalidation(
-      const Node* node,
-      bool allow_display_locking_invalidation = false);
+  // Get an AXObject* in a way that is safe for the current calling context:
+  // - No calls into layout during an unclean layout phase
+  // - Does not walk the flat tree during slot reassignment.
+  // - Will not do invalidations from display locking changes, unless the
+  //   caller passes in true for allow_display_locking_invalidation.
+  //   This is generally safe to do, but may not be desirable e.g. when
+  //   simply writing a DCHECK, where a pure get is optimal so as to avoid
+  //   changing behavior.
+  AXObject* SafeGet(const Node* node,
+                    bool allow_display_locking_invalidation = false);
 
   // Return true if the object is still part of the tree, meaning that ancestors
   // exist or can be repaired all the way to the root.
diff --git a/third_party/blink/renderer/modules/accessibility/ax_relation_cache.cc b/third_party/blink/renderer/modules/accessibility/ax_relation_cache.cc
index 7277c228..4aafa27f 100644
--- a/third_party/blink/renderer/modules/accessibility/ax_relation_cache.cc
+++ b/third_party/blink/renderer/modules/accessibility/ax_relation_cache.cc
@@ -532,7 +532,7 @@
   DCHECK(node);
   if (obj)
     DCHECK(!obj->IsDetached());
-  AXObject* obj_for_node = object_cache_->GetWithoutInvalidation(node);
+  AXObject* obj_for_node = object_cache_->SafeGet(node);
   DCHECK(!obj || obj_for_node == obj)
       << "Object and node did not match:"
       << "\n* node = " << node << "\n* obj = " << obj->ToString(true, true)
diff --git a/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor.cc b/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor.cc
index 4e546db5..61e25f9 100644
--- a/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor.cc
+++ b/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor.cc
@@ -1123,4 +1123,12 @@
   return nullptr;
 }
 
+void PaintArtifactCompositor::SetNeedsUpdate(
+    PaintArtifactCompositorUpdateReason reason) {
+  UMA_HISTOGRAM_ENUMERATION("Blink.Paint.PaintArtifactCompositorUpdateReason",
+                            reason,
+                            PaintArtifactCompositorUpdateReason::kCount);
+  needs_update_ = true;
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor.h b/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor.h
index dc447d0..96f78b0 100644
--- a/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor.h
+++ b/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor.h
@@ -217,12 +217,7 @@
   // do not affect compositing can use a fast-path in |UpdateRepaintedLayers|
   // (see comment above that function for more information), and should not call
   // SetNeedsUpdate.
-  void SetNeedsUpdate(PaintArtifactCompositorUpdateReason reason) {
-    UMA_HISTOGRAM_ENUMERATION("Blink.Paint.PaintArtifactCompositorUpdateReason",
-                              reason,
-                              PaintArtifactCompositorUpdateReason::kCount);
-    needs_update_ = true;
-  }
+  void SetNeedsUpdate(PaintArtifactCompositorUpdateReason reason);
   bool NeedsUpdate() const { return needs_update_; }
   void ClearNeedsUpdateForTesting() { needs_update_ = false; }
 
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5
index c7c7aba..8694f59d 100644
--- a/third_party/blink/renderer/platform/runtime_enabled_features.json5
+++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -1318,6 +1318,7 @@
       // https://drafts.csswg.org/css-tables-3/#fragmentation
       name: "LayoutNGTableFragmentation",
       depends_on: ["LayoutNG"],
+      status: "test",
     },
     {
       name: "LayoutNGView",
diff --git a/third_party/blink/renderer/platform/scheduler/BUILD.gn b/third_party/blink/renderer/platform/scheduler/BUILD.gn
index d79c419..acdd61d 100644
--- a/third_party/blink/renderer/platform/scheduler/BUILD.gn
+++ b/third_party/blink/renderer/platform/scheduler/BUILD.gn
@@ -39,8 +39,8 @@
     "common/thread_load_tracker.cc",
     "common/thread_load_tracker.h",
     "common/thread_scheduler.cc",
-    "common/thread_scheduler_impl.cc",
-    "common/thread_scheduler_impl.h",
+    "common/thread_scheduler_base.cc",
+    "common/thread_scheduler_base.h",
     "common/thread_type.cc",
     "common/throttling/budget_pool.cc",
     "common/throttling/budget_pool.h",
@@ -118,6 +118,7 @@
     "public/frame_or_worker_scheduler.h",
     "public/frame_scheduler.h",
     "public/frame_status.h",
+    "public/main_thread_scheduler.h",
     "public/page_lifecycle_state.h",
     "public/page_scheduler.h",
     "public/post_cancellable_task.h",
diff --git a/third_party/blink/renderer/platform/scheduler/common/back_forward_cache_disabling_feature_tracker.cc b/third_party/blink/renderer/platform/scheduler/common/back_forward_cache_disabling_feature_tracker.cc
index a42565ca..afd2069 100644
--- a/third_party/blink/renderer/platform/scheduler/common/back_forward_cache_disabling_feature_tracker.cc
+++ b/third_party/blink/renderer/platform/scheduler/common/back_forward_cache_disabling_feature_tracker.cc
@@ -4,7 +4,7 @@
 
 #include "third_party/blink/renderer/platform/scheduler/common/back_forward_cache_disabling_feature_tracker.h"
 
-#include "third_party/blink/renderer/platform/scheduler/common/thread_scheduler_impl.h"
+#include "third_party/blink/renderer/platform/scheduler/common/thread_scheduler_base.h"
 
 namespace blink {
 namespace scheduler {
@@ -12,7 +12,7 @@
 BackForwardCacheDisablingFeatureTracker::
     BackForwardCacheDisablingFeatureTracker(
         TraceableVariableController* tracing_controller,
-        ThreadSchedulerImpl* scheduler)
+        ThreadSchedulerBase* scheduler)
     : opted_out_from_back_forward_cache_{false,
                                          "FrameScheduler."
                                          "OptedOutFromBackForwardCache",
diff --git a/third_party/blink/renderer/platform/scheduler/common/back_forward_cache_disabling_feature_tracker.h b/third_party/blink/renderer/platform/scheduler/common/back_forward_cache_disabling_feature_tracker.h
index 73e19a9..9af3b7c 100644
--- a/third_party/blink/renderer/platform/scheduler/common/back_forward_cache_disabling_feature_tracker.h
+++ b/third_party/blink/renderer/platform/scheduler/common/back_forward_cache_disabling_feature_tracker.h
@@ -17,7 +17,7 @@
 namespace blink {
 namespace scheduler {
 
-class ThreadSchedulerImpl;
+class ThreadSchedulerBase;
 
 // Keeps track of feature usage that disables back/forward cache.
 //
@@ -34,7 +34,7 @@
   // instance except for tests.
   BackForwardCacheDisablingFeatureTracker(
       TraceableVariableController* tracing_controller,
-      ThreadSchedulerImpl* scheduler);
+      ThreadSchedulerBase* scheduler);
 
   // Sets the delegate to notify the feature usage update. This must be called
   // only once for initialization. `delegate` must not be null and must outlive
@@ -89,7 +89,7 @@
   bool feature_report_scheduled_ = false;
 
   FrameOrWorkerScheduler::Delegate* delegate_ = nullptr;
-  ThreadSchedulerImpl* scheduler_;
+  ThreadSchedulerBase* scheduler_;
 
   base::WeakPtrFactory<BackForwardCacheDisablingFeatureTracker> weak_factory_{
       this};
diff --git a/third_party/blink/renderer/platform/scheduler/common/dummy_schedulers.cc b/third_party/blink/renderer/platform/scheduler/common/dummy_schedulers.cc
index 13b5718f..e1364bc 100644
--- a/third_party/blink/renderer/platform/scheduler/common/dummy_schedulers.cc
+++ b/third_party/blink/renderer/platform/scheduler/common/dummy_schedulers.cc
@@ -286,10 +286,6 @@
                                Thread::IdleTask) override {}
   void AddRAILModeObserver(RAILModeObserver*) override {}
   void RemoveRAILModeObserver(RAILModeObserver const*) override {}
-  std::unique_ptr<WebThreadScheduler::RendererPauseHandle> PauseScheduler()
-      override {
-    return nullptr;
-  }
   base::TimeTicks MonotonicallyIncreasingVirtualTime() override {
     return base::TimeTicks::Now();
   }
diff --git a/third_party/blink/renderer/platform/scheduler/common/features.cc b/third_party/blink/renderer/platform/scheduler/common/features.cc
index dc076049..4aee285 100644
--- a/third_party/blink/renderer/platform/scheduler/common/features.cc
+++ b/third_party/blink/renderer/platform/scheduler/common/features.cc
@@ -109,5 +109,26 @@
                                 "phase",
                                 DeprioritizeDOMTimersPhase::kOnDOMContentLoaded,
                                 &kDeprioritizeDOMTimersPhaseOptions};
+
+const base::Feature kThreadedScrollPreventRenderingStarvation{
+    "ThreadedScrollPreventRenderingStarvation",
+    base::FEATURE_DISABLED_BY_DEFAULT};
+
+const base::FeatureParam<CompositorTQPolicyDuringThreadedScroll>::Option
+    kCompositorTQPolicyDuringThreadedScrollOptions[] = {
+        {CompositorTQPolicyDuringThreadedScroll::kLowPriorityWithAntiStarvation,
+         "low-priority-with-anti-starvation"},
+        {CompositorTQPolicyDuringThreadedScroll::
+             kNormalPriorityWithAntiStarvation,
+         "normal-priority-with-anti-starvation"},
+        {CompositorTQPolicyDuringThreadedScroll::kVeryHighPriorityAlways,
+         "very-high-priority-always"}};
+
+const base::FeatureParam<CompositorTQPolicyDuringThreadedScroll>
+    kCompositorTQPolicyDuringThreadedScroll{
+        &kThreadedScrollPreventRenderingStarvation, "policy",
+        CompositorTQPolicyDuringThreadedScroll::kLowPriorityWithAntiStarvation,
+        &kCompositorTQPolicyDuringThreadedScrollOptions};
+
 }  // namespace scheduler
 }  // namespace blink
diff --git a/third_party/blink/renderer/platform/scheduler/common/features.h b/third_party/blink/renderer/platform/scheduler/common/features.h
index b0d392a..e04d718 100644
--- a/third_party/blink/renderer/platform/scheduler/common/features.h
+++ b/third_party/blink/renderer/platform/scheduler/common/features.h
@@ -191,6 +191,36 @@
     "DisablePrioritizedPostMessageForwarding",
     base::FEATURE_DISABLED_BY_DEFAULT};
 
+// Finch flag for preventing rendering starvation during threaded scrolling.
+// With this feature enabled, the existing delay-based rendering anti-starvation
+// applies, and the compositor task queue priority is controlled with the
+// `kCompositorTQPolicyDuringThreadedScroll` `FeatureParam`.
+PLATFORM_EXPORT extern const base::Feature
+    kThreadedScrollPreventRenderingStarvation;
+
+enum class CompositorTQPolicyDuringThreadedScroll {
+  // Compositor TQ has low priority, delay-based anti-starvation does not apply.
+  // This is the current behavior and it isn't exposed through
+  // `kCompositorTQPolicyDuringThreadedScrollOptions`; this exists to simplify
+  // the relayed policy logic.
+  kLowPriorityAlways,
+  // Compositor TQ has low priority, delay-based anti-starvation applies.
+  kLowPriorityWithAntiStarvation,
+  // Compositor TQ has normal priority, delay-based anti-starvation applies.
+  kNormalPriorityWithAntiStarvation,
+  // Compositor TQ has very high priority. Note that this is the same priority
+  // as used by the delay-based anti-starvation logic.
+  kVeryHighPriorityAlways,
+};
+
+PLATFORM_EXPORT extern const base::FeatureParam<
+    CompositorTQPolicyDuringThreadedScroll>::Option
+    kCompositorTQPolicyDuringThreadedScrollOptions[];
+
+PLATFORM_EXPORT extern const base::FeatureParam<
+    CompositorTQPolicyDuringThreadedScroll>
+    kCompositorTQPolicyDuringThreadedScroll;
+
 }  // namespace scheduler
 }  // namespace blink
 
diff --git a/third_party/blink/renderer/platform/scheduler/common/simple_thread_scheduler.cc b/third_party/blink/renderer/platform/scheduler/common/simple_thread_scheduler.cc
index 2ec569b3..812931b5 100644
--- a/third_party/blink/renderer/platform/scheduler/common/simple_thread_scheduler.cc
+++ b/third_party/blink/renderer/platform/scheduler/common/simple_thread_scheduler.cc
@@ -71,11 +71,6 @@
   return nullptr;
 }
 
-std::unique_ptr<ThreadScheduler::RendererPauseHandle>
-SimpleThreadScheduler::PauseScheduler() {
-  return nullptr;
-}
-
 base::TimeTicks SimpleThreadScheduler::MonotonicallyIncreasingVirtualTime() {
   return base::TimeTicks::Now();
 }
diff --git a/third_party/blink/renderer/platform/scheduler/common/simple_thread_scheduler.h b/third_party/blink/renderer/platform/scheduler/common/simple_thread_scheduler.h
index 519c26d3..e00ee72 100644
--- a/third_party/blink/renderer/platform/scheduler/common/simple_thread_scheduler.h
+++ b/third_party/blink/renderer/platform/scheduler/common/simple_thread_scheduler.h
@@ -66,9 +66,6 @@
   // Return nullptr
   WebAgentGroupScheduler* GetCurrentAgentGroupScheduler() override;
 
-  // Unsupported. Return nullptr, and it may cause a crash.
-  std::unique_ptr<RendererPauseHandle> PauseScheduler() override;
-
   // Return the current time.
   base::TimeTicks MonotonicallyIncreasingVirtualTime() override;
 
diff --git a/third_party/blink/renderer/platform/scheduler/common/thread_scheduler_impl.cc b/third_party/blink/renderer/platform/scheduler/common/thread_scheduler_base.cc
similarity index 80%
rename from third_party/blink/renderer/platform/scheduler/common/thread_scheduler_impl.cc
rename to third_party/blink/renderer/platform/scheduler/common/thread_scheduler_base.cc
index 58b22b6..3f9a1089 100644
--- a/third_party/blink/renderer/platform/scheduler/common/thread_scheduler_impl.cc
+++ b/third_party/blink/renderer/platform/scheduler/common/thread_scheduler_base.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 "third_party/blink/renderer/platform/scheduler/common/thread_scheduler_impl.h"
+#include "third_party/blink/renderer/platform/scheduler/common/thread_scheduler_base.h"
 
 #include "base/trace_event/trace_event.h"
 #include "third_party/blink/renderer/platform/scheduler/main_thread/auto_advancing_virtual_time_domain.h"
@@ -10,21 +10,17 @@
 namespace blink {
 namespace scheduler {
 
-void ThreadSchedulerImpl::ExecuteAfterCurrentTask(
+void ThreadSchedulerBase::ExecuteAfterCurrentTask(
     base::OnceClosure on_completion_task) {
   GetOnTaskCompletionCallbacks().push_back(std::move(on_completion_task));
 }
 
-void ThreadSchedulerImpl::Shutdown() {
+void ThreadSchedulerBase::Shutdown() {
   GetHelper().ResetTimeDomain();
   virtual_time_domain_.reset();
 }
 
-base::TimeTicks ThreadSchedulerImpl::MonotonicallyIncreasingVirtualTime() {
-  return GetTickClock()->NowTicks();
-}
-
-base::TimeTicks ThreadSchedulerImpl::EnableVirtualTime(
+base::TimeTicks ThreadSchedulerBase::EnableVirtualTime(
     base::Time initial_time) {
   if (virtual_time_domain_)
     return virtual_time_domain_->InitialTicks();
@@ -43,7 +39,7 @@
   return initial_ticks;
 }
 
-void ThreadSchedulerImpl::DisableVirtualTimeForTesting() {
+void ThreadSchedulerBase::DisableVirtualTimeForTesting() {
   if (!IsVirtualTimeEnabled())
     return;
   // Reset virtual time and all tasks queues back to their initial state.
@@ -58,12 +54,12 @@
   OnVirtualTimeDisabled();
 }
 
-bool ThreadSchedulerImpl::VirtualTimeAllowedToAdvance() const {
+bool ThreadSchedulerBase::VirtualTimeAllowedToAdvance() const {
   DCHECK(!virtual_time_stopped_ || virtual_time_domain_);
   return !virtual_time_stopped_;
 }
 
-void ThreadSchedulerImpl::GrantVirtualTimeBudget(
+void ThreadSchedulerBase::GrantVirtualTimeBudget(
     base::TimeDelta budget,
     base::OnceClosure budget_exhausted_callback) {
   GetVirtualTimeTaskRunner()->PostDelayedTask(
@@ -74,13 +70,13 @@
                                             budget);
 }
 
-void ThreadSchedulerImpl::SetVirtualTimePolicy(VirtualTimePolicy policy) {
+void ThreadSchedulerBase::SetVirtualTimePolicy(VirtualTimePolicy policy) {
   DCHECK(IsVirtualTimeEnabled());
   virtual_time_policy_ = policy;
   ApplyVirtualTimePolicy();
 }
 
-void ThreadSchedulerImpl::SetMaxVirtualTimeTaskStarvationCount(
+void ThreadSchedulerBase::SetMaxVirtualTimeTaskStarvationCount(
     int max_task_starvation_count) {
   DCHECK(IsVirtualTimeEnabled());
   max_virtual_time_task_starvation_count_ = max_task_starvation_count;
@@ -88,44 +84,44 @@
 }
 
 WebScopedVirtualTimePauser
-ThreadSchedulerImpl::CreateWebScopedVirtualTimePauser(
+ThreadSchedulerBase::CreateWebScopedVirtualTimePauser(
     const WTF::String& name,
     WebScopedVirtualTimePauser::VirtualTaskDuration duration) {
   return WebScopedVirtualTimePauser(this, duration, name);
 }
 
-bool ThreadSchedulerImpl::IsVirtualTimeEnabled() const {
+bool ThreadSchedulerBase::IsVirtualTimeEnabled() const {
   return !!virtual_time_domain_;
 }
 
-base::TimeTicks ThreadSchedulerImpl::IncrementVirtualTimePauseCount() {
+base::TimeTicks ThreadSchedulerBase::IncrementVirtualTimePauseCount() {
   virtual_time_pause_count_++;
   if (IsVirtualTimeEnabled())
     ApplyVirtualTimePolicy();
   return GetTickClock()->NowTicks();
 }
 
-void ThreadSchedulerImpl::DecrementVirtualTimePauseCount() {
+void ThreadSchedulerBase::DecrementVirtualTimePauseCount() {
   virtual_time_pause_count_--;
   DCHECK_GE(virtual_time_pause_count_, 0);
   if (IsVirtualTimeEnabled())
     ApplyVirtualTimePolicy();
 }
 
-void ThreadSchedulerImpl::MaybeAdvanceVirtualTime(
+void ThreadSchedulerBase::MaybeAdvanceVirtualTime(
     base::TimeTicks new_virtual_time) {
   if (virtual_time_domain_)
     virtual_time_domain_->MaybeAdvanceVirtualTime(new_virtual_time);
 }
 
-AutoAdvancingVirtualTimeDomain* ThreadSchedulerImpl::GetVirtualTimeDomain() {
+AutoAdvancingVirtualTimeDomain* ThreadSchedulerBase::GetVirtualTimeDomain() {
   return virtual_time_domain_.get();
 }
 
-ThreadSchedulerImpl::ThreadSchedulerImpl() = default;
-ThreadSchedulerImpl::~ThreadSchedulerImpl() = default;
+ThreadSchedulerBase::ThreadSchedulerBase() = default;
+ThreadSchedulerBase::~ThreadSchedulerBase() = default;
 
-void ThreadSchedulerImpl::DispatchOnTaskCompletionCallbacks() {
+void ThreadSchedulerBase::DispatchOnTaskCompletionCallbacks() {
   for (auto& closure : GetOnTaskCompletionCallbacks()) {
     std::move(closure).Run();
   }
@@ -146,7 +142,7 @@
 }
 }  // namespace
 
-void ThreadSchedulerImpl::WriteVirtualTimeInfoIntoTrace(
+void ThreadSchedulerBase::WriteVirtualTimeInfoIntoTrace(
     perfetto::TracedDictionary& dict) const {
   dict.Add("virtual_time_stopped", virtual_time_stopped_);
   dict.Add("virtual_time_pause_count", virtual_time_pause_count_);
@@ -155,7 +151,7 @@
   dict.Add("virtual_time", !!virtual_time_domain_);
 }
 
-void ThreadSchedulerImpl::SetVirtualTimeStopped(bool virtual_time_stopped) {
+void ThreadSchedulerBase::SetVirtualTimeStopped(bool virtual_time_stopped) {
   DCHECK(virtual_time_domain_);
   if (virtual_time_stopped_ == virtual_time_stopped)
     return;
@@ -168,7 +164,7 @@
     OnVirtualTimeResumed();
 }
 
-void ThreadSchedulerImpl::ApplyVirtualTimePolicy() {
+void ThreadSchedulerBase::ApplyVirtualTimePolicy() {
   DCHECK(virtual_time_domain_);
   switch (virtual_time_policy_) {
     case VirtualTimePolicy::kAdvance:
@@ -200,12 +196,12 @@
   }
 }
 
-void ThreadSchedulerImpl::OnBeginNestedRunLoop() {
+void ThreadSchedulerBase::OnBeginNestedRunLoop() {
   if (IsVirtualTimeEnabled())
     ApplyVirtualTimePolicy();
 }
 
-void ThreadSchedulerImpl::OnExitNestedRunLoop() {
+void ThreadSchedulerBase::OnExitNestedRunLoop() {
   if (IsVirtualTimeEnabled())
     ApplyVirtualTimePolicy();
 }
diff --git a/third_party/blink/renderer/platform/scheduler/common/thread_scheduler_impl.h b/third_party/blink/renderer/platform/scheduler/common/thread_scheduler_base.h
similarity index 88%
rename from third_party/blink/renderer/platform/scheduler/common/thread_scheduler_impl.h
rename to third_party/blink/renderer/platform/scheduler/common/thread_scheduler_base.h
index 286a8ac..e16aa6f 100644
--- a/third_party/blink/renderer/platform/scheduler/common/thread_scheduler_impl.h
+++ b/third_party/blink/renderer/platform/scheduler/common/thread_scheduler_base.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 THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_COMMON_THREAD_SCHEDULER_IMPL_H_
-#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_COMMON_THREAD_SCHEDULER_IMPL_H_
+#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_COMMON_THREAD_SCHEDULER_BASE_H_
+#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_COMMON_THREAD_SCHEDULER_BASE_H_
 
 #include "third_party/blink/renderer/platform/platform_export.h"
 
@@ -30,16 +30,13 @@
 // Scheduler-internal interface for the common methods between
 // MainThreadSchedulerImpl and NonMainThreadSchedulerImpl which should
 // not be exposed outside the scheduler.
-class PLATFORM_EXPORT ThreadSchedulerImpl : public ThreadScheduler,
-                                            public WebThreadScheduler,
+// This class does not implement the public ThreadScheduler interface
+// but provides functionality so that subclasses such as MainThreadScheduler
+// can extend ThreadScheduler and not end up in with diamond inheritenance.
+class PLATFORM_EXPORT ThreadSchedulerBase : public WebThreadScheduler,
                                             public VirtualTimeController,
                                             public SchedulerHelper::Observer {
  public:
-  // This type is defined in both ThreadScheduler and WebThreadScheduler,
-  // so the use of this type causes ambiguous lookup. Redefine this again
-  // to hide the base classes' ones.
-  using RendererPauseHandle = WebThreadScheduler::RendererPauseHandle;
-
   // Returns the idle task runner. Tasks posted to this runner may be reordered
   // relative to other task types and may be starved for an arbitrarily long
   // time if no idle time is available.
@@ -54,12 +51,10 @@
   // only once per task.
   void ExecuteAfterCurrentTask(base::OnceClosure on_completion_task);
 
-  void SetV8Isolate(v8::Isolate* isolate) override { isolate_ = isolate; }
+  void SetV8Isolate(v8::Isolate* isolate) { isolate_ = isolate; }
   v8::Isolate* isolate() const { return isolate_; }
 
-  // ThreadScheduler implementation.
   void Shutdown() override;
-  base::TimeTicks MonotonicallyIncreasingVirtualTime() override;
 
   // VirtualTimeController implementation.
   base::TimeTicks EnableVirtualTime(base::Time initial_time) override;
@@ -85,8 +80,8 @@
   }
 
  protected:
-  ThreadSchedulerImpl();
-  ~ThreadSchedulerImpl() override;
+  ThreadSchedulerBase();
+  ~ThreadSchedulerBase() override;
 
   // Returns the list of callbacks to execute after the current task.
   virtual WTF::Vector<base::OnceClosure>& GetOnTaskCompletionCallbacks() = 0;
@@ -147,4 +142,4 @@
 }  // namespace scheduler
 }  // namespace blink
 
-#endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_COMMON_THREAD_SCHEDULER_IMPL_H_
+#endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_COMMON_THREAD_SCHEDULER_BASE_H_
diff --git a/third_party/blink/renderer/platform/scheduler/common/web_thread_scheduler.cc b/third_party/blink/renderer/platform/scheduler/common/web_thread_scheduler.cc
index 0e95f58..fd4305c5 100644
--- a/third_party/blink/renderer/platform/scheduler/common/web_thread_scheduler.cc
+++ b/third_party/blink/renderer/platform/scheduler/common/web_thread_scheduler.cc
@@ -76,12 +76,6 @@
 }
 #endif  // BUILDFLAG(IS_ANDROID)
 
-std::unique_ptr<WebThreadScheduler::RendererPauseHandle>
-WebThreadScheduler::PauseRenderer() {
-  NOTREACHED();
-  return nullptr;
-}
-
 void WebThreadScheduler::SetTopLevelBlameContext(
     base::trace_event::BlameContext* blame_context) {
   NOTREACHED();
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 7d8065c1..de734e4 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
@@ -6,6 +6,7 @@
 
 #include <algorithm>
 #include <memory>
+#include <type_traits>
 #include <utility>
 
 #include "base/bind.h"
@@ -81,6 +82,9 @@
 constexpr base::TimeDelta kPrioritizeCompositingAfterDelay =
     base::Milliseconds(100);
 
+constexpr TaskQueue::QueuePriority kPrioritizeCompositingAfterDelayPriority =
+    TaskQueue::QueuePriority::kVeryHighPriority;
+
 v8::RAILMode RAILModeToV8RAILMode(RAILMode rail_mode) {
   switch (rail_mode) {
     case RAILMode::kResponse:
@@ -219,6 +223,26 @@
   }
 }
 
+TaskQueue::QueuePriority
+GetPriorityFromCompositorTQPolicyDuringThreadedScrolling(
+    CompositorTQPolicyDuringThreadedScroll policy) {
+  switch (policy) {
+    case CompositorTQPolicyDuringThreadedScroll::kLowPriorityAlways:
+    case CompositorTQPolicyDuringThreadedScroll::kLowPriorityWithAntiStarvation:
+      return TaskQueue::QueuePriority::kLowPriority;
+    case CompositorTQPolicyDuringThreadedScroll::
+        kNormalPriorityWithAntiStarvation:
+      return TaskQueue::QueuePriority::kNormalPriority;
+    case CompositorTQPolicyDuringThreadedScroll::kVeryHighPriorityAlways:
+      return TaskQueue::QueuePriority::kVeryHighPriority;
+  }
+}
+
+TaskQueue::QueuePriority MaxPriority(TaskQueue::QueuePriority priority1,
+                                     TaskQueue::QueuePriority priority2) {
+  return std::min(priority1, priority2);
+}
+
 }  // namespace
 
 MainThreadSchedulerImpl::MainThreadSchedulerImpl(
@@ -580,6 +604,11 @@
   mbi_compositor_task_runner_per_agent_scheduling_group =
       base::FeatureList::IsEnabled(
           kMbiCompositorTaskRunnerPerAgentSchedulingGroup);
+
+  compositor_tq_policy_during_threaded_scroll =
+      base::FeatureList::IsEnabled(kThreadedScrollPreventRenderingStarvation)
+          ? kCompositorTQPolicyDuringThreadedScroll.Get()
+          : CompositorTQPolicyDuringThreadedScroll::kLowPriorityAlways;
 }
 
 MainThreadSchedulerImpl::AnyThread::~AnyThread() = default;
@@ -632,7 +661,7 @@
   main_thread_only().metrics_helper.OnRendererShutdown(now);
   // This needs to be after metrics helper, to prevent it being confused by
   // potential virtual time domain shutdown!
-  ThreadSchedulerImpl::Shutdown();
+  ThreadSchedulerBase::Shutdown();
 
   ShutdownAllQueues();
 
@@ -1074,8 +1103,8 @@
                        : power_scheduler::PowerMode::kIdle);
 }
 
-std::unique_ptr<ThreadScheduler::RendererPauseHandle>
-MainThreadSchedulerImpl::PauseRenderer() {
+std::unique_ptr<MainThreadScheduler::RendererPauseHandle>
+MainThreadSchedulerImpl::PauseScheduler() {
   return std::make_unique<RendererPauseHandleImpl>(this);
 }
 
@@ -2071,6 +2100,10 @@
   return any_thread().pending_input_monitor.Info(include_continuous);
 }
 
+blink::MainThreadScheduler* MainThreadSchedulerImpl::ToMainThreadScheduler() {
+  return this;
+}
+
 void MainThreadSchedulerImpl::RunIdleTask(Thread::IdleTask task,
                                           base::TimeTicks deadline) {
   std::move(task).Run(deadline);
@@ -2134,6 +2167,14 @@
   return current_agent_group_scheduler_;
 }
 
+void MainThreadSchedulerImpl::SetV8Isolate(v8::Isolate* isolate) {
+  ThreadSchedulerBase::SetV8Isolate(isolate);
+}
+
+base::TimeTicks MainThreadSchedulerImpl::MonotonicallyIncreasingVirtualTime() {
+  return GetTickClock()->NowTicks();
+}
+
 void MainThreadSchedulerImpl::BeginAgentGroupSchedulerScope(
     WebAgentGroupScheduler* next_agent_group_scheduler) {
   scoped_refptr<base::SingleThreadTaskRunner> next_task_runner;
@@ -2222,11 +2263,6 @@
   main_thread_only().agent_group_scheduler_scope_stack.pop_back();
 }
 
-std::unique_ptr<ThreadScheduler::RendererPauseHandle>
-MainThreadSchedulerImpl::PauseScheduler() {
-  return PauseRenderer();
-}
-
 WebThreadScheduler* MainThreadSchedulerImpl::GetWebMainThreadScheduler() {
   return this;
 }
@@ -2560,11 +2596,30 @@
   } else {
     absl::optional<TaskQueue::QueuePriority> computed_compositor_priority =
         ComputeCompositorPriorityFromUseCase();
+    // The default behavior for compositor gestures like compositor-driven
+    // scrolling is to deprioritize compositor TQ tasks (low priority) and not
+    // apply delay-based anti-starvation. This can lead to degraded user
+    // experience due to increased checkerboarding or scrolling blank content.
+    // When `kThreadedScrollPreventRenderingStarvation` is enabled, we use the
+    // priority computed in `ComputeCompositorPriorityFromUseCase()` as well as
+    // enable the delay-based anti-starvation to mitigate these issues.
+    //
+    // Note: for other use cases, the computed priority is higher, so they are
+    // not prone to rendering starvation in the same way.
+    if (current_use_case() == UseCase::kCompositorGesture &&
+        scheduling_settings().compositor_tq_policy_during_threaded_scroll !=
+            CompositorTQPolicyDuringThreadedScroll::kLowPriorityAlways &&
+        main_thread_only()
+            .should_prioritize_compositor_task_queue_after_delay) {
+      DCHECK(computed_compositor_priority);
+      return MaxPriority(kPrioritizeCompositingAfterDelayPriority,
+                         *computed_compositor_priority);
+    }
     if (computed_compositor_priority) {
       return computed_compositor_priority.value();
     } else if (main_thread_only()
                    .should_prioritize_compositor_task_queue_after_delay) {
-      return TaskQueue::QueuePriority::kVeryHighPriority;
+      return kPrioritizeCompositingAfterDelayPriority;
     }
   }
   return TaskQueue::QueuePriority::kNormalPriority;
@@ -2634,7 +2689,16 @@
       // seem to be safe. Instead we do that by proxy by deprioritizing
       // compositor tasks. This should be safe since we've already gone to the
       // pain of fixing ordering issues with them.
-      return TaskQueue::QueuePriority::kLowPriority;
+      //
+      // During periods of main-thread contention, e.g. scrolling while loading
+      // new content, rendering can be indefinitely starved, leading user
+      // experience issues like scrolling blank/stale content and
+      // checkerboarding. We adjust the compositor TQ priority and enable
+      // delay-based rendering anti-starvation when the
+      // `kThreadedScrollPreventRenderingStarvation` experiment is enabled to
+      // mitigate these issues.
+      return GetPriorityFromCompositorTQPolicyDuringThreadedScrolling(
+          scheduling_settings().compositor_tq_policy_during_threaded_scroll);
 
     case UseCase::kSynchronizedGesture:
     case UseCase::kMainThreadCustomInputHandling:
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h
index 5c52456..9a08cdcf 100644
--- a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h
+++ b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h
@@ -28,9 +28,10 @@
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/public/platform/scheduler/web_thread_scheduler.h"
 #include "third_party/blink/renderer/platform/platform_export.h"
+#include "third_party/blink/renderer/platform/scheduler/common/features.h"
 #include "third_party/blink/renderer/platform/scheduler/common/idle_helper.h"
 #include "third_party/blink/renderer/platform/scheduler/common/pollable_thread_safe_flag.h"
-#include "third_party/blink/renderer/platform/scheduler/common/thread_scheduler_impl.h"
+#include "third_party/blink/renderer/platform/scheduler/common/thread_scheduler_base.h"
 #include "third_party/blink/renderer/platform/scheduler/common/tracing_helper.h"
 #include "third_party/blink/renderer/platform/scheduler/main_thread/deadline_task_runner.h"
 #include "third_party/blink/renderer/platform/scheduler/main_thread/find_in_page_budget_pool_controller.h"
@@ -46,6 +47,7 @@
 #include "third_party/blink/renderer/platform/scheduler/main_thread/user_model.h"
 #include "third_party/blink/renderer/platform/scheduler/main_thread/widget_scheduler_impl.h"
 #include "third_party/blink/renderer/platform/scheduler/public/frame_scheduler.h"
+#include "third_party/blink/renderer/platform/scheduler/public/main_thread_scheduler.h"
 #include "third_party/blink/renderer/platform/scheduler/public/rail_mode_observer.h"
 #include "third_party/blink/renderer/platform/scheduler/public/task_attribution_tracker.h"
 #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
@@ -78,7 +80,8 @@
 class CPUTimeBudgetPool;
 
 class PLATFORM_EXPORT MainThreadSchedulerImpl
-    : public ThreadSchedulerImpl,
+    : public ThreadSchedulerBase,
+      public MainThreadScheduler,
       public IdleHelper::Delegate,
       public RenderWidgetSignals::Observer,
       public base::trace_event::TraceLog::AsyncEnabledStateObserver {
@@ -147,6 +150,12 @@
     // If enabled, per-AgentGroupScheduler CompositorTaskRunner will be used
     // instead of per-MainThreadScheduler CompositorTaskRunner.
     bool mbi_compositor_task_runner_per_agent_scheduling_group;
+
+    // If ThreadedScrollPreventRenderingStarvation is enabled, this is set to
+    // the policy set in the associated feature param, otherwise this is
+    // equivalent to the existing behavior.
+    CompositorTQPolicyDuringThreadedScroll
+        compositor_tq_policy_during_threaded_scroll;
   };
 
   static const char* UseCaseToString(UseCase use_case);
@@ -172,8 +181,6 @@
   void PauseTimersForAndroidWebView() override;
   void ResumeTimersForAndroidWebView() override;
 #endif
-  [[nodiscard]] std::unique_ptr<ThreadScheduler::RendererPauseHandle>
-  PauseRenderer() override;
   bool ShouldYieldForHighPriorityWork() override;
   bool CanExceedIdleDeadlineIfRequired() const override;
   void AddTaskObserver(base::TaskObserver* task_observer) override;
@@ -186,6 +193,11 @@
   void SetRendererProcessType(WebRendererProcessType type) override;
   Vector<WebInputEventAttribution> GetPendingUserInputInfo(
       bool include_continuous) const override;
+  blink::MainThreadScheduler* ToMainThreadScheduler() override;
+
+  // MainThreadScheduler implementation:
+  [[nodiscard]] std::unique_ptr<MainThreadScheduler::RendererPauseHandle>
+  PauseScheduler() override;
 
   // ThreadScheduler implementation:
   void PostIdleTask(const base::Location&, Thread::IdleTask) override;
@@ -198,11 +210,11 @@
   scoped_refptr<base::SingleThreadTaskRunner> CompositorTaskRunner() override;
   std::unique_ptr<WebAgentGroupScheduler> CreateAgentGroupScheduler() override;
   WebAgentGroupScheduler* GetCurrentAgentGroupScheduler() override;
-  std::unique_ptr<ThreadScheduler::RendererPauseHandle> PauseScheduler()
-      override;
   NonMainThreadSchedulerImpl* AsNonMainThreadScheduler() override {
     return nullptr;
   }
+  void SetV8Isolate(v8::Isolate* isolate) override;
+  base::TimeTicks MonotonicallyIncreasingVirtualTime() override;
 
   scoped_refptr<WidgetScheduler> CreateWidgetScheduler();
   void WillBeginFrame(const viz::BeginFrameArgs& args);
@@ -433,7 +445,7 @@
   // WebThreadScheduler private implementation:
   WebThreadScheduler* GetWebMainThreadScheduler() override;
 
-  // ThreadSchedulerImpl overrides
+  // ThreadSchedulerBase overrides
   base::SequencedTaskRunner* GetVirtualTimeTaskRunner() override;
   void OnVirtualTimeEnabled() override;
   void OnVirtualTimeDisabled() override;
@@ -549,7 +561,8 @@
 
   class TaskDurationMetricTracker;
 
-  class RendererPauseHandleImpl : public ThreadScheduler::RendererPauseHandle {
+  class RendererPauseHandleImpl
+      : public MainThreadScheduler::RendererPauseHandle {
    public:
     explicit RendererPauseHandleImpl(MainThreadSchedulerImpl* scheduler);
     ~RendererPauseHandleImpl() override;
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl_unittest.cc b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl_unittest.cc
index b6c27c7c..f26c466 100644
--- a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl_unittest.cc
+++ b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl_unittest.cc
@@ -68,11 +68,14 @@
 using ::testing::ReturnRef;
 using InputEventState = WidgetScheduler::InputEventState;
 
+constexpr base::TimeDelta kDelayForHighPriorityRendering =
+    base::Milliseconds(150);
+
 // This is a wrapper around MainThreadSchedulerImpl::CreatePageScheduler, that
 // returns the PageScheduler as a PageSchedulerImpl.
 std::unique_ptr<PageSchedulerImpl> CreatePageScheduler(
     PageScheduler::Delegate* page_scheduler_delegate,
-    ThreadSchedulerImpl* scheduler,
+    ThreadSchedulerBase* scheduler,
     WebAgentGroupScheduler& agent_group_scheduler) {
   std::unique_ptr<PageScheduler> page_scheduler =
       agent_group_scheduler.AsAgentGroupScheduler().CreatePageScheduler(
@@ -771,8 +774,7 @@
     return scheduler_->any_thread().have_seen_a_blocking_gesture;
   }
 
-  void AdvanceTimeWithTask(double duration_seconds) {
-    base::TimeDelta duration = base::Seconds(duration_seconds);
+  void AdvanceTimeWithTask(base::TimeDelta duration) {
     RunTask(base::BindOnce(
         [](scoped_refptr<base::TestMockTimeTaskRunner> test_task_runner,
            base::TimeDelta duration) {
@@ -2526,7 +2528,7 @@
   Vector<String> run_order;
   PostTestTasks(&run_order, "T1 T2");
 
-  auto pause_handle = scheduler_->PauseRenderer();
+  auto pause_handle = scheduler_->PauseScheduler();
   base::RunLoop().RunUntilIdle();
   EXPECT_THAT(run_order, testing::ElementsAre());
 
@@ -2539,7 +2541,7 @@
   Vector<String> run_order;
   PostTestTasks(&run_order, "T1 T2");
 
-  auto pause_handle = scheduler_->PauseRenderer();
+  auto pause_handle = scheduler_->PauseScheduler();
   base::RunLoop().RunUntilIdle();
   MainThreadTaskQueue::ThrottleHandle handle =
       throttleable_task_queue()->Throttle();
@@ -2551,9 +2553,9 @@
   Vector<String> run_order;
   PostTestTasks(&run_order, "T1 T2");
 
-  auto pause_handle1 = scheduler_->PauseRenderer();
-  auto pause_handle2 = scheduler_->PauseRenderer();
-  auto pause_handle3 = scheduler_->PauseRenderer();
+  auto pause_handle1 = scheduler_->PauseScheduler();
+  auto pause_handle2 = scheduler_->PauseScheduler();
+  auto pause_handle3 = scheduler_->PauseScheduler();
   base::RunLoop().RunUntilIdle();
   EXPECT_THAT(run_order, testing::ElementsAre());
 
@@ -2574,7 +2576,7 @@
   // Tasks in some queues don't fire when the renderer is paused.
   Vector<String> run_order;
   PostTestTasks(&run_order, "D1 C1 L1 I1 T1");
-  auto pause_handle = scheduler_->PauseRenderer();
+  auto pause_handle = scheduler_->PauseScheduler();
   EnableIdleTasks();
   base::RunLoop().RunUntilIdle();
   EXPECT_THAT(run_order, testing::ElementsAre("D1", "C1", "I1"));
@@ -2766,7 +2768,7 @@
       FROM_HERE, base::BindOnce(SlowCountingTask, &count, test_task_runner_, 7,
                                 throttleable_task_runner_));
 
-  std::unique_ptr<WebThreadScheduler::RendererPauseHandle> paused;
+  std::unique_ptr<MainThreadScheduler::RendererPauseHandle> paused;
   for (int i = 0; i < 1000; i++) {
     viz::BeginFrameArgs begin_frame_args = viz::BeginFrameArgs::Create(
         BEGINFRAME_FROM_HERE, 0, next_begin_frame_number_++, Now(),
@@ -2799,7 +2801,7 @@
     // throttleable queues are paused.
     if (count > 0 && !paused) {
       EXPECT_EQ(2u, count) << "i = " << i;
-      paused = scheduler_->PauseRenderer();
+      paused = scheduler_->PauseScheduler();
     }
   }
 
@@ -3106,7 +3108,7 @@
       base::BindOnce(
           SlowCountingTask, &unthrottled_count, test_task_runner_, 7,
           unthrottled_task_queue->GetTaskRunnerWithDefaultTaskType()));
-  auto handle = scheduler_->PauseRenderer();
+  auto handle = scheduler_->PauseScheduler();
 
   for (int i = 0; i < 1000; i++) {
     viz::BeginFrameArgs begin_frame_args = viz::BeginFrameArgs::Create(
@@ -3526,7 +3528,7 @@
 
   scheduler_->OnShutdownTaskQueue(queue1);
 
-  auto pause_handle = scheduler_->PauseRenderer();
+  auto pause_handle = scheduler_->PauseScheduler();
 
   // queue2 should be disabled, as it is a regular queue and nothing should
   // change for queue1 because it was shut down.
@@ -3687,8 +3689,7 @@
 
 TEST_F(MainThreadSchedulerImplTest,
        TestCompositorPolicy_FirstCompositorTaskSetToVeryHighPriority) {
-  // 150ms task to complete the countdown and prioritze compositing.
-  AdvanceTimeWithTask(0.15);
+  AdvanceTimeWithTask(kDelayForHighPriorityRendering);
 
   Vector<String> run_order;
   PostTestTasks(&run_order, "D1 C1 D2 C2 P1");
@@ -3710,8 +3711,8 @@
 
 TEST_F(MainThreadSchedulerImplTest,
        TestCompositorPolicy_FirstCompositorTaskStaysAtNormalPriority) {
-  // 0.5ms task should not prioritize compositing.
-  AdvanceTimeWithTask(0.05);
+  // A short task should not cause compositor tasks to be prioritized.
+  AdvanceTimeWithTask(base::Milliseconds(5));
 
   Vector<String> run_order;
   PostTestTasks(&run_order, "I1 D1 C1 D2 C2 P1");
@@ -3739,6 +3740,107 @@
   EXPECT_FALSE(throttleable_task_queue()->IsThrottled());
 }
 
+struct CompositorTQPolicyDuringThreadedScrollTestParam {
+  CompositorTQPolicyDuringThreadedScrollTestParam(
+      CompositorTQPolicyDuringThreadedScroll policy,
+      Vector<String> initial_order)
+      : policy(policy), expected_initial_order(std::move(initial_order)) {}
+
+  CompositorTQPolicyDuringThreadedScroll policy;
+  Vector<String> expected_initial_order;
+};
+
+class CompositorTQPolicyDuringThreadedScrollTest
+    : public MainThreadSchedulerImplTest,
+      public ::testing::WithParamInterface<
+          CompositorTQPolicyDuringThreadedScrollTestParam> {
+ public:
+  CompositorTQPolicyDuringThreadedScrollTest() {
+    if (GetParam().policy !=
+        CompositorTQPolicyDuringThreadedScroll::kLowPriorityAlways) {
+      feature_list_.Reset();
+      feature_list_.InitWithFeaturesAndParameters(
+          {{kThreadedScrollPreventRenderingStarvation,
+            base::FieldTrialParams(
+                {{"policy", kCompositorTQPolicyDuringThreadedScroll.GetName(
+                                GetParam().policy)}})}},
+          {});
+    }
+  }
+};
+
+TEST_P(CompositorTQPolicyDuringThreadedScrollTest, CompositorPriority) {
+  SimulateMainThreadGestureWithoutPreventDefault();
+  EXPECT_EQ(UseCase::kCompositorGesture, CurrentUseCase());
+
+  Vector<String> run_order;
+  PostTestTasks(&run_order, "D1 C1 D2 C2");
+
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(run_order, GetParam().expected_initial_order);
+  EXPECT_EQ(UseCase::kCompositorGesture, CurrentUseCase());
+
+  run_order.clear();
+  AdvanceTimeWithTask(kDelayForHighPriorityRendering);
+  PostTestTasks(&run_order, "D1 C1 D2 C2");
+
+  base::RunLoop().RunUntilIdle();
+  // The delay-based anti-starvation applies to all policies except
+  // kLowPriorityAlways, in which case the expected value doesn't change.
+  if (GetParam().policy ==
+      CompositorTQPolicyDuringThreadedScroll::kLowPriorityAlways) {
+    EXPECT_EQ(run_order, GetParam().expected_initial_order);
+  } else {
+    EXPECT_THAT(run_order, testing::ElementsAre("C1", "C2", "D1", "D2"));
+  }
+  EXPECT_EQ(UseCase::kCompositorGesture, CurrentUseCase());
+
+  // Reset the frame delay counter to let use-case-based priority determine task
+  // order again.
+  PostTestTasks(&run_order, "CM1");
+  base::RunLoop().RunUntilIdle();
+
+  run_order.clear();
+  PostTestTasks(&run_order, "D1 C1 D2 C2");
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(run_order, GetParam().expected_initial_order);
+  EXPECT_EQ(UseCase::kCompositorGesture, CurrentUseCase());
+}
+
+INSTANTIATE_TEST_CASE_P(
+    ,
+    CompositorTQPolicyDuringThreadedScrollTest,
+    testing::Values(
+        CompositorTQPolicyDuringThreadedScrollTestParam(
+            CompositorTQPolicyDuringThreadedScroll::
+                kLowPriorityWithAntiStarvation,
+            Vector<String>({"D1", "D2", "C1", "C2"})),
+        CompositorTQPolicyDuringThreadedScrollTestParam(
+            CompositorTQPolicyDuringThreadedScroll::
+                kNormalPriorityWithAntiStarvation,
+            Vector<String>({"D1", "C1", "D2", "C2"})),
+        CompositorTQPolicyDuringThreadedScrollTestParam(
+            CompositorTQPolicyDuringThreadedScroll::kVeryHighPriorityAlways,
+            Vector<String>({"C1", "C2", "D1", "D2"})),
+        CompositorTQPolicyDuringThreadedScrollTestParam(
+            CompositorTQPolicyDuringThreadedScroll::kLowPriorityAlways,
+            Vector<String>({"D1", "D2", "C1", "C2"}))),
+    [](const testing::TestParamInfo<
+        CompositorTQPolicyDuringThreadedScrollTestParam>& info) {
+      switch (info.param.policy) {
+        case CompositorTQPolicyDuringThreadedScroll::kLowPriorityAlways:
+          return "LowPriorityAlways";
+        case CompositorTQPolicyDuringThreadedScroll::
+            kLowPriorityWithAntiStarvation:
+          return "LowPriorityWithAntiStarvation";
+        case CompositorTQPolicyDuringThreadedScroll::
+            kNormalPriorityWithAntiStarvation:
+          return "NormalPriorityWithAntiStarvation";
+        case CompositorTQPolicyDuringThreadedScroll::kVeryHighPriorityAlways:
+          return "VeryHighPriorityAlways";
+      }
+    });
+
 }  // namespace main_thread_scheduler_impl_unittest
 }  // namespace scheduler
 }  // namespace blink
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/web_scoped_virtual_time_pauser.cc b/third_party/blink/renderer/platform/scheduler/main_thread/web_scoped_virtual_time_pauser.cc
index 779728ef..33e8f47 100644
--- a/third_party/blink/renderer/platform/scheduler/main_thread/web_scoped_virtual_time_pauser.cc
+++ b/third_party/blink/renderer/platform/scheduler/main_thread/web_scoped_virtual_time_pauser.cc
@@ -6,7 +6,7 @@
 
 #include "base/trace_event/trace_event.h"
 #include "third_party/blink/renderer/platform/instrumentation/tracing/traced_value.h"
-#include "third_party/blink/renderer/platform/scheduler/common/thread_scheduler_impl.h"
+#include "third_party/blink/renderer/platform/scheduler/common/thread_scheduler_base.h"
 
 namespace blink {
 
@@ -14,7 +14,7 @@
     : scheduler_(nullptr) {}
 
 WebScopedVirtualTimePauser::WebScopedVirtualTimePauser(
-    scheduler::ThreadSchedulerImpl* scheduler,
+    scheduler::ThreadSchedulerBase* scheduler,
     VirtualTaskDuration duration,
     const WebString& name)
     : duration_(duration),
diff --git a/third_party/blink/renderer/platform/scheduler/public/main_thread_scheduler.h b/third_party/blink/renderer/platform/scheduler/public/main_thread_scheduler.h
new file mode 100644
index 0000000..c2d88bc
--- /dev/null
+++ b/third_party/blink/renderer/platform/scheduler/public/main_thread_scheduler.h
@@ -0,0 +1,38 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_PUBLIC_MAIN_THREAD_SCHEDULER_H_
+#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_PUBLIC_MAIN_THREAD_SCHEDULER_H_
+
+#include "third_party/blink/renderer/platform/scheduler/public/thread_scheduler.h"
+
+namespace blink {
+
+// This class is used to submit tasks and pass other information from Blink to
+// the platform's main thread scheduler.
+class PLATFORM_EXPORT MainThreadScheduler : public ThreadScheduler {
+ public:
+  // RAII handle for pausing the renderer. Renderer is paused while
+  // at least one pause handle exists.
+  class PLATFORM_EXPORT RendererPauseHandle {
+   public:
+    RendererPauseHandle() = default;
+    RendererPauseHandle(const RendererPauseHandle&) = delete;
+    RendererPauseHandle& operator=(const RendererPauseHandle&) = delete;
+    virtual ~RendererPauseHandle() = default;
+  };
+
+  // Tells the scheduler that the renderer process should be paused.
+  // Pausing means that all javascript callbacks should not fire.
+  // https://html.spec.whatwg.org/#pause
+  //
+  // Renderer will be resumed when the handle is destroyed.
+  // Handle should be destroyed before the renderer.
+  [[nodiscard]] virtual std::unique_ptr<RendererPauseHandle>
+  PauseScheduler() = 0;
+};
+
+}  // namespace blink
+
+#endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_PUBLIC_MAIN_THREAD_SCHEDULER_H_
diff --git a/third_party/blink/renderer/platform/scheduler/public/thread_scheduler.h b/third_party/blink/renderer/platform/scheduler/public/thread_scheduler.h
index 797184d2..f93b6962 100644
--- a/third_party/blink/renderer/platform/scheduler/public/thread_scheduler.h
+++ b/third_party/blink/renderer/platform/scheduler/public/thread_scheduler.h
@@ -30,16 +30,15 @@
 class NonMainThreadSchedulerImpl;
 }
 
+class MainThreadScheduler;
 class RAILModeObserver;
 
 // This class is used to submit tasks and pass other information from Blink to
 // the platform's scheduler.
-// TODO(skyostil): Replace this class with WebMainThreadScheduler.
+// TODO(dtapuska): Move methods that are intended only for the main thread
+// scheduler into MainThreadScheduler.
 class PLATFORM_EXPORT ThreadScheduler {
  public:
-  using RendererPauseHandle =
-      scheduler::WebThreadScheduler::RendererPauseHandle;
-
   // Return the current thread's ThreadScheduler.
   static ThreadScheduler* Current();
 
@@ -134,11 +133,6 @@
   virtual scheduler::WebAgentGroupScheduler*
   GetCurrentAgentGroupScheduler() = 0;
 
-  // Pauses the scheduler. See WebThreadScheduler::PauseRenderer for
-  // details. May only be called from the main thread.
-  [[nodiscard]] virtual std::unique_ptr<RendererPauseHandle>
-  PauseScheduler() = 0;
-
   // Returns the current time recognized by the scheduler, which may perhaps
   // be based on a real or virtual time domain. Used by Timer.
   virtual base::TimeTicks MonotonicallyIncreasingVirtualTime() = 0;
@@ -166,6 +160,9 @@
     return nullptr;
   }
 
+  // Convert this into a MainThreadScheduler if it is one.
+  virtual MainThreadScheduler* ToMainThreadScheduler() { return nullptr; }
+
   // Test helpers.
 
   virtual scheduler::NonMainThreadSchedulerImpl* AsNonMainThreadScheduler() = 0;
diff --git a/third_party/blink/renderer/platform/scheduler/test/web_fake_thread_scheduler.cc b/third_party/blink/renderer/platform/scheduler/test/web_fake_thread_scheduler.cc
index 506379a..d0700747 100644
--- a/third_party/blink/renderer/platform/scheduler/test/web_fake_thread_scheduler.cc
+++ b/third_party/blink/renderer/platform/scheduler/test/web_fake_thread_scheduler.cc
@@ -41,11 +41,6 @@
 
 void WebFakeThreadScheduler::SetRendererBackgrounded(bool backgrounded) {}
 
-std::unique_ptr<WebFakeThreadScheduler::RendererPauseHandle>
-WebFakeThreadScheduler::PauseRenderer() {
-  return nullptr;
-}
-
 #if BUILDFLAG(IS_ANDROID)
 void WebFakeThreadScheduler::PauseTimersForAndroidWebView() {}
 
diff --git a/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_impl.cc b/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_impl.cc
index 18cdb13f..c0e7841 100644
--- a/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_impl.cc
+++ b/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_impl.cc
@@ -81,9 +81,8 @@
   return nullptr;
 }
 
-std::unique_ptr<NonMainThreadSchedulerImpl::RendererPauseHandle>
-NonMainThreadSchedulerImpl::PauseScheduler() {
-  return nullptr;
+void NonMainThreadSchedulerImpl::SetV8Isolate(v8::Isolate* isolate) {
+  ThreadSchedulerBase::SetV8Isolate(isolate);
 }
 
 base::TimeTicks
diff --git a/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_impl.h b/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_impl.h
index 4e8ae4a9..08fb101 100644
--- a/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_impl.h
+++ b/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_impl.h
@@ -13,7 +13,7 @@
 #include "third_party/blink/public/platform/scheduler/web_thread_scheduler.h"
 #include "third_party/blink/renderer/platform/platform_export.h"
 #include "third_party/blink/renderer/platform/scheduler/common/single_thread_idle_task_runner.h"
-#include "third_party/blink/renderer/platform/scheduler/common/thread_scheduler_impl.h"
+#include "third_party/blink/renderer/platform/scheduler/common/thread_scheduler_base.h"
 #include "third_party/blink/renderer/platform/scheduler/common/tracing_helper.h"
 #include "third_party/blink/renderer/platform/scheduler/public/thread_scheduler.h"
 #include "third_party/blink/renderer/platform/scheduler/public/thread_type.h"
@@ -25,7 +25,8 @@
 
 class WorkerSchedulerProxy;
 
-class PLATFORM_EXPORT NonMainThreadSchedulerImpl : public ThreadSchedulerImpl {
+class PLATFORM_EXPORT NonMainThreadSchedulerImpl : public ThreadScheduler,
+                                                   public ThreadSchedulerBase {
  public:
   NonMainThreadSchedulerImpl(const NonMainThreadSchedulerImpl&) = delete;
   NonMainThreadSchedulerImpl& operator=(const NonMainThreadSchedulerImpl&) =
@@ -57,7 +58,7 @@
       base::sequence_manager::TaskQueue::TaskTiming* task_timing,
       base::sequence_manager::LazyNow* lazy_now) = 0;
 
-  // ThreadSchedulerImpl:
+  // ThreadSchedulerBase:
   scoped_refptr<base::SingleThreadTaskRunner> ControlTaskRunner() override;
   const base::TickClock* GetTickClock() const override;
 
@@ -73,7 +74,7 @@
                            Thread::IdleTask task) override;
   std::unique_ptr<WebAgentGroupScheduler> CreateAgentGroupScheduler() override;
   WebAgentGroupScheduler* GetCurrentAgentGroupScheduler() override;
-  [[nodiscard]] std::unique_ptr<RendererPauseHandle> PauseScheduler() override;
+  void SetV8Isolate(v8::Isolate* isolate) override;
 
   // Returns base::TimeTicks::Now() by default.
   base::TimeTicks MonotonicallyIncreasingVirtualTime() override;
diff --git a/third_party/blink/renderer/platform/scheduler/worker/worker_thread_scheduler.cc b/third_party/blink/renderer/platform/scheduler/worker/worker_thread_scheduler.cc
index e18ea1b..2dab73a5 100644
--- a/third_party/blink/renderer/platform/scheduler/worker/worker_thread_scheduler.cc
+++ b/third_party/blink/renderer/platform/scheduler/worker/worker_thread_scheduler.cc
@@ -182,7 +182,7 @@
 
 void WorkerThreadScheduler::Shutdown() {
   DCHECK(initialized_);
-  ThreadSchedulerImpl::Shutdown();
+  ThreadSchedulerBase::Shutdown();
   idle_helper_.Shutdown();
   GetHelper().Shutdown();
 }
diff --git a/third_party/blink/renderer/platform/widget/input/frame_widget_input_handler_impl.cc b/third_party/blink/renderer/platform/widget/input/frame_widget_input_handler_impl.cc
index cf3d3230..aa5fac5a 100644
--- a/third_party/blink/renderer/platform/widget/input/frame_widget_input_handler_impl.cc
+++ b/third_party/blink/renderer/platform/widget/input/frame_widget_input_handler_impl.cc
@@ -145,6 +145,17 @@
       widget_, main_thread_frame_widget_input_handler_, start, end));
 }
 
+void FrameWidgetInputHandlerImpl::HandleStylusWritingGestureAction(
+    mojom::blink::StylusWritingGestureDataPtr gesture_data) {
+  RunOnMainThread(base::BindOnce(
+      [](base::WeakPtr<mojom::blink::FrameWidgetInputHandler> handler,
+         mojom::blink::StylusWritingGestureDataPtr gesture_data) {
+        if (handler)
+          handler->HandleStylusWritingGestureAction(std::move(gesture_data));
+      },
+      main_thread_frame_widget_input_handler_, std::move(gesture_data)));
+}
+
 void FrameWidgetInputHandlerImpl::ExecuteEditCommand(const String& command,
                                                      const String& value) {
   RunOnMainThread(base::BindOnce(
diff --git a/third_party/blink/renderer/platform/widget/input/frame_widget_input_handler_impl.h b/third_party/blink/renderer/platform/widget/input/frame_widget_input_handler_impl.h
index dd0a025..608e4c3e8 100644
--- a/third_party/blink/renderer/platform/widget/input/frame_widget_input_handler_impl.h
+++ b/third_party/blink/renderer/platform/widget/input/frame_widget_input_handler_impl.h
@@ -9,6 +9,7 @@
 #include "mojo/public/cpp/bindings/associated_receiver.h"
 #include "mojo/public/cpp/bindings/pending_associated_receiver.h"
 #include "third_party/blink/public/mojom/input/input_handler.mojom-blink.h"
+#include "third_party/blink/public/mojom/input/stylus_writing_gesture.mojom-blink.h"
 #include "third_party/blink/renderer/platform/platform_export.h"
 
 namespace blink {
@@ -68,6 +69,8 @@
   void DeleteSurroundingTextInCodePoints(int32_t before,
                                          int32_t after) override;
   void SetEditableSelectionOffsets(int32_t start, int32_t end) override;
+  void HandleStylusWritingGestureAction(
+      mojom::blink::StylusWritingGestureDataPtr gesture_data) override;
   void ExecuteEditCommand(const String& command, const String& value) override;
   void Undo() override;
   void Redo() override;
diff --git a/third_party/blink/tools/blinkpy/common/path_finder.py b/third_party/blink/tools/blinkpy/common/path_finder.py
index 71b6570..7f8fae5 100644
--- a/third_party/blink/tools/blinkpy/common/path_finder.py
+++ b/third_party/blink/tools/blinkpy/common/path_finder.py
@@ -117,6 +117,7 @@
 # web_tests path relative to the repository root.
 # Path separators are always '/', and this contains the trailing '/'.
 RELATIVE_WEB_TESTS = 'third_party/blink/web_tests/'
+RELATIVE_WPT_TESTS = 'third_party/blink/web_tests/external/wpt/'
 WEB_TESTS_LAST_COMPONENT = 'web_tests'
 
 
diff --git a/third_party/blink/tools/blinkpy/w3c/chromium_commit_unittest.py b/third_party/blink/tools/blinkpy/w3c/chromium_commit_unittest.py
index 75fb2bf..4938e01 100644
--- a/third_party/blink/tools/blinkpy/w3c/chromium_commit_unittest.py
+++ b/third_party/blink/tools/blinkpy/w3c/chromium_commit_unittest.py
@@ -6,12 +6,11 @@
 
 from blinkpy.common.host_mock import MockHost
 from blinkpy.common.path_finder import RELATIVE_WEB_TESTS
+from blinkpy.common.path_finder import RELATIVE_WPT_TESTS
 from blinkpy.common.system.executive import ScriptError
 from blinkpy.common.system.executive_mock import MockExecutive, mock_git_commands
 from blinkpy.w3c.chromium_commit import ChromiumCommit
 
-CHROMIUM_WPT_DIR = RELATIVE_WEB_TESTS + 'external/wpt/'
-
 
 class ChromiumCommitTest(unittest.TestCase):
     def test_validates_sha(self):
@@ -61,7 +60,7 @@
         host = MockHost()
 
         fake_files = ['file1', 'MANIFEST.json', 'file3', 'OWNERS']
-        qualified_fake_files = [CHROMIUM_WPT_DIR + f for f in fake_files]
+        qualified_fake_files = [RELATIVE_WPT_TESTS + f for f in fake_files]
 
         host.executive = mock_git_commands({
             'diff-tree':
@@ -77,7 +76,7 @@
 
         expected_files = ['file1', 'file3']
         qualified_expected_files = [
-            CHROMIUM_WPT_DIR + f for f in expected_files
+            RELATIVE_WPT_TESTS + f for f in expected_files
         ]
 
         self.assertEqual(files, qualified_expected_files)
diff --git a/third_party/blink/tools/blinkpy/w3c/chromium_exportable_commits.py b/third_party/blink/tools/blinkpy/w3c/chromium_exportable_commits.py
index 488c1d5..a69b313c 100644
--- a/third_party/blink/tools/blinkpy/w3c/chromium_exportable_commits.py
+++ b/third_party/blink/tools/blinkpy/w3c/chromium_exportable_commits.py
@@ -4,9 +4,9 @@
 
 import logging
 
+from blinkpy.common.path_finder import RELATIVE_WPT_TESTS
 from blinkpy.w3c.chromium_commit import ChromiumCommit
 from blinkpy.w3c.chromium_finder import absolute_chromium_dir
-from blinkpy.w3c.common import CHROMIUM_WPT_DIR
 
 _log = logging.getLogger(__name__)
 
@@ -77,7 +77,7 @@
         ['git', 'rev-parse', '--show-toplevel'],
         cwd=absolute_chromium_dir(host)).strip()
 
-    wpt_path = chromium_repo_root + '/' + CHROMIUM_WPT_DIR
+    wpt_path = chromium_repo_root + '/' + RELATIVE_WPT_TESTS
     commit_range = '{}..HEAD'.format(chromium_commit_hash)
     skipped_revs = ['^' + rev for rev in SKIPPED_REVISIONS]
     command = (['git', 'rev-list', commit_range] + skipped_revs +
diff --git a/third_party/blink/tools/blinkpy/w3c/common.py b/third_party/blink/tools/blinkpy/w3c/common.py
index 24acf6d..4510a205 100644
--- a/third_party/blink/tools/blinkpy/w3c/common.py
+++ b/third_party/blink/tools/blinkpy/w3c/common.py
@@ -6,7 +6,7 @@
 import json
 import logging
 
-from blinkpy.common.path_finder import RELATIVE_WEB_TESTS
+from blinkpy.common.path_finder import RELATIVE_WPT_TESTS
 
 WPT_GH_ORG = 'web-platform-tests'
 WPT_GH_REPO_NAME = 'wpt'
@@ -24,8 +24,6 @@
 DEFAULT_WPT_COMMITTER_NAME = 'Chromium WPT Sync'
 DEFAULT_WPT_COMMITTER_EMAIL = 'blink-w3c-test-autoroller@chromium.org'
 
-CHROMIUM_WPT_DIR = RELATIVE_WEB_TESTS + 'external/wpt/'
-
 _log = logging.getLogger(__name__)
 
 
@@ -121,6 +119,6 @@
     Args:
         path: A relative path from the root of Chromium repository.
     """
-    assert path.startswith(CHROMIUM_WPT_DIR)
+    assert path.startswith(RELATIVE_WPT_TESTS)
     basename = path[path.rfind('/') + 1:]
     return not is_basename_skipped(basename)
diff --git a/third_party/blink/tools/blinkpy/w3c/common_unittest.py b/third_party/blink/tools/blinkpy/w3c/common_unittest.py
index 4e82383c..52ce0e0 100644
--- a/third_party/blink/tools/blinkpy/w3c/common_unittest.py
+++ b/third_party/blink/tools/blinkpy/w3c/common_unittest.py
@@ -6,10 +6,10 @@
 import unittest
 
 from blinkpy.common.host_mock import MockHost
-from blinkpy.common.path_finder import RELATIVE_WEB_TESTS
+from blinkpy.common.path_finder import RELATIVE_WPT_TESTS
 from blinkpy.w3c.common import (read_credentials, is_testharness_baseline,
                                 is_disallowed_ini, is_basename_skipped,
-                                is_file_exportable, CHROMIUM_WPT_DIR)
+                                is_file_exportable)
 
 
 class CommonTest(unittest.TestCase):
@@ -106,25 +106,25 @@
 
     def test_is_file_exportable(self):
         self.assertTrue(
-            is_file_exportable(CHROMIUM_WPT_DIR + 'html/fake-test.html'))
+            is_file_exportable(RELATIVE_WPT_TESTS + 'html/fake-test.html'))
         self.assertFalse(
-            is_file_exportable(CHROMIUM_WPT_DIR +
+            is_file_exportable(RELATIVE_WPT_TESTS +
                                'html/fake-test-expected.txt'))
         self.assertFalse(
-            is_file_exportable(CHROMIUM_WPT_DIR + 'MANIFEST.json'))
-        self.assertFalse(is_file_exportable(CHROMIUM_WPT_DIR + 'dom/OWNERS'))
+            is_file_exportable(RELATIVE_WPT_TESTS + 'MANIFEST.json'))
+        self.assertFalse(is_file_exportable(RELATIVE_WPT_TESTS + 'dom/OWNERS'))
         self.assertFalse(
-            is_file_exportable(CHROMIUM_WPT_DIR + 'dom/DIR_METADATA'))
+            is_file_exportable(RELATIVE_WPT_TESTS + 'dom/DIR_METADATA'))
         self.assertTrue(
-            is_file_exportable(CHROMIUM_WPT_DIR +
+            is_file_exportable(RELATIVE_WPT_TESTS +
                                'tools/wptrunner/wptrunner.default.ini'))
         self.assertFalse(
             is_file_exportable(
-                CHROMIUM_WPT_DIR +
+                RELATIVE_WPT_TESTS +
                 'infrastructure/metadata/infrastructure/expected-fail/timeout.html.ini'
             ))
         self.assertFalse(
-            is_file_exportable(CHROMIUM_WPT_DIR + 'dom/historical.html.ini'))
+            is_file_exportable(RELATIVE_WPT_TESTS + 'dom/historical.html.ini'))
 
     def test_is_file_exportable_asserts_path(self):
         # Rejects basenames.
@@ -135,5 +135,5 @@
             is_file_exportable('third_party/fake/OWNERS')
         # Rejects absolute paths.
         with self.assertRaises(AssertionError):
-            is_file_exportable('/mock-checkout/' + RELATIVE_WEB_TESTS +
-                               'external/wpt/OWNERS')
+            is_file_exportable('/mock-checkout/' + RELATIVE_WPT_TESTS +
+                               'OWNERS')
diff --git a/third_party/blink/tools/blinkpy/w3c/gerrit.py b/third_party/blink/tools/blinkpy/w3c/gerrit.py
index 8dd55be..7c63118d 100644
--- a/third_party/blink/tools/blinkpy/w3c/gerrit.py
+++ b/third_party/blink/tools/blinkpy/w3c/gerrit.py
@@ -8,9 +8,10 @@
 from six.moves.urllib.error import HTTPError
 
 from blinkpy.common.net.network_transaction import NetworkTimeout
+from blinkpy.common.path_finder import RELATIVE_WPT_TESTS
 from blinkpy.w3c.chromium_commit import ChromiumCommit
 from blinkpy.w3c.chromium_finder import absolute_chromium_dir
-from blinkpy.w3c.common import CHROMIUM_WPT_DIR, is_file_exportable
+from blinkpy.w3c.common import is_file_exportable
 
 _log = logging.getLogger(__name__)
 URL_BASE = 'https://chromium-review.googlesource.com'
@@ -186,7 +187,7 @@
         if 'NOEXPORT=true' in self.current_revision['commit_with_footers']:
             return False
 
-        files_in_wpt = [f for f in files if f.startswith(CHROMIUM_WPT_DIR)]
+        files_in_wpt = [f for f in files if f.startswith(RELATIVE_WPT_TESTS)]
         if not files_in_wpt:
             return False
 
diff --git a/third_party/blink/tools/blinkpy/w3c/gerrit_unittest.py b/third_party/blink/tools/blinkpy/w3c/gerrit_unittest.py
index f4bb512..1a84fec5 100644
--- a/third_party/blink/tools/blinkpy/w3c/gerrit_unittest.py
+++ b/third_party/blink/tools/blinkpy/w3c/gerrit_unittest.py
@@ -5,7 +5,7 @@
 import unittest
 
 from blinkpy.common.host_mock import MockHost
-from blinkpy.common.path_finder import RELATIVE_WEB_TESTS
+from blinkpy.common.path_finder import RELATIVE_WEB_TESTS, RELATIVE_WPT_TESTS
 from blinkpy.common.system.executive_mock import mock_git_commands
 from blinkpy.w3c.gerrit import GerritAPI, GerritCL
 from blinkpy.w3c.gerrit_mock import MockGerritAPI
@@ -124,7 +124,7 @@
                 '1': {
                     'commit_with_footers': 'fake subject',
                     'files': {
-                        RELATIVE_WEB_TESTS + 'external/wpt/foo/bar.html': '',
+                        RELATIVE_WPT_TESTS + 'foo/bar.html': '',
                     }
                 }
             },
@@ -166,7 +166,7 @@
                 '1': {
                     'commit_with_footers': 'fake subject\nNo-Export: true',
                     'files': {
-                        RELATIVE_WEB_TESTS + 'external/wpt/foo/bar.html': '',
+                        RELATIVE_WPT_TESTS + 'foo/bar.html': '',
                     }
                 }
             },
@@ -187,7 +187,7 @@
                 '1': {
                     'commit_with_footers': 'fake subject\nNOEXPORT=true',
                     'files': {
-                        RELATIVE_WEB_TESTS + 'external/wpt/foo/bar.html': '',
+                        RELATIVE_WPT_TESTS + 'foo/bar.html': '',
                     }
                 }
             },
@@ -208,7 +208,7 @@
                 '1': {
                     'commit_with_footers': 'fake subject',
                     'files': {
-                        RELATIVE_WEB_TESTS + 'external/wpt/foo/bar.html': '',
+                        RELATIVE_WPT_TESTS + 'foo/bar.html': '',
                     }
                 }
             },
diff --git a/third_party/blink/tools/blinkpy/w3c/local_wpt.py b/third_party/blink/tools/blinkpy/w3c/local_wpt.py
index 0c1feef..f233145 100644
--- a/third_party/blink/tools/blinkpy/w3c/local_wpt.py
+++ b/third_party/blink/tools/blinkpy/w3c/local_wpt.py
@@ -5,9 +5,9 @@
 
 import logging
 
+from blinkpy.common.path_finder import RELATIVE_WPT_TESTS
 from blinkpy.common.system.executive import ScriptError
 from blinkpy.w3c.common import (
-    CHROMIUM_WPT_DIR,
     DEFAULT_WPT_COMMITTER_EMAIL,
     DEFAULT_WPT_COMMITTER_NAME,
     WPT_GH_SSH_URL_TEMPLATE,
@@ -99,7 +99,7 @@
         self.run(['git', 'checkout', '-b', branch_name])
 
         # Remove Chromium WPT directory prefix.
-        patch = patch.replace(CHROMIUM_WPT_DIR, '')
+        patch = patch.replace(RELATIVE_WPT_TESTS, '')
 
         _log.info('Author: %s', author)
         if '<' in author:
@@ -107,7 +107,7 @@
         else:
             author_str = '%s <%s>' % (author, author)
 
-        # TODO(jeffcarp): Use git am -p<n> where n is len(CHROMIUM_WPT_DIR.split(/'))
+        # TODO(jeffcarp): Use git am -p<n> where n is len(RELATIVE_WPT_TESTS.split(/'))
         # or something not off-by-one.
         self.run(['git', 'apply', '-'], input=patch)
         self.run(['git', 'add', '.'])
@@ -150,7 +150,7 @@
             A string containing error messages from git, empty if the patch applies cleanly.
         """
         # Remove Chromium WPT directory prefix.
-        patch = patch.replace(CHROMIUM_WPT_DIR, '')
+        patch = patch.replace(RELATIVE_WPT_TESTS, '')
         try:
             self.run(['git', 'apply', '-'], input=patch)
             self.run(['git', 'add', '.'])
diff --git a/third_party/blink/tools/blinkpy/web_tests/port/fuchsia.py b/third_party/blink/tools/blinkpy/web_tests/port/fuchsia.py
index c6e2ec4..9261b9f 100644
--- a/third_party/blink/tools/blinkpy/web_tests/port/fuchsia.py
+++ b/third_party/blink/tools/blinkpy/web_tests/port/fuchsia.py
@@ -27,7 +27,6 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 import logging
-import multiprocessing
 import os
 import select
 import socket
@@ -227,16 +226,10 @@
         return self.get_option('fuchsia_target_cpu')
 
     def _cpu_cores(self):
-        # Revise the processor count on arm64, the trybots on arm64 are in
-        # dockers and cannot use all processors.
-        # For x64, fvdl always assumes hyperthreading is supported by intel
-        # processors, but the cpu_count returns the number regarding if the core
-        # is a physical one or a hyperthreading one, so the number should be
-        # divided by 2 to avoid creating more threads than the processor
-        # supports.
-        if self._target_cpu() == 'x64':
-            return max(int(multiprocessing.cpu_count() / 2) - 1, 4)
-        return 4
+        # TODO(crbug.com/1340573): Four parallel jobs always gives reasonable
+        # performance, while using larger numbers may actually slow things.
+        # Hard-code eight virtual CPU cores, so that four jobs will be run.
+        return 8
 
     def setup_test_run(self):
         super(FuchsiaPort, self).setup_test_run()
@@ -280,8 +273,9 @@
             self._target_host = None
 
     def num_workers(self, requested_num_workers):
-        # Run a single qemu instance.
-        return min(self._cpu_cores(), requested_num_workers)
+        # Allow for multi-process / multi-threading overhead in the browser
+        # by allocating two CPU cores per-worker.
+        return min(self._cpu_cores() / 2, requested_num_workers)
 
     def _default_timeout_ms(self):
         # Use 20s timeout instead of the default 6s. This is necessary because
@@ -292,7 +286,8 @@
     def start_http_server(self, additional_dirs, number_of_drivers):
         additional_dirs['/third_party/blink/PerformanceTests'] = \
             self._perf_tests_dir()
-        additional_dirs[WEB_TESTS_PATH_PREFIX] = self.web_tests_dir()
+        additional_dirs[WEB_TESTS_PATH_PREFIX] = \
+            self._path_finder.web_tests_dir()
         additional_dirs['/gen'] = self.generated_sources_directory()
         additional_dirs['/third_party/blink'] = \
             self._path_from_chromium_base('third_party', 'blink')
@@ -354,9 +349,9 @@
                         self)._command_from_driver_input(driver_input)
         if command.startswith('/'):
             relative_test_filename = \
-                os.path.relpath(command, self._port.web_tests_dir())
-            command = 'http://127.0.0.1:8000' + WEB_TESTS_PATH_PREFIX + \
-                '/' + relative_test_filename
+                os.path.relpath(command,
+                                self._port._path_finder.chromium_base())
+            command = 'http://127.0.0.1:8000' + '/' + relative_test_filename
         return command
 
 
diff --git a/third_party/blink/web_tests/FlagExpectations/disable-layout-ng b/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
index 851b4a2..d18b714 100644
--- a/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
+++ b/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
@@ -310,6 +310,47 @@
 crbug.com/829028 external/wpt/css/css-break/relpos-inline-hit-testing.html [ Failure ]
 crbug.com/829028 external/wpt/css/css-break/relpos-inline.html [ Failure ]
 crbug.com/829028 external/wpt/css/css-break/ruby-003.html [ Failure ]
+crbug.com/1078927 external/wpt/css/css-break/table/break-after-table-cell.html [ Failure ]
+crbug.com/1078927 external/wpt/css/css-break/table/break-after-table-cell-child.html [ Failure ]
+crbug.com/1078927 external/wpt/css/css-break/table/break-avoidance-001.html [ Failure ]
+crbug.com/1078927 external/wpt/css/css-break/table/break-avoidance-002.html [ Failure ]
+crbug.com/1078927 external/wpt/css/css-break/table/break-avoidance-003.html [ Failure ]
+crbug.com/1078927 external/wpt/css/css-break/table/break-avoidance-004.html [ Failure ]
+crbug.com/1078927 external/wpt/css/css-break/table/break-avoidance-005.html [ Failure ]
+crbug.com/1078927 external/wpt/css/css-break/table/break-avoidance-006.html [ Failure ]
+crbug.com/1078927 external/wpt/css/css-break/table/break-avoidance-in-table-in-grid.html [ Failure ]
+crbug.com/1078927 external/wpt/css/css-break/table/break-before-expansion-001.html [ Failure ]
+crbug.com/1078927 external/wpt/css/css-break/table/break-before-expansion-002.html [ Failure ]
+crbug.com/1078927 external/wpt/css/css-break/table/break-before-table-cell.html [ Failure ]
+crbug.com/1078927 external/wpt/css/css-break/table/break-before-table-cell-child.html [ Failure ]
+crbug.com/1078927 external/wpt/css/css-break/table/caption-margin-002.html [ Failure ]
+crbug.com/1078927 external/wpt/css/css-break/table/repeated-section/abspos.tentative.html [ Failure ]
+crbug.com/1078927 external/wpt/css/css-break/table/repeated-section/abspos-in-monolithic.tentative.html [ Failure ]
+crbug.com/1078927 external/wpt/css/css-break/table/repeated-section/block-in-inline.tentative.html [ Failure ]
+crbug.com/1078927 external/wpt/css/css-break/table/repeated-section/captions.tentative.html [ Failure ]
+crbug.com/1078927 external/wpt/css/css-break/table/repeated-section/footer.tentative.html [ Failure ]
+crbug.com/1078927 external/wpt/css/css-break/table/repeated-section/header-after-break.tentative.html [ Failure ]
+crbug.com/1078927 external/wpt/css/css-break/table/repeated-section/header-footer.tentative.html [ Failure ]
+crbug.com/1078927 external/wpt/css/css-break/table/repeated-section/header.tentative.html [ Failure ]
+crbug.com/1078927 external/wpt/css/css-break/table/repeated-section/hit-test-relative-in-transform.tentative.html [ Failure ]
+crbug.com/1078927 external/wpt/css/css-break/table/repeated-section/hit-test-relative.tentative.html [ Failure ]
+crbug.com/1078927 external/wpt/css/css-break/table/repeated-section/hit-test.tentative.html [ Failure ]
+crbug.com/1078927 external/wpt/css/css-break/table/repeated-section/inline-block.tentative.html [ Failure ]
+crbug.com/1078927 external/wpt/css/css-break/table/repeated-section/multicol.tentative.html [ Failure ]
+crbug.com/1078927 external/wpt/css/css-break/table/repeated-section/multiple-row-groups.tentative.html [ Failure ]
+crbug.com/1078927 external/wpt/css/css-break/table/specified-block-size-007.html [ Failure ]
+crbug.com/1078927 external/wpt/css/css-break/table/table-border-005.html [ Failure ]
+crbug.com/1078927 external/wpt/css/css-break/table/table-border-006.html [ Failure ]
+crbug.com/1078927 external/wpt/css/css-break/table/table-cell-expansion-003.html [ Failure ]
+crbug.com/1078927 external/wpt/css/css-break/table/table-col-paint-htb-ltr.html [ Failure ]
+crbug.com/1078927 external/wpt/css/css-break/table/table-collapsed-borders-paint-at-boundary.tentative.html [ Failure ]
+crbug.com/1078927 external/wpt/css/css-break/table/table-collapsed-borders-paint-htb-ltr.html [ Failure ]
+crbug.com/1078927 external/wpt/css/css-break/table/table-collapsed-borders-paint-vlr-rtl.html [ Failure ]
+crbug.com/1078927 external/wpt/css/css-break/table/table-collapsed-borders-paint-vrl-ltr.html [ Failure ]
+crbug.com/1078927 external/wpt/css/css-break/table/table-parts-offsetheight.html [ Failure ]
+crbug.com/1078927 external/wpt/css/css-break/table/table-row-paint-vlr-rtl.html [ Failure ]
+crbug.com/1078927 external/wpt/css/css-break/table/table-row-paint-vrl-rtl.html [ Failure ]
+crbug.com/1078927 external/wpt/css/css-break/table/table-section-paint-vrl-rtl.html [ Failure ]
 crbug.com/829028 external/wpt/css/css-break/tall-content-inside-constrained-block-000.tentative.html [ Failure ]
 crbug.com/829028 external/wpt/css/css-break/tall-content-inside-constrained-block-001.tentative.html [ Failure ]
 crbug.com/829028 external/wpt/css/css-break/tall-content-inside-constrained-block-002.tentative.html [ Failure ]
@@ -607,6 +648,8 @@
 crbug.com/829028 external/wpt/css/css-multicol/spanner-fragmentation-009.html [ Failure ]
 crbug.com/829028 external/wpt/css/css-multicol/spanner-fragmentation-010.html [ Failure ]
 crbug.com/829028 external/wpt/css/css-multicol/spanner-fragmentation-011.html [ Failure ]
+crbug.com/1078927 external/wpt/css/css-multicol/table/table-cell-multicol-nested-002.html [ Failure ]
+crbug.com/1078927 external/wpt/css/css-multicol/table/table-cell-multicol-nested-003.html [ Failure ]
 crbug.com/998423 external/wpt/css/css-multicol/with-custom-layout-on-same-element-crash.https.html [ Skip ]
 crbug.com/998423 external/wpt/css/css-multicol/with-custom-layout-on-same-element.https.html [ Skip ]
 
@@ -1012,6 +1055,16 @@
 ### fast/writing-mode/
 crbug.com/591099 fast/writing-mode/flipped-blocks-inline-map-local-to-container.html [ Failure ]
 
+# fragmentation/
+crbug.com/1078927 fragmentation/break-in-second-table-section.html [ Failure ]
+crbug.com/1078927 fragmentation/break-in-tbody-after-caption.html [ Failure ]
+crbug.com/849459 fragmentation/repeating-thead-under-repeating-thead.html [ Failure ]
+crbug.com/1078927 fragmentation/single-cells-multiple-tables-no-repeating-thead.html [ Failure ]
+crbug.com/1078927 fragmentation/single-line-cells-repeating-thead-cell-straddles-page-unsplittable-div.html [ Failure ]
+crbug.com/1078927 fragmentation/table-row-dimensions-break-freely.html [ Failure ]
+crbug.com/1078927 fragmentation/table-row-dimensions-with-thead.html [ Failure ]
+crbug.com/1078927 fragmentation/table-row-page-break-collapsed-border.html [ Failure ]
+
 ### external/wpt/html/rendering
 crbug.com/591099 external/wpt/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-baseline.html [ Failure ]
 crbug.com/591099 external/wpt/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-block-size.html [ Failure ]
@@ -1078,9 +1131,6 @@
 ### virtual/gpu-rasterization/images/
 crbug.com/591099 virtual/gpu-rasterization/images/color-profile-image-filter-all.html [ Failure Slow ]
 
-### virtual/layout_ng_table_frag/
-virtual/layout_ng_table_frag/* [ Skip ]
-
 ### virtual/layout_ng_printing/
 virtual/layout_ng_printing/* [ Skip ]
 
diff --git a/third_party/blink/web_tests/FlagExpectations/highdpi b/third_party/blink/web_tests/FlagExpectations/highdpi
index 4201be0b..1fd108c 100644
--- a/third_party/blink/web_tests/FlagExpectations/highdpi
+++ b/third_party/blink/web_tests/FlagExpectations/highdpi
@@ -237,6 +237,7 @@
 external/wpt/css/css-break/flexbox/button-in-multicol-crash.html [ Pass ]
 external/wpt/css/css-break/grid/grid-item-fragmentation-023.html [ Pass ]
 external/wpt/css/css-break/parsing/widows-invalid.html [ Pass ]
+external/wpt/css/css-break/table/table-cell-expansion-003.html [ Pass ]
 external/wpt/css/css-cascade/revert-layer-010.html [ Pass ]
 external/wpt/css/css-cascade/parsing/layer-import-parsing.html [ Pass ]
 external/wpt/css/css-color/rgb-003.html [ Pass ]
@@ -1308,7 +1309,6 @@
 virtual/text-antialias/whitespace/025.html [ Pass ]
 virtual/text-antialias/whitespace/nowrap-clear-float.html [ Pass ]
 virtual/text-antialias/whitespace/pre-newline-box-test.html [ Pass ]
-virtual/layout_ng_table_frag/external/wpt/css/css-break/table/table-cell-expansion-003.html [ Pass ]
 virtual/threaded-composited-iframes/external/wpt/is-input-pending/tentative/same-origin-subframe.sub.html [ Pass ]
 virtual/threaded/external/wpt/requestidlecallback/basic.html [ Pass ]
 
diff --git a/third_party/blink/web_tests/SlowTests b/third_party/blink/web_tests/SlowTests
index f597791e..505018b 100644
--- a/third_party/blink/web_tests/SlowTests
+++ b/third_party/blink/web_tests/SlowTests
@@ -825,3 +825,4 @@
 crbug.com/1228246 http/tests/inspector-protocol/fetch/fetch-cors-preflight-sw.js [ Slow ]
 crbug.com/1228246 http/tests/inspector-protocol/network/request-interception-patterns.js [ Slow ]
 crbug.com/1228246 http/tests/inspector-protocol/fetch/disable-with-response-in-flight.js [ Slow ]
+crbug.com/1306770 http/tests/inspector-protocol/network/interception-download.js [ Slow ]
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index 908e153..c92e3cf 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -1723,85 +1723,37 @@
 ### Tests failing with LayoutNGFlexFragmentation enabled:
 crbug.com/660611 fast/multicol/flexbox/doubly-nested-with-zero-width-flexbox-and-forced-break-crash.html [ Skip ]
 
-### Tests passing with LayoutNGTableFragmentation enabled:
-virtual/layout_ng_table_frag/external/wpt/css/css-break/table/break-after-table-cell.html [ Pass ]
-virtual/layout_ng_table_frag/external/wpt/css/css-break/table/break-after-table-cell-child.html [ Pass ]
-virtual/layout_ng_table_frag/external/wpt/css/css-break/table/break-avoidance-001.html [ Pass ]
-virtual/layout_ng_table_frag/external/wpt/css/css-break/table/break-avoidance-002.html [ Pass ]
-virtual/layout_ng_table_frag/external/wpt/css/css-break/table/break-avoidance-003.html [ Pass ]
-virtual/layout_ng_table_frag/external/wpt/css/css-break/table/break-avoidance-004.html [ Pass ]
-virtual/layout_ng_table_frag/external/wpt/css/css-break/table/break-avoidance-005.html [ Pass ]
-virtual/layout_ng_table_frag/external/wpt/css/css-break/table/break-avoidance-006.html [ Pass ]
-virtual/layout_ng_table_frag/external/wpt/css/css-break/table/break-avoidance-in-table-in-grid.html [ Pass ]
-virtual/layout_ng_table_frag/external/wpt/css/css-break/table/break-before-expansion-001.html [ Pass ]
-virtual/layout_ng_table_frag/external/wpt/css/css-break/table/break-before-expansion-002.html [ Pass ]
-virtual/layout_ng_table_frag/external/wpt/css/css-break/table/break-before-table-cell.html [ Pass ]
-virtual/layout_ng_table_frag/external/wpt/css/css-break/table/break-before-table-cell-child.html [ Pass ]
-virtual/layout_ng_table_frag/external/wpt/css/css-break/table/caption-margin-002.html [ Pass ]
-virtual/layout_ng_table_frag/external/wpt/css/css-break/table/specified-block-size-007.html [ Pass ]
-virtual/layout_ng_table_frag/external/wpt/css/css-break/table/repeated-section/abspos.tentative.html [ Pass ]
-virtual/layout_ng_table_frag/external/wpt/css/css-break/table/repeated-section/abspos-in-monolithic.tentative.html [ Pass ]
-virtual/layout_ng_table_frag/external/wpt/css/css-break/table/repeated-section/block-in-inline.tentative.html [ Pass ]
-virtual/layout_ng_table_frag/external/wpt/css/css-break/table/repeated-section/captions.tentative.html [ Pass ]
-virtual/layout_ng_table_frag/external/wpt/css/css-break/table/repeated-section/footer.tentative.html [ Pass ]
-virtual/layout_ng_table_frag/external/wpt/css/css-break/table/repeated-section/header-after-break.tentative.html [ Pass ]
-virtual/layout_ng_table_frag/external/wpt/css/css-break/table/repeated-section/header-footer.tentative.html [ Pass ]
-virtual/layout_ng_table_frag/external/wpt/css/css-break/table/repeated-section/header.tentative.html [ Pass ]
-virtual/layout_ng_table_frag/external/wpt/css/css-break/table/repeated-section/hit-test-relative-in-transform.tentative.html [ Pass ]
-virtual/layout_ng_table_frag/external/wpt/css/css-break/table/repeated-section/hit-test-relative.tentative.html [ Pass ]
-virtual/layout_ng_table_frag/external/wpt/css/css-break/table/repeated-section/hit-test.tentative.html [ Pass ]
-virtual/layout_ng_table_frag/external/wpt/css/css-break/table/repeated-section/inline-block.tentative.html [ Pass ]
-virtual/layout_ng_table_frag/external/wpt/css/css-break/table/repeated-section/multicol.tentative.html [ Pass ]
-virtual/layout_ng_table_frag/external/wpt/css/css-break/table/repeated-section/multiple-row-groups.tentative.html [ Pass ]
-virtual/layout_ng_table_frag/external/wpt/css/css-break/table/table-border-005.html [ Pass ]
-virtual/layout_ng_table_frag/external/wpt/css/css-break/table/table-border-006.html [ Pass ]
-virtual/layout_ng_table_frag/external/wpt/css/css-break/table/table-cell-expansion-003.html [ Pass ]
-virtual/layout_ng_table_frag/external/wpt/css/css-break/table/table-col-paint-htb-ltr.html [ Pass ]
-virtual/layout_ng_table_frag/external/wpt/css/css-break/table/table-collapsed-borders-paint-at-boundary.tentative.html [ Pass ]
-virtual/layout_ng_table_frag/external/wpt/css/css-break/table/table-collapsed-borders-paint-htb-ltr.html [ Pass ]
-virtual/layout_ng_table_frag/external/wpt/css/css-break/table/table-collapsed-borders-paint-vlr-rtl.html [ Pass ]
-virtual/layout_ng_table_frag/external/wpt/css/css-break/table/table-collapsed-borders-paint-vrl-ltr.html [ Pass ]
-virtual/layout_ng_table_frag/external/wpt/css/css-break/table/table-parts-offsetheight.html [ Pass ]
-virtual/layout_ng_table_frag/external/wpt/css/css-break/table/table-row-paint-vlr-rtl.html [ Pass ]
-virtual/layout_ng_table_frag/external/wpt/css/css-break/table/table-row-paint-vrl-rtl.html [ Pass ]
-virtual/layout_ng_table_frag/external/wpt/css/css-break/table/table-section-paint-vrl-rtl.html [ Pass ]
-virtual/layout_ng_table_frag/external/wpt/css/css-multicol/table/table-cell-multicol-nested-002.html [ Pass ]
-virtual/layout_ng_table_frag/external/wpt/css/css-multicol/table/table-cell-multicol-nested-003.html [ Pass ]
-virtual/layout_ng_table_frag/fragmentation/break-in-second-table-section.html [ Pass ]
-virtual/layout_ng_table_frag/fragmentation/break-in-tbody-after-caption.html [ Pass ]
-virtual/layout_ng_table_frag/fragmentation/repeating-thead-under-repeating-thead.html [ Pass ]
-virtual/layout_ng_table_frag/fragmentation/single-cells-multiple-tables-no-repeating-thead.html [ Pass ]
-virtual/layout_ng_table_frag/fragmentation/single-line-cells-repeating-thead-cell-straddles-page-unsplittable-div.html [ Pass ]
-virtual/layout_ng_table_frag/fragmentation/table-row-dimensions-break-freely.html [ Pass ]
-virtual/layout_ng_table_frag/fragmentation/table-row-dimensions-with-thead.html [ Pass ]
-virtual/layout_ng_table_frag/fragmentation/table-row-page-break-collapsed-border.html [ Pass ]
-
 ### Tests failing with LayoutNGTableFragmentation enabled:
-crbug.com/1295905 [ Mac11-arm64 ] virtual/layout_ng_table_frag/external/wpt/css/css-break/table/sections-and-captions-mixed-order.html [ Failure ]
-crbug.com/1078927 virtual/layout_ng_table_frag/external/wpt/css/css-multicol/table/balance-table-with-border-spacing.html [ Failure ]
-crbug.com/1078927 virtual/layout_ng_table_frag/fragmentation/border-spacing-break-before-unbreakable-row.html [ Failure ]
-crbug.com/1078927 virtual/layout_ng_table_frag/fragmentation/fragmented-rowspan-alignment.html [ Failure ]
-crbug.com/1078927 virtual/layout_ng_table_frag/fragmentation/fragmented-rowspan.html [ Failure ]
-crbug.com/1078927 virtual/layout_ng_table_frag/fragmentation/no-repeating-table-header-after-sections.html [ Failure ]
-crbug.com/1078927 virtual/layout_ng_table_frag/fragmentation/single-line-cells-multiple-tables-caption-repeating-thead-tfoot-with-border-spacing-at-top-of-row-2.html [ Failure ]
-crbug.com/1078927 virtual/layout_ng_table_frag/fragmentation/single-line-cells-multiple-tables-caption-repeating-thead-tfoot-with-border-spacing-at-top-of-row-3.html [ Failure ]
-crbug.com/1078927 virtual/layout_ng_table_frag/fragmentation/single-line-cells-multiple-tables-caption-repeating-thead-tfoot-with-border-spacing-at-top-of-row-4.html [ Failure ]
-crbug.com/1078927 virtual/layout_ng_table_frag/fragmentation/single-line-cells-multiple-tables-caption-repeating-thead-tfoot-with-border-spacing-at-top-of-row.html [ Failure ]
-crbug.com/1335870 virtual/layout_ng_table_frag/fragmentation/single-line-cells-multiple-tables-repeating-thead-with-border-spacing-at-top-of-row.html [ Failure ]
-crbug.com/1078927 virtual/layout_ng_table_frag/fragmentation/single-line-cells-repeating-thead-cell-straddles-page.html [ Failure ]
-crbug.com/1078927 virtual/layout_ng_table_frag/fragmentation/single-line-cells-repeating-thead-starts-middle-of-page-break-after-avoid.html [ Failure ]
-crbug.com/1078927 virtual/layout_ng_table_frag/fragmentation/single-line-cells-repeating-thead-tfoot-starts-middle-of-page-break-after-avoid-2.html [ Failure ]
-crbug.com/1078927 virtual/layout_ng_table_frag/fragmentation/single-line-cells-repeating-thead-tfoot-starts-middle-of-page-break-after-avoid-3.html [ Failure ]
-crbug.com/1078927 virtual/layout_ng_table_frag/fragmentation/single-line-cells-repeating-thead-tfoot-starts-middle-of-page-break-after-avoid.html [ Failure ]
-crbug.com/1078927 virtual/layout_ng_table_frag/fragmentation/single-line-cells-repeating-thead-tfoot-starts-middle-of-page.html [ Failure ]
-crbug.com/1078927 virtual/layout_ng_table_frag/fragmentation/single-line-cells-repeating-thead-tfoot-with-border-spacing-at-top-of-row.html [ Failure ]
-crbug.com/1078927 virtual/layout_ng_table_frag/fragmentation/single-line-cells-repeating-thead-tfoot-with-caption.html [ Failure ]
-crbug.com/1078927 virtual/layout_ng_table_frag/fragmentation/single-line-cells-repeating-thead-tfoot-with-two-captions.html [ Failure ]
-crbug.com/1078927 virtual/layout_ng_table_frag/fragmentation/single-line-cells-repeating-thead-tfoot.html [ Failure ]
-crbug.com/1078927 virtual/layout_ng_table_frag/fragmentation/table-overlapping-rowspan.html [ Failure ]
+crbug.com/1078927 external/wpt/css/CSS2/floats-clear/clearance-containing-fragmented-float-crash.html [ Crash Failure ]
+crbug.com/1078927 external/wpt/css/css-break/iframe-in-repeated-table-header-crash.html [ Crash Failure ]
+crbug.com/1295905 [ Mac11-arm64 ] external/wpt/css/css-break/table/sections-and-captions-mixed-order.html [ Failure ]
+crbug.com/1078927 external/wpt/css/css-multicol/table/balance-table-with-border-spacing.html [ Failure ]
+crbug.com/1078927 fast/multicol/balance-repeating-table-headers.html [ Failure ]
+crbug.com/1078927 fast/multicol/table-row-height-increase.html [ Failure ]
+crbug.com/1078927 fragmentation/border-spacing-break-before-unbreakable-row.html [ Failure ]
+crbug.com/1078927 fragmentation/fragmented-rowspan-alignment.html [ Failure ]
+crbug.com/1078927 fragmentation/fragmented-rowspan.html [ Failure ]
+crbug.com/1078927 fragmentation/no-repeating-table-header-after-sections.html [ Failure ]
+crbug.com/1078927 fragmentation/single-line-cells-multiple-tables-caption-repeating-thead-tfoot-with-border-spacing-at-top-of-row-2.html [ Failure ]
+crbug.com/1078927 fragmentation/single-line-cells-multiple-tables-caption-repeating-thead-tfoot-with-border-spacing-at-top-of-row-3.html [ Failure ]
+crbug.com/1078927 fragmentation/single-line-cells-multiple-tables-caption-repeating-thead-tfoot-with-border-spacing-at-top-of-row-4.html [ Failure ]
+crbug.com/1078927 fragmentation/single-line-cells-multiple-tables-caption-repeating-thead-tfoot-with-border-spacing-at-top-of-row.html [ Failure ]
+crbug.com/1335870 fragmentation/single-line-cells-multiple-tables-repeating-thead-with-border-spacing-at-top-of-row.html [ Failure ]
+crbug.com/1078927 fragmentation/single-line-cells-repeating-thead-cell-straddles-page.html [ Failure ]
+crbug.com/1078927 fragmentation/single-line-cells-repeating-thead-starts-middle-of-page-break-after-avoid.html [ Failure ]
+crbug.com/1078927 fragmentation/single-line-cells-repeating-thead-tfoot-starts-middle-of-page-break-after-avoid-2.html [ Failure ]
+crbug.com/1078927 fragmentation/single-line-cells-repeating-thead-tfoot-starts-middle-of-page-break-after-avoid-3.html [ Failure ]
+crbug.com/1078927 fragmentation/single-line-cells-repeating-thead-tfoot-starts-middle-of-page-break-after-avoid.html [ Failure ]
+crbug.com/1078927 fragmentation/single-line-cells-repeating-thead-tfoot-starts-middle-of-page.html [ Failure ]
+crbug.com/1078927 fragmentation/single-line-cells-repeating-thead-tfoot-with-border-spacing-at-top-of-row.html [ Failure ]
+crbug.com/1078927 fragmentation/single-line-cells-repeating-thead-tfoot-with-caption.html [ Failure ]
+crbug.com/1078927 fragmentation/single-line-cells-repeating-thead-tfoot-with-two-captions.html [ Failure ]
+crbug.com/1078927 fragmentation/single-line-cells-repeating-thead-tfoot.html [ Failure ]
+crbug.com/1078927 fragmentation/table-overlapping-rowspan.html [ Failure ]
 
 ### With LayoutNGPrinting enabled:
 
+crbug.com/1121942 virtual/layout_ng_printing/printing/avoid-setting-header-offset-on-header.html [ Failure ]
 crbug.com/1121942 virtual/layout_ng_printing/printing/block-with-overflow-in-bottom-aligned-fixedpos.html [ Crash Failure ]
 crbug.com/1121942 virtual/layout_ng_printing/printing/fixed-positioned-but-static-headers-and-footers.html [ Crash Failure ]
 crbug.com/1121942 [ Debug Mac11 ] virtual/layout_ng_printing/printing/fixed-positioned-child-shouldnt-print.html [ Crash Failure Pass ]
@@ -1825,6 +1777,11 @@
 crbug.com/1121942 virtual/layout_ng_printing/printing/page-orientation.html [ Failure ]
 crbug.com/1121942 virtual/layout_ng_printing/printing/print-subframe.html [ Crash Failure ]
 crbug.com/1121942 virtual/layout_ng_printing/printing/single-line-must-not-be-split-into-two-pages.html [ Failure ]
+crbug.com/1121942 virtual/layout_ng_printing/printing/thead-repeat-in-nested-table.html [ Failure ]
+crbug.com/1121942 virtual/layout_ng_printing/printing/thead-repeats-with-translucent-text-and-borders.html [ Failure ]
+crbug.com/1121942 virtual/layout_ng_printing/printing/thead-tfoot-containing-svg-repeat-extra-pages.html [ Crash Failure ]
+crbug.com/1121942 virtual/layout_ng_printing/printing/thead-tfoot-containing-svg-repeat.html [ Crash Failure ]
+crbug.com/1121942 virtual/layout_ng_printing/printing/thead-under-multicol.html [ Failure ]
 crbug.com/1121942 [ Linux ] virtual/layout_ng_printing/printing/vertical-rl.html [ Crash Failure ]
 crbug.com/1121942 [ Mac11 ] virtual/layout_ng_printing/printing/vertical-rl.html [ Crash Failure ]
 crbug.com/1121942 [ Mac12 ] virtual/layout_ng_printing/printing/vertical-rl.html [ Crash Failure ]
@@ -3961,47 +3918,6 @@
 crbug.com/481431 external/wpt/css/css-break/box-decoration-break-clone-002.html [ Failure ]
 crbug.com/481431 external/wpt/css/css-break/box-decoration-break-clone-004.html [ Failure ]
 crbug.com/614667 external/wpt/css/css-break/grid/grid-item-fragmentation-039.html [ Failure ]
-crbug.com/1078927 external/wpt/css/css-break/table/break-after-table-cell.html [ Failure ]
-crbug.com/1078927 external/wpt/css/css-break/table/break-after-table-cell-child.html [ Failure ]
-crbug.com/1078927 external/wpt/css/css-break/table/break-avoidance-001.html [ Failure ]
-crbug.com/1078927 external/wpt/css/css-break/table/break-avoidance-002.html [ Failure ]
-crbug.com/1078927 external/wpt/css/css-break/table/break-avoidance-003.html [ Failure ]
-crbug.com/1078927 external/wpt/css/css-break/table/break-avoidance-004.html [ Failure ]
-crbug.com/1078927 external/wpt/css/css-break/table/break-avoidance-005.html [ Failure ]
-crbug.com/1078927 external/wpt/css/css-break/table/break-avoidance-006.html [ Failure ]
-crbug.com/1078927 external/wpt/css/css-break/table/break-avoidance-in-table-in-grid.html [ Failure ]
-crbug.com/1078927 external/wpt/css/css-break/table/break-before-expansion-001.html [ Failure ]
-crbug.com/1078927 external/wpt/css/css-break/table/break-before-expansion-002.html [ Failure ]
-crbug.com/1078927 external/wpt/css/css-break/table/break-before-table-cell.html [ Failure ]
-crbug.com/1078927 external/wpt/css/css-break/table/break-before-table-cell-child.html [ Failure ]
-crbug.com/1078927 external/wpt/css/css-break/table/caption-margin-002.html [ Failure ]
-crbug.com/1078927 external/wpt/css/css-break/table/repeated-section/abspos.tentative.html [ Failure ]
-crbug.com/1078927 external/wpt/css/css-break/table/repeated-section/abspos-in-monolithic.tentative.html [ Failure ]
-crbug.com/1078927 external/wpt/css/css-break/table/repeated-section/block-in-inline.tentative.html [ Failure ]
-crbug.com/1078927 external/wpt/css/css-break/table/repeated-section/captions.tentative.html [ Failure ]
-crbug.com/1078927 external/wpt/css/css-break/table/repeated-section/footer.tentative.html [ Failure ]
-crbug.com/1078927 external/wpt/css/css-break/table/repeated-section/header-after-break.tentative.html [ Failure ]
-crbug.com/1078927 external/wpt/css/css-break/table/repeated-section/header-footer.tentative.html [ Failure ]
-crbug.com/1078927 external/wpt/css/css-break/table/repeated-section/header.tentative.html [ Failure ]
-crbug.com/1078927 external/wpt/css/css-break/table/repeated-section/hit-test-relative-in-transform.tentative.html [ Failure ]
-crbug.com/1078927 external/wpt/css/css-break/table/repeated-section/hit-test-relative.tentative.html [ Failure ]
-crbug.com/1078927 external/wpt/css/css-break/table/repeated-section/hit-test.tentative.html [ Failure ]
-crbug.com/1078927 external/wpt/css/css-break/table/repeated-section/inline-block.tentative.html [ Failure ]
-crbug.com/1078927 external/wpt/css/css-break/table/repeated-section/multicol.tentative.html [ Failure ]
-crbug.com/1078927 external/wpt/css/css-break/table/repeated-section/multiple-row-groups.tentative.html [ Failure ]
-crbug.com/1078927 external/wpt/css/css-break/table/specified-block-size-007.html [ Failure ]
-crbug.com/1078927 external/wpt/css/css-break/table/table-border-005.html [ Failure ]
-crbug.com/1078927 external/wpt/css/css-break/table/table-border-006.html [ Failure ]
-crbug.com/1078927 external/wpt/css/css-break/table/table-cell-expansion-003.html [ Failure ]
-crbug.com/1078927 external/wpt/css/css-break/table/table-col-paint-htb-ltr.html [ Failure ]
-crbug.com/1078927 external/wpt/css/css-break/table/table-collapsed-borders-paint-at-boundary.tentative.html [ Failure ]
-crbug.com/1078927 external/wpt/css/css-break/table/table-collapsed-borders-paint-htb-ltr.html [ Failure ]
-crbug.com/1078927 external/wpt/css/css-break/table/table-collapsed-borders-paint-vlr-rtl.html [ Failure ]
-crbug.com/1078927 external/wpt/css/css-break/table/table-collapsed-borders-paint-vrl-ltr.html [ Failure ]
-crbug.com/1078927 external/wpt/css/css-break/table/table-parts-offsetheight.html [ Failure ]
-crbug.com/1078927 external/wpt/css/css-break/table/table-row-paint-vlr-rtl.html [ Failure ]
-crbug.com/1078927 external/wpt/css/css-break/table/table-row-paint-vrl-rtl.html [ Failure ]
-crbug.com/1078927 external/wpt/css/css-break/table/table-section-paint-vrl-rtl.html [ Failure ]
 crbug.com/1058792 external/wpt/css/css-break/transform-007.html [ Failure ]
 crbug.com/1224888 external/wpt/css/css-break/transform-009.html [ Failure ]
 crbug.com/1156312 external/wpt/css/css-break/widows-orphans-017.html [ Failure ]
@@ -4033,16 +3949,6 @@
 crbug.com/481431 external/wpt/css/css-multicol/multicol-zero-height-003.html [ Failure ]
 crbug.com/1191124 external/wpt/css/css-multicol/spanner-fragmentation-012.html [ Failure ]
 crbug.com/1224888 external/wpt/css/css-multicol/spanner-in-opacity.html [ Failure ]
-crbug.com/1078927 external/wpt/css/css-multicol/table/table-cell-multicol-nested-002.html [ Failure ]
-crbug.com/1078927 external/wpt/css/css-multicol/table/table-cell-multicol-nested-003.html [ Failure ]
-crbug.com/1078927 fragmentation/break-in-second-table-section.html [ Failure ]
-crbug.com/1078927 fragmentation/break-in-tbody-after-caption.html [ Failure ]
-crbug.com/849459 fragmentation/repeating-thead-under-repeating-thead.html [ Failure ]
-crbug.com/1078927 fragmentation/single-cells-multiple-tables-no-repeating-thead.html [ Failure ]
-crbug.com/1078927 fragmentation/single-line-cells-repeating-thead-cell-straddles-page-unsplittable-div.html [ Failure ]
-crbug.com/1078927 fragmentation/table-row-dimensions-break-freely.html [ Failure ]
-crbug.com/1078927 fragmentation/table-row-dimensions-with-thead.html [ Failure ]
-crbug.com/1078927 fragmentation/table-row-page-break-collapsed-border.html [ Failure ]
 
 crbug.com/1031667 external/wpt/css/css-pseudo/marker-content-007.tentative.html [ Failure ]
 crbug.com/1031667 external/wpt/css/css-pseudo/marker-content-009.tentative.html [ Failure ]
@@ -7148,3 +7054,4 @@
 crbug.com/1346822 [ Mac10.15 ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/geometry-background-image-tiled-001.https.html [ Failure Pass ]
 crbug.com/1346822 [ Mac10.15 ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/top-level-await.https.html [ Failure Pass ]
 crbug.com/1346822 [ Mac10.15 ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/paint2d-roundRect.https.html [ Failure Pass ]
+crbug.com/1343935 [ Mac10.15 ] external/wpt/dom/events/non-cancelable-when-passive/non-passive-mousewheel-event-listener-on-body.html [ Failure Pass ]
diff --git a/third_party/blink/web_tests/VirtualTestSuites b/third_party/blink/web_tests/VirtualTestSuites
index e557b009..4a97ffe 100644
--- a/third_party/blink/web_tests/VirtualTestSuites
+++ b/third_party/blink/web_tests/VirtualTestSuites
@@ -276,14 +276,6 @@
     "args": ["--disable-features=SchemefulSameSite"]
   },
   {
-    "prefix": "layout_ng_table_frag",
-    "platforms": ["Linux", "Mac", "Win"],
-    "bases": ["external/wpt/css/css-break/table",
-              "external/wpt/css/css-multicol/table",
-              "fragmentation"],
-    "args": ["--enable-blink-features=LayoutNGTableFragmentation"]
-  },
-  {
     "prefix": "layout_ng_printing",
     "platforms": ["Linux", "Mac", "Win"],
     "bases": ["printing"],
diff --git a/third_party/blink/web_tests/external/Version b/third_party/blink/web_tests/external/Version
index 32bfef5..77db290 100644
--- a/third_party/blink/web_tests/external/Version
+++ b/third_party/blink/web_tests/external/Version
@@ -1 +1 @@
-Version: 3aadc8d84891c1f5018a5684def72021a44ecea1
+Version: 757400b74c36b839062534188440fb4e096541eb
diff --git a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json
index 2a8db905..40620b3 100644
--- a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json
+++ b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json
@@ -376281,7 +376281,7 @@
        ]
       ],
       "at-container-parsing.html": [
-       "6278f88216f314bb4a63a4826cfd8dacc5fc349e",
+       "6f1166a1af18bd53e72643928b7ed5d7a9d70f70",
        [
         null,
         {}
@@ -408910,6 +408910,68 @@
        }
       ]
      ],
+     "delete-in-child-of-head.tentative.html": [
+      "978cf83d47add5ef754e588074844d0e624dfa27",
+      [
+       "editing/other/delete-in-child-of-head.tentative.html?designMode=off&method=backspace",
+       {
+        "testdriver": true,
+        "timeout": "long"
+       }
+      ],
+      [
+       "editing/other/delete-in-child-of-head.tentative.html?designMode=off&method=forwarddelete",
+       {
+        "testdriver": true,
+        "timeout": "long"
+       }
+      ],
+      [
+       "editing/other/delete-in-child-of-head.tentative.html?designMode=on&method=backspace",
+       {
+        "testdriver": true,
+        "timeout": "long"
+       }
+      ],
+      [
+       "editing/other/delete-in-child-of-head.tentative.html?designMode=on&method=forwarddelete",
+       {
+        "testdriver": true,
+        "timeout": "long"
+       }
+      ]
+     ],
+     "delete-in-child-of-html.tentative.html": [
+      "4ae5446d1b07b7a1ddd0c5dd5c6d2ed85d82b822",
+      [
+       "editing/other/delete-in-child-of-html.tentative.html?designMode=off&method=backspace",
+       {
+        "testdriver": true,
+        "timeout": "long"
+       }
+      ],
+      [
+       "editing/other/delete-in-child-of-html.tentative.html?designMode=off&method=forwarddelete",
+       {
+        "testdriver": true,
+        "timeout": "long"
+       }
+      ],
+      [
+       "editing/other/delete-in-child-of-html.tentative.html?designMode=on&method=backspace",
+       {
+        "testdriver": true,
+        "timeout": "long"
+       }
+      ],
+      [
+       "editing/other/delete-in-child-of-html.tentative.html?designMode=on&method=forwarddelete",
+       {
+        "testdriver": true,
+        "timeout": "long"
+       }
+      ]
+     ],
      "delete.html": [
       "b9bd1437e3721f1353a9df6bde155f2f2b8ae95a",
       [
@@ -409087,6 +409149,124 @@
        }
       ]
      ],
+     "insertparagraph-in-child-of-head.tentative.html": [
+      "2ee8a4b33b93ab3c2e2f94126516d98cabc6b5a9",
+      [
+       "editing/other/insertparagraph-in-child-of-head.tentative.html?designMode=off&white-space=normal",
+       {
+        "testdriver": true,
+        "timeout": "long"
+       }
+      ],
+      [
+       "editing/other/insertparagraph-in-child-of-head.tentative.html?designMode=off&white-space=pre",
+       {
+        "testdriver": true,
+        "timeout": "long"
+       }
+      ],
+      [
+       "editing/other/insertparagraph-in-child-of-head.tentative.html?designMode=off&white-space=pre-line",
+       {
+        "testdriver": true,
+        "timeout": "long"
+       }
+      ],
+      [
+       "editing/other/insertparagraph-in-child-of-head.tentative.html?designMode=off&white-space=pre-wrap",
+       {
+        "testdriver": true,
+        "timeout": "long"
+       }
+      ],
+      [
+       "editing/other/insertparagraph-in-child-of-head.tentative.html?designMode=on&white-space=normal",
+       {
+        "testdriver": true,
+        "timeout": "long"
+       }
+      ],
+      [
+       "editing/other/insertparagraph-in-child-of-head.tentative.html?designMode=on&white-space=pre",
+       {
+        "testdriver": true,
+        "timeout": "long"
+       }
+      ],
+      [
+       "editing/other/insertparagraph-in-child-of-head.tentative.html?designMode=on&white-space=pre-line",
+       {
+        "testdriver": true,
+        "timeout": "long"
+       }
+      ],
+      [
+       "editing/other/insertparagraph-in-child-of-head.tentative.html?designMode=on&white-space=pre-wrap",
+       {
+        "testdriver": true,
+        "timeout": "long"
+       }
+      ]
+     ],
+     "insertparagraph-in-child-of-html.tentative.html": [
+      "a82da32df1727bbe2956da67c910d2e5618fe461",
+      [
+       "editing/other/insertparagraph-in-child-of-html.tentative.html?designMode=off&white-space=normal",
+       {
+        "testdriver": true,
+        "timeout": "long"
+       }
+      ],
+      [
+       "editing/other/insertparagraph-in-child-of-html.tentative.html?designMode=off&white-space=pre",
+       {
+        "testdriver": true,
+        "timeout": "long"
+       }
+      ],
+      [
+       "editing/other/insertparagraph-in-child-of-html.tentative.html?designMode=off&white-space=pre-line",
+       {
+        "testdriver": true,
+        "timeout": "long"
+       }
+      ],
+      [
+       "editing/other/insertparagraph-in-child-of-html.tentative.html?designMode=off&white-space=pre-wrap",
+       {
+        "testdriver": true,
+        "timeout": "long"
+       }
+      ],
+      [
+       "editing/other/insertparagraph-in-child-of-html.tentative.html?designMode=on&white-space=normal",
+       {
+        "testdriver": true,
+        "timeout": "long"
+       }
+      ],
+      [
+       "editing/other/insertparagraph-in-child-of-html.tentative.html?designMode=on&white-space=pre",
+       {
+        "testdriver": true,
+        "timeout": "long"
+       }
+      ],
+      [
+       "editing/other/insertparagraph-in-child-of-html.tentative.html?designMode=on&white-space=pre-line",
+       {
+        "testdriver": true,
+        "timeout": "long"
+       }
+      ],
+      [
+       "editing/other/insertparagraph-in-child-of-html.tentative.html?designMode=on&white-space=pre-wrap",
+       {
+        "testdriver": true,
+        "timeout": "long"
+       }
+      ]
+     ],
      "insertparagraph-in-inline-editing-host.tentative.html": [
       "0df107c08044ac93a2d8a3626c234bcedb62a330",
       [
diff --git a/third_party/blink/web_tests/external/wpt/editing/other/delete-in-child-of-head.tentative.html b/third_party/blink/web_tests/external/wpt/editing/other/delete-in-child-of-head.tentative.html
new file mode 100644
index 0000000..978cf83d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/editing/other/delete-in-child-of-head.tentative.html
@@ -0,0 +1,418 @@
+<!doctype html>
+<html>
+<head>
+<meta chareset="utf-8">
+<meta name="timeout" content="long">
+<meta name="variant" content="?designMode=off&method=backspace">
+<meta name="variant" content="?designMode=off&method=forwarddelete">
+<meta name="variant" content="?designMode=on&method=backspace">
+<meta name="variant" content="?designMode=on&method=forwarddelete">
+<title>Join paragraphs in the head element</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="../include/editor-test-utils.js"></script>
+</head>
+<body>
+<iframe srcdoc=""></iframe>
+<script>
+"use strict";
+
+const searchParams = new URLSearchParams(document.location.search);
+const testingBackspace = searchParams.get("method") == "backspace";
+const commandName = testingBackspace ? "delete" : "forwarddelete";
+const testingDesignMode = searchParams.get("designMode") == "on";
+
+const iframe = document.querySelector("iframe");
+const minimumSrcDoc =
+  "<html>" +
+    '<head style="display:block">' +
+      "<title>iframe</title>" +
+      "<script src='/resources/testdriver.js'></" + "script>" +
+      "<script src='/resources/testdriver-vendor.js'></" + "script>" +
+      "<script src='/resources/testdriver-actions.js'></" + "script>" +
+    "</head>" +
+    "<body><br></body>" +
+  "</html>";
+
+async function initializeAndWaitForLoad(iframeElement, srcDocValue) {
+  const waitForLoad =
+    new Promise(
+      resolve => iframeElement.addEventListener("load", resolve, {once: true})
+    );
+  iframeElement.srcdoc = srcDocValue;
+  await waitForLoad;
+  if (testingDesignMode) {
+    iframeElement.contentDocument.designMode = "on";
+  } else {
+    iframeElement.contentDocument.documentElement.setAttribute("contenteditable", "");
+  }
+  iframeElement.contentWindow.focus();
+  iframeElement.contentDocument.execCommand("defaultParagraphSeparator", false, "div");
+}
+
+function removeResourceScriptElements(node) {
+  node.querySelectorAll("script").forEach(
+    element => {
+      if (element.getAttribute("src")?.startsWith("/resources")) {
+        element.remove()
+      }
+    }
+  );
+}
+
+// DO NOT USE multi-line comment in this file, then, you can comment out
+// unnecessary tests when you need to attach the browser with a debugger.
+
+// For backward compatibility, normal block elements in <head> should be
+// joined by deletion.
+promise_test(async () => {
+  await initializeAndWaitForLoad(iframe, minimumSrcDoc);
+  const childDoc = iframe.contentDocument;
+  const utils = new EditorTestUtils(childDoc.documentElement);
+  const div1 = childDoc.createElement("div");
+  div1.innerHTML = "abc";
+  const div2 = childDoc.createElement("div");
+  div2.innerHTML = "def";
+  childDoc.head.appendChild(div1);
+  childDoc.head.appendChild(div2);
+  // Now: <head><title>...</title><div>abc</div><div>def</div></head>...
+  childDoc.getSelection().collapse(
+    testingBackspace ? div2.firstChild : div1.firstChild,
+    testingBackspace ? 0 : div1.firstChild.length
+  );
+  await (testingBackspace ? utils.sendBackspaceKey() : utils.sendDeleteKey());
+  removeResourceScriptElements(childDoc);
+  childDoc.head.removeAttribute("style");
+
+  assert_in_array(
+    childDoc.documentElement.innerHTML,
+    [
+      '<head><title>iframe</title><div>abcdef</div></head><body><br></body>',
+      '<head><title>iframe</title><div>abcdef<br></div></head><body><br></body>',
+    ],
+    "The <div> elements should be merged"
+  );
+  assert_equals(
+    div1.isConnected ^ div2.isConnected,
+    1,
+    "One <div> element should be removed, and the other should stay"
+  );
+}, `${commandName} in <div> elements in <head> should join them`);
+
+// The following void elements shouldn't be deleted for avoiding various
+// affection to the document.
+for (const tag of ["meta", "title", "style", "script", "link", "base", "template"]) {
+  promise_test(async () => {
+    await initializeAndWaitForLoad(iframe, minimumSrcDoc);
+    const childDoc = iframe.contentDocument;
+    const utils = new EditorTestUtils(childDoc.documentElement);
+    const div1 = childDoc.createElement("div");
+    div1.innerHTML = "abc";
+    const div2 = childDoc.createElement("div");
+    div2.innerHTML = "def";
+    const element = childDoc.createElement(tag);
+    childDoc.head.appendChild(div1);
+    childDoc.head.appendChild(element);
+    childDoc.head.appendChild(div2);
+    // Now: <head><title>...</title><div>abc</div><tag/><div>def</div></head>...
+    childDoc.getSelection().collapse(
+      testingBackspace ? div2.firstChild : div1.firstChild,
+      testingBackspace ? 0 : div1.firstChild.length
+    );
+    await (testingBackspace ? utils.sendBackspaceKey() : utils.sendDeleteKey());
+    removeResourceScriptElements(childDoc);
+    childDoc.head.removeAttribute("style");
+
+    if (["title", "style", "script", "template"].includes(tag)) {
+      assert_in_array(
+        childDoc.documentElement.innerHTML,
+        [
+          `<head><title>iframe</title><div>abcdef</div><${tag}></${tag}></head><body><br></body>`,
+          `<head><title>iframe</title><div>abcdef<br></div><${tag}></${tag}></head><body><br></body>`,
+          `<head><title>iframe</title><${tag}></${tag}><div>abcdef</div></head><body><br></body>`,
+          `<head><title>iframe</title><${tag}></${tag}><div>abcdef<br></div></head><body><br></body>`,
+        ],
+        `The <div> elements should be merged without deleting <${tag}>`
+      );
+    } else {
+      assert_in_array(
+        childDoc.documentElement.innerHTML,
+        [
+          `<head><title>iframe</title><div>abcdef</div><${tag}></head><body><br></body>`,
+          `<head><title>iframe</title><div>abcdef<br></div><${tag}></head><body><br></body>`,
+          `<head><title>iframe</title><${tag}><div>abcdef</div></head><body><br></body>`,
+          `<head><title>iframe</title><${tag}><div>abcdef<br></div></head><body><br></body>`,
+        ],
+        `The <div> elements should be merged without deleting <${tag}>`
+      );
+    }
+  }, `${commandName} around invisible <${tag}> should not delete it at joining paragraphs`);
+}
+
+// Visible <script>, <style>, <title> elements shouldn't be joined
+promise_test(async () => {
+  await initializeAndWaitForLoad(iframe, minimumSrcDoc);
+  const childDoc = iframe.contentDocument;
+  const utils = new EditorTestUtils(childDoc.documentElement);
+  const script1 = childDoc.createElement("script");
+  script1.innerHTML = "// abc";
+  script1.setAttribute("style", "display:block");
+  const script2 = childDoc.createElement("script");
+  script2.innerHTML = "// def";
+  script2.setAttribute("style", "display:block");
+  childDoc.head.appendChild(script1);
+  childDoc.head.appendChild(script2);
+  // Now: <head><title>...</title><script>// abc</ script><script>// def</ script></head>...
+  childDoc.getSelection().collapse(
+    testingBackspace ? script2.firstChild : script1.firstChild,
+    testingBackspace ? 0 : script1.firstChild.length
+  );
+  await (testingBackspace ? utils.sendBackspaceKey() : utils.sendDeleteKey());
+  removeResourceScriptElements(childDoc);
+  childDoc.head.removeAttribute("style");
+  script1.removeAttribute("style");
+  script2.removeAttribute("style");
+
+  assert_equals(
+    childDoc.documentElement.innerHTML,
+    "<head><title>iframe</title><script>// abc</" + "script><script>// def</" + "script></head><body><br></body>",
+    "Visible <script> elements shouldn't be merged"
+  );
+}, `${commandName} in visible <script> elements in <head> should not join them`);
+
+promise_test(async () => {
+  await initializeAndWaitForLoad(iframe, minimumSrcDoc);
+  const childDoc = iframe.contentDocument;
+  const utils = new EditorTestUtils(childDoc.documentElement);
+  const style1 = childDoc.createElement("style");
+  style1.innerHTML = "abc";
+  style1.setAttribute("style", "display:block");
+  const style2 = childDoc.createElement("style");
+  style2.innerHTML = "def";
+  style2.setAttribute("style", "display:block");
+  childDoc.head.appendChild(style1);
+  childDoc.head.appendChild(style2);
+  // Now: <head><title>...</title><style>abc</style><style>def</style></head>...
+  childDoc.getSelection().collapse(
+    testingBackspace ? style2.firstChild : style1.firstChild,
+    testingBackspace ? 0 : style1.firstChild.length
+  );
+  await (testingBackspace ? utils.sendBackspaceKey() : utils.sendDeleteKey());
+  removeResourceScriptElements(childDoc);
+  childDoc.head.removeAttribute("style");
+  style1.removeAttribute("style");
+  style2.removeAttribute("style");
+
+  assert_equals(
+    childDoc.documentElement.innerHTML,
+    "<head><title>iframe</title><style>abc</style><style>def</style></head><body><br></body>",
+    "Visible <style> elements shouldn't be merged"
+  );
+}, `${commandName} in visible <style> elements in <head> should not join them`);
+
+promise_test(async () => {
+  await initializeAndWaitForLoad(iframe, minimumSrcDoc);
+  const childDoc = iframe.contentDocument;
+  const utils = new EditorTestUtils(childDoc.documentElement);
+  const title1 = childDoc.createElement("title");
+  title1.innerHTML = "abc";
+  title1.setAttribute("style", "display:block");
+  const title2 = childDoc.createElement("title");
+  title2.innerHTML = "def";
+  title2.setAttribute("style", "display:block");
+  childDoc.head.appendChild(title1);
+  childDoc.head.appendChild(title2);
+  // Now: <head><title>...</title><title>abc</title><title>def</title></head>...
+  childDoc.getSelection().collapse(
+    testingBackspace ? title2.firstChild : title1.firstChild,
+    testingBackspace ? 0 : title1.firstChild.length
+  );
+  await (testingBackspace ? utils.sendBackspaceKey() : utils.sendDeleteKey());
+  removeResourceScriptElements(childDoc);
+  childDoc.head.removeAttribute("style");
+  title1.removeAttribute("style");
+  title2.removeAttribute("style");
+
+  assert_equals(
+    childDoc.documentElement.innerHTML,
+    "<head><title>iframe</title><title>abc</title><title>def</title></head><body><br></body>",
+    "Visible <title> elements shouldn't be merged"
+  );
+}, `${commandName} in visible <title> elements in <head> should not join them`);
+
+// Visible <script>, <style>, <title> shouldn't be joined with following <div>
+promise_test(async () => {
+  await initializeAndWaitForLoad(iframe, minimumSrcDoc);
+  const childDoc = iframe.contentDocument;
+  const utils = new EditorTestUtils(childDoc.documentElement);
+  const script = childDoc.createElement("script");
+  script.innerHTML = "// abc";
+  script.setAttribute("style", "display:block");
+  const div = childDoc.createElement("div");
+  div.innerHTML = "// def";
+  childDoc.head.appendChild(script);
+  childDoc.head.appendChild(div);
+  // Now: <head><title>...</title><script>// abc</ script><div>// def</div></head>...
+  childDoc.getSelection().collapse(
+    testingBackspace ? div.firstChild : script.firstChild,
+    testingBackspace ? 0 : script.firstChild.length
+  );
+  await (testingBackspace ? utils.sendBackspaceKey() : utils.sendDeleteKey());
+  removeResourceScriptElements(childDoc);
+  childDoc.head.removeAttribute("style");
+  script.removeAttribute("style");
+
+  assert_equals(
+    childDoc.documentElement.innerHTML,
+    "<head><title>iframe</title><script>// abc</" + "script><div>// def</div></head><body><br></body>",
+    "Visible <script> and <div> shouldn't be merged"
+  );
+}, `${commandName} at boundary of <script> and <div> in <head> should not join them`);
+
+promise_test(async () => {
+  await initializeAndWaitForLoad(iframe, minimumSrcDoc);
+  const childDoc = iframe.contentDocument;
+  const utils = new EditorTestUtils(childDoc.documentElement);
+  const style = childDoc.createElement("style");
+  style.innerHTML = "abc";
+  style.setAttribute("style", "display:block");
+  const div = childDoc.createElement("div");
+  div.innerHTML = "def";
+  childDoc.head.appendChild(style);
+  childDoc.head.appendChild(div);
+  // Now: <head><title>...</title><style>abc</style><div>def</div></head>...
+  childDoc.getSelection().collapse(
+    testingBackspace ? div.firstChild : style.firstChild,
+    testingBackspace ? 0 : style.firstChild.length
+  );
+  await (testingBackspace ? utils.sendBackspaceKey() : utils.sendDeleteKey());
+  removeResourceScriptElements(childDoc);
+  childDoc.head.removeAttribute("style");
+  style.removeAttribute("style");
+
+  assert_equals(
+    childDoc.documentElement.innerHTML,
+    "<head><title>iframe</title><style>abc</style><div>def</div></head><body><br></body>",
+    "Visible <style> and <div> shouldn't be merged"
+  );
+}, `${commandName} at boundary of <style> and <div> in <head> should not join them`);
+
+promise_test(async () => {
+  await initializeAndWaitForLoad(iframe, minimumSrcDoc);
+  const childDoc = iframe.contentDocument;
+  const utils = new EditorTestUtils(childDoc.documentElement);
+  const title = childDoc.createElement("title");
+  title.innerHTML = "abc";
+  title.setAttribute("title", "display:block");
+  const div = childDoc.createElement("div");
+  div.innerHTML = "def";
+  childDoc.head.appendChild(title);
+  childDoc.head.appendChild(div);
+  // Now: <head><title>...</title><title>abc</title><div>def</div></head>...
+  childDoc.getSelection().collapse(
+    testingBackspace ? div.firstChild : title.firstChild,
+    testingBackspace ? 0 : title.firstChild.length
+  );
+  await (testingBackspace ? utils.sendBackspaceKey() : utils.sendDeleteKey());
+  removeResourceScriptElements(childDoc);
+  childDoc.head.removeAttribute("style");
+  title.removeAttribute("style");
+
+  assert_equals(
+    childDoc.documentElement.innerHTML,
+    "<head><title>iframe</title><title>abc</title><div>def</div></head><body><br></body>",
+    "Visible <title> and <div> shouldn't be merged"
+  );
+}, `${commandName} at boundary of <title> and <div> in <head> should not join them`);
+
+// Visible <script>, <style>, <title> shouldn't be joined with preceding <div>
+promise_test(async () => {
+  await initializeAndWaitForLoad(iframe, minimumSrcDoc);
+  const childDoc = iframe.contentDocument;
+  const utils = new EditorTestUtils(childDoc.documentElement);
+  const div = childDoc.createElement("div");
+  div.innerHTML = "// abc";
+  const script = childDoc.createElement("script");
+  script.innerHTML = "// def";
+  script.setAttribute("style", "display:block");
+  childDoc.head.appendChild(div);
+  childDoc.head.appendChild(script);
+  // Now: <head><title>...</title><div>// abc</div><script>// def</ script></head>...
+  childDoc.getSelection().collapse(
+    testingBackspace ? script.firstChild : div.firstChild,
+    testingBackspace ? 0 : div.firstChild.length
+  );
+  await (testingBackspace ? utils.sendBackspaceKey() : utils.sendDeleteKey());
+  removeResourceScriptElements(childDoc);
+  childDoc.head.removeAttribute("style");
+  script.removeAttribute("style");
+
+  assert_equals(
+    childDoc.documentElement.innerHTML,
+    "<head><title>iframe</title><div>// abc</div><script>// def</" + "script></head><body><br></body>",
+    "<div> and visible <script> shouldn't be merged"
+  );
+}, `${commandName} at boundary of <div> and <script> in <head> should not join them`);
+
+promise_test(async () => {
+  await initializeAndWaitForLoad(iframe, minimumSrcDoc);
+  const childDoc = iframe.contentDocument;
+  const utils = new EditorTestUtils(childDoc.documentElement);
+  const div = childDoc.createElement("div");
+  div.innerHTML = "abc";
+  const style = childDoc.createElement("style");
+  style.innerHTML = "def";
+  style.setAttribute("style", "display:block");
+  childDoc.head.appendChild(div);
+  childDoc.head.appendChild(style);
+  // Now: <head><title>...</title><div>abc</div><style>def</style></head>...
+  childDoc.getSelection().collapse(
+    testingBackspace ? style.firstChild : div.firstChild,
+    testingBackspace ? 0 : div.firstChild.length
+  );
+  await (testingBackspace ? utils.sendBackspaceKey() : utils.sendDeleteKey());
+  removeResourceScriptElements(childDoc);
+  childDoc.head.removeAttribute("style");
+  style.removeAttribute("style");
+
+  assert_equals(
+    childDoc.documentElement.innerHTML,
+    "<head><title>iframe</title><div>abc</div><style>def</style></head><body><br></body>",
+    "<div> and visible <style> shouldn't be merged"
+  );
+}, `${commandName} at boundary of <div> and <style> in <head> should not join them`);
+
+promise_test(async () => {
+  await initializeAndWaitForLoad(iframe, minimumSrcDoc);
+  const childDoc = iframe.contentDocument;
+  const utils = new EditorTestUtils(childDoc.documentElement);
+  const div = childDoc.createElement("div");
+  div.innerHTML = "abc";
+  const title = childDoc.createElement("title");
+  title.innerHTML = "def";
+  title.setAttribute("style", "display:block");
+  childDoc.head.appendChild(div);
+  childDoc.head.appendChild(title);
+  // Now: <head><title>...</title><div>abc</div><title>def</title></head>...
+  childDoc.getSelection().collapse(
+    testingBackspace ? title.firstChild : div.firstChild,
+    testingBackspace ? 0 : div.firstChild.length
+  );
+  await (testingBackspace ? utils.sendBackspaceKey() : utils.sendDeleteKey());
+  removeResourceScriptElements(childDoc);
+  childDoc.head.removeAttribute("style");
+  title.removeAttribute("style");
+
+  assert_equals(
+    childDoc.documentElement.innerHTML,
+    "<head><title>iframe</title><div>abc</div><title>def</title></head><body><br></body>",
+    "<div> and visible <title> shouldn't be merged"
+  );
+}, `${commandName} at boundary of <div> and <title> in <head> should not join them`);
+
+</script>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/editing/other/delete-in-child-of-html.tentative.html b/third_party/blink/web_tests/external/wpt/editing/other/delete-in-child-of-html.tentative.html
new file mode 100644
index 0000000..4ae5446
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/editing/other/delete-in-child-of-html.tentative.html
@@ -0,0 +1,449 @@
+<!doctype html>
+<html>
+<head>
+<meta chareset="utf-8">
+<meta name="timeout" content="long">
+<meta name="variant" content="?designMode=off&method=backspace">
+<meta name="variant" content="?designMode=off&method=forwarddelete">
+<meta name="variant" content="?designMode=on&method=backspace">
+<meta name="variant" content="?designMode=on&method=forwarddelete">
+<title>Join paragraphs outside the body</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="../include/editor-test-utils.js"></script>
+</head>
+<body>
+<iframe srcdoc=""></iframe>
+<script>
+"use strict";
+
+const searchParams = new URLSearchParams(document.location.search);
+const testingBackspace = searchParams.get("method") == "backspace";
+const commandName = testingBackspace ? "delete" : "forwarddelete";
+const testingDesignMode = searchParams.get("designMode") == "on";
+
+const iframe = document.querySelector("iframe");
+const minimumSrcDoc =
+  "<html>" +
+    "<head>" +
+      "<title>iframe</title>" +
+      "<script src='/resources/testdriver.js'></" + "script>" +
+      "<script src='/resources/testdriver-vendor.js'></" + "script>" +
+      "<script src='/resources/testdriver-actions.js'></" + "script>" +
+    "</head>" +
+    "<body><br></body>" +
+  "</html>";
+
+async function initializeAndWaitForLoad(iframeElement, srcDocValue) {
+  const waitForLoad =
+    new Promise(
+      resolve => iframeElement.addEventListener("load", resolve, {once: true})
+    );
+  iframeElement.srcdoc = srcDocValue;
+  await waitForLoad;
+  if (testingDesignMode) {
+    iframeElement.contentDocument.designMode = "on";
+  } else {
+    iframeElement.contentDocument.documentElement.setAttribute("contenteditable", "");
+  }
+  iframeElement.contentWindow.focus();
+  iframeElement.contentDocument.execCommand("defaultParagraphSeparator", false, "div");
+}
+
+function removeResourceScriptElements(node) {
+  node.querySelectorAll("script").forEach(
+    element => {
+      if (element.getAttribute("src")?.startsWith("/resources")) {
+        element.remove()
+      }
+    }
+  );
+}
+
+// DO NOT USE multi-line comment in this file, then, you can comment out
+// unnecessary tests when you need to attach the browser with a debugger.
+
+// For backward compatibility, normal block elements outside <body> should be
+// joined by deletion.
+promise_test(async () => {
+  await initializeAndWaitForLoad(iframe, minimumSrcDoc);
+  const childDoc = iframe.contentDocument;
+  const utils = new EditorTestUtils(childDoc.documentElement);
+  const div1 = childDoc.createElement("div");
+  div1.innerHTML = "abc";
+  const div2 = childDoc.createElement("div");
+  div2.innerHTML = "def";
+  childDoc.documentElement.appendChild(div1);
+  childDoc.documentElement.appendChild(div2);
+  // Now: </head><body><br></body><div>abc</div><div>def</div>
+  childDoc.getSelection().collapse(
+    testingBackspace ? div2.firstChild : div1.firstChild,
+    testingBackspace ? 0 : div1.firstChild.length
+  );
+  await (testingBackspace ? utils.sendBackspaceKey() : utils.sendDeleteKey());
+  removeResourceScriptElements(childDoc);
+  assert_in_array(
+    childDoc.documentElement.innerHTML,
+    [
+      '<head><title>iframe</title></head><body><br></body><div>abcdef</div>',
+      '<head><title>iframe</title></head><body><br></body><div>abcdef<br></div>',
+    ],
+    "The <div> elements should be merged"
+  );
+  assert_equals(
+    div1.isConnected ^ div2.isConnected,
+    1,
+    "One <div> element should be removed, and the other should stay"
+  );
+}, `${commandName} in <div> elements after <body> should join them`);
+
+// Deleting around end of the <body> should merge the element after the
+// <body> into the <body>.
+promise_test(async () => {
+  await initializeAndWaitForLoad(iframe, minimumSrcDoc);
+  const childDoc = iframe.contentDocument;
+  const utils = new EditorTestUtils(childDoc.documentElement);
+  childDoc.body.innerHTML = "abc";
+  const div = childDoc.createElement("div");
+  div.innerHTML = "def";
+  childDoc.documentElement.appendChild(div);
+  // Now: </head><body>abc</body><div>def</div>
+  childDoc.getSelection().collapse(
+    testingBackspace ? div.firstChild : childDoc.body.firstChild,
+    testingBackspace ? 0 : childDoc.body.firstChild.length
+  );
+  await (testingBackspace ? utils.sendBackspaceKey() : utils.sendDeleteKey());
+  removeResourceScriptElements(childDoc);
+  assert_in_array(
+    childDoc.documentElement.innerHTML,
+    [
+      '<head><title>iframe</title></head><body>abcdef</body>',
+      '<head><title>iframe</title></head><body>abcdef<br></body>',
+    ],
+    "The text should be merged"
+  );
+  assert_false(
+    div.isConnected,
+    "The <div> following <body> should be removed"
+  );
+}, `${commandName} should merge <div> after <body> into the <body>`);
+
+promise_test(async () => {
+  await initializeAndWaitForLoad(iframe, minimumSrcDoc);
+  const childDoc = iframe.contentDocument;
+  const utils = new EditorTestUtils(childDoc.documentElement);
+  const div1 = childDoc.createElement("div");
+  div1.innerHTML = "abc";
+  const div2 = childDoc.createElement("div");
+  div2.innerHTML = "def";
+  childDoc.body.innerHTML = "";
+  childDoc.body.appendChild(div1);
+  childDoc.documentElement.appendChild(div2);
+  // Now: </head><body><div>abc</div></body><div>def</div>
+  childDoc.getSelection().collapse(
+    testingBackspace ? div2.firstChild : div1.firstChild,
+    testingBackspace ? 0 : div1.firstChild.length
+  );
+  await (testingBackspace ? utils.sendBackspaceKey() : utils.sendDeleteKey());
+  removeResourceScriptElements(childDoc);
+  assert_in_array(
+    childDoc.documentElement.innerHTML,
+    [
+      '<head><title>iframe</title></head><body><div>abcdef</div></body>',
+      '<head><title>iframe</title></head><body><div>abcdef<br></div></body>',
+    ],
+    "The <div> elements should be merged"
+  );
+  assert_true(
+    !div2.isConnected || (div2.isConnected && div2.parentNode == childDoc.body),
+    "The <div> following <body> should be removed or moved into the <body>"
+  );
+}, `${commandName} should merge <div> after <body> into the <div> in the <body>`);
+
+promise_test(async () => {
+  await initializeAndWaitForLoad(iframe, minimumSrcDoc);
+  const childDoc = iframe.contentDocument;
+  const utils = new EditorTestUtils(childDoc.documentElement);
+  const div = childDoc.createElement("div");
+  div.innerHTML = "abc";
+  childDoc.documentElement.appendChild(div);
+  // Now: </head><body><br></body><div>abc</div>
+  childDoc.getSelection().collapse(
+    testingBackspace ? div.firstChild : childDoc.body,
+    0
+  );
+  await (testingBackspace ? utils.sendBackspaceKey() : utils.sendDeleteKey());
+  removeResourceScriptElements(childDoc);
+  assert_in_array(
+    childDoc.documentElement.innerHTML,
+    [
+      '<head><title>iframe</title></head><body>abc</body>',
+      '<head><title>iframe</title></head><body>abc<br></body>',
+    ],
+    "The <div> element should be merged into the <body>"
+  );
+  assert_false(
+    div.isConnected,
+    "The <div> element should be removed"
+  );
+}, `${commandName} should merge <div> after <body> into the empty <body>`);
+
+// Deleting around start of the <body> should merge the element before the
+// <body> into the <body>.
+promise_test(async () => {
+  await initializeAndWaitForLoad(iframe, minimumSrcDoc);
+  const childDoc = iframe.contentDocument;
+  const utils = new EditorTestUtils(childDoc.documentElement);
+  const div = childDoc.createElement("div");
+  div.innerHTML = "abc";
+  childDoc.body.innerHTML = "def";
+  childDoc.documentElement.insertBefore(div, childDoc.body);
+  // Now: </head><div>abc</div><body>def</body>
+  childDoc.getSelection().collapse(
+    testingBackspace ? childDoc.body.firstChild : div.firstChild,
+    testingBackspace ? 0 : div.firstChild.length
+  );
+  await (testingBackspace ? utils.sendBackspaceKey() : utils.sendDeleteKey());
+  removeResourceScriptElements(childDoc);
+  assert_in_array(
+    childDoc.documentElement.innerHTML,
+    [
+      '<head><title>iframe</title></head><body>abcdef</body>',
+      '<head><title>iframe</title></head><body>abcdef<br></body>',
+    ],
+    "The text should be merged"
+  );
+  assert_false(
+    div.isConnected,
+    "The <div> following <body> should be removed"
+  );
+}, `${commandName} should merge <div> before <body> into the <body>`);
+
+promise_test(async () => {
+  await initializeAndWaitForLoad(iframe, minimumSrcDoc);
+  const childDoc = iframe.contentDocument;
+  const utils = new EditorTestUtils(childDoc.documentElement);
+  const div1 = childDoc.createElement("div");
+  div1.innerHTML = "abc";
+  const div2 = childDoc.createElement("div");
+  div2.innerHTML = "def";
+  childDoc.documentElement.insertBefore(div1, childDoc.body);
+  childDoc.body.innerHTML = "";
+  childDoc.body.appendChild(div2);
+  // Now: </head><div>abc</div><body><div>def</div></body>
+  childDoc.getSelection().collapse(
+    testingBackspace ? div2.firstChild : div1.firstChild,
+    testingBackspace ? 0 : div1.firstChild.length
+  );
+  await (testingBackspace ? utils.sendBackspaceKey() : utils.sendDeleteKey());
+  removeResourceScriptElements(childDoc);
+  assert_in_array(
+    childDoc.documentElement.innerHTML,
+    [
+      '<head><title>iframe</title></head><body><div>abcdef</div></body>',
+      '<head><title>iframe</title></head><body><div>abcdef<br></div></body>',
+    ],
+    "The <div> elements should be merged"
+  );
+  assert_true(
+    !div2.isConnected || (div2.isConnected && div2.parentNode == childDoc.body),
+    "The <div> following <body> should be removed or moved into the <body>"
+  );
+}, `${commandName} should merge <div> before <body> into the <div> in the <body>`);
+
+promise_test(async () => {
+  await initializeAndWaitForLoad(iframe, minimumSrcDoc);
+  const childDoc = iframe.contentDocument;
+  const utils = new EditorTestUtils(childDoc.documentElement);
+  const div = childDoc.createElement("div");
+  div.innerHTML = "abc";
+  childDoc.documentElement.insertBefore(div, childDoc.body);
+  // Now: </head><div>abc</div><body><br></body>
+  childDoc.getSelection().collapse(
+    testingBackspace ? childDoc.body : div.firstChild,
+    testingBackspace ? 0: div.firstChild.length
+  );
+  await (testingBackspace ? utils.sendBackspaceKey() : utils.sendDeleteKey());
+  removeResourceScriptElements(childDoc);
+  assert_in_array(
+    childDoc.documentElement.innerHTML,
+    [
+      '<head><title>iframe</title></head><body>abc</body>',
+      '<head><title>iframe</title></head><body>abc<br></body>',
+    ],
+    "The <div> element should be merged into the <body>"
+  );
+  assert_false(
+    div.isConnected,
+    "The <div> element should be removed"
+  );
+}, `${commandName} should merge <div> before <body> into the empty <body>`);
+
+// Deleting around end of the <head> should not delete the <head> element.
+if (testingBackspace) {
+  promise_test(async () => {
+    await initializeAndWaitForLoad(iframe, minimumSrcDoc);
+    const childDoc = iframe.contentDocument;
+    const utils = new EditorTestUtils(childDoc.documentElement);
+    const div = childDoc.createElement("div");
+    div.innerHTML = "abc";
+    childDoc.body.innerHTML = "def";
+    childDoc.documentElement.insertBefore(div, childDoc.body);
+    // Now: </head><div>abc</div><body>def</body>
+    childDoc.getSelection().collapse(div.firstChild, 0);
+    await utils.sendBackspaceKey();
+    removeResourceScriptElements(childDoc);
+    assert_equals(
+      childDoc.documentElement.innerHTML,
+      '<head><title>iframe</title></head><div>abc</div><body>def</body>',
+      "The <div> element should be merged into the <body>"
+    );
+    assert_true(
+      div.isConnected,
+      "The <div> element should not be removed"
+    );
+  }, `delete from <div> following invisible <head> element shouldn't delete the <head> element`);
+}
+
+// Joining elements around <head> element should not delete the <head> element.
+promise_test(async () => {
+  await initializeAndWaitForLoad(iframe, minimumSrcDoc);
+  const childDoc = iframe.contentDocument;
+  const utils = new EditorTestUtils(childDoc.documentElement);
+  const div1 = childDoc.createElement("div");
+  div1.innerHTML = "abc";
+  const div2 = childDoc.createElement("div");
+  div2.innerHTML = "def";
+  childDoc.documentElement.insertBefore(div1, childDoc.head);
+  childDoc.documentElement.insertBefore(div2, childDoc.body);
+  // Now: <div>abc</div><head>...</head><div>def</div><body><br></body>
+  childDoc.getSelection().collapse(
+    testingBackspace ? div2.firstChild : div1.firstChild,
+    testingBackspace ? 0 : div1.firstChild.length
+  );
+  await (testingBackspace ? utils.sendBackspaceKey() : utils.sendDeleteKey());
+  removeResourceScriptElements(childDoc);
+  assert_in_array(
+    childDoc.documentElement.innerHTML,
+    [
+      '<div>abcdef</div><head><title>iframe</title></head><body><br></body>',
+      '<div>abcdef<br></div><head><title>iframe</title></head><body><br></body>',
+      '<head><title>iframe</title></head><div>abcdef</div><body><br></body>',
+      '<head><title>iframe</title></head><div>abcdef<br></div><body><br></body>',
+    ],
+    "The <div> element should be merged into the left <div> without deleting the <head>"
+  );
+  assert_true(
+    div1.isConnected ^ div2.isConnected,
+    "One <div> element should be removed, but the other should stay"
+  );
+}, `${commandName} from <div> around invisible <head> element should not delete the <head>`);
+
+
+// Same as <body> element boundary, allow joining across <head> elements if
+// and only if both elements are normal elements.
+promise_test(async () => {
+  await initializeAndWaitForLoad(iframe, minimumSrcDoc);
+  const childDoc = iframe.contentDocument;
+  childDoc.head.setAttribute("style", "display:block");
+  const utils = new EditorTestUtils(childDoc.documentElement);
+  const div1 = childDoc.createElement("div");
+  div1.innerHTML = "abc";
+  const div2 = childDoc.createElement("div");
+  div2.innerHTML = "def";
+  childDoc.head.appendChild(div1);
+  childDoc.documentElement.insertBefore(div2, childDoc.body);
+  // Now: <div>abc</div></head><div>def</div><body><br></body>
+  childDoc.getSelection().collapse(
+    testingBackspace ? div2.firstChild : div1.firstChild,
+    testingBackspace ? 0 : div1.firstChild.length
+  );
+  await (testingBackspace ? utils.sendBackspaceKey() : utils.sendDeleteKey());
+  removeResourceScriptElements(childDoc);
+  childDoc.head.removeAttribute("style");
+  assert_in_array(
+    childDoc.documentElement.innerHTML,
+    [
+      '<head><title>iframe</title><div>abcdef</div></head><body><br></body>',
+      '<head><title>iframe</title><div>abcdef<br></div></head><body><br></body>',
+    ],
+    "The <div> element should be merged into the <div> in the <head>"
+  );
+  assert_false(
+    div2.isConnected,
+    "The <div> element should be removed"
+  );
+}, `${commandName} from <div> following visible <head> element should be merged with the <div> in the <head>`);
+
+// However, don't allow to join with <script> and <style> elements because
+// changing them may not be safe.
+promise_test(async () => {
+  await initializeAndWaitForLoad(iframe, minimumSrcDoc);
+  const childDoc = iframe.contentDocument;
+  childDoc.head.setAttribute("style", "display:block");
+  const utils = new EditorTestUtils(childDoc.documentElement);
+  const style = childDoc.createElement("style");
+  style.setAttribute("style", "display:block;white-space:pre");
+  style.innerHTML = "abc";
+  const div = childDoc.createElement("div");
+  div.innerHTML = "def";
+  childDoc.head.appendChild(style);
+  childDoc.documentElement.insertBefore(div, childDoc.body);
+  // Now: <style>abc</style></head><div>def</div><body><br></body>
+  childDoc.getSelection().collapse(
+    testingBackspace ? div.firstChild : style.firstChild,
+    testingBackspace ? 0 : style.firstChild.length
+  );
+  await (testingBackspace ? utils.sendBackspaceKey() : utils.sendDeleteKey());
+  removeResourceScriptElements(childDoc);
+  childDoc.head.removeAttribute("style");
+  style.removeAttribute("style");
+  assert_equals(
+    childDoc.documentElement.innerHTML,
+    '<head><title>iframe</title><style>abc</style></head><div>def</div><body><br></body>',
+    "The <div> element should not be merged with the <style> in the <head>"
+  );
+  assert_true(
+    div.isConnected,
+    "The <div> element should not be removed"
+  );
+}, `${commandName} from <div> following visible <head> element should be merged with the visible <style> in the <head>`);
+
+promise_test(async () => {
+  await initializeAndWaitForLoad(iframe, minimumSrcDoc);
+  const childDoc = iframe.contentDocument;
+  childDoc.head.setAttribute("style", "display:block");
+  const utils = new EditorTestUtils(childDoc.documentElement);
+  const script = childDoc.createElement("script");
+  script.setAttribute("style", "display:block;white-space:pre");
+  script.innerHTML = "// abc";
+  const div = childDoc.createElement("div");
+  div.innerHTML = "def";
+  childDoc.head.appendChild(script);
+  childDoc.documentElement.insertBefore(div, childDoc.body);
+  // Now: <script>// abc</ script></head><div>def</div><body><br></body>
+  childDoc.getSelection().collapse(
+    testingBackspace ? div.firstChild : script.firstChild,
+    testingBackspace ? 0 : script.firstChild.length
+  );
+  await (testingBackspace ? utils.sendBackspaceKey() : utils.sendDeleteKey());
+  removeResourceScriptElements(childDoc);
+  childDoc.head.removeAttribute("style");
+  script.removeAttribute("style");
+  assert_equals(
+    childDoc.documentElement.innerHTML,
+    '<head><title>iframe</title><script>// abc</' + 'script></head><div>def</div><body><br></body>',
+    "The <div> element should not be merged with the <script> in the <head>"
+  );
+  assert_true(
+    div.isConnected,
+    "The <div> element should not be removed"
+  );
+}, `${commandName} from <div> following visible <script> element should be merged with the visible <script> in the <head>`);
+
+</script>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative.html b/third_party/blink/web_tests/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative.html
new file mode 100644
index 0000000..2ee8a4b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative.html
@@ -0,0 +1,367 @@
+<!doctype html>
+<html>
+<head>
+<meta chareset="utf-8">
+<meta name="timeout" content="long">
+<meta name="variant" content="?designMode=off&white-space=normal">
+<meta name="variant" content="?designMode=off&white-space=pre">
+<meta name="variant" content="?designMode=off&white-space=pre-line">
+<meta name="variant" content="?designMode=off&white-space=pre-wrap">
+<meta name="variant" content="?designMode=on&white-space=normal">
+<meta name="variant" content="?designMode=on&white-space=pre">
+<meta name="variant" content="?designMode=on&white-space=pre-line">
+<meta name="variant" content="?designMode=on&white-space=pre-wrap">
+<title>Insert paragraph in a block element in the head element</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="../include/editor-test-utils.js"></script>
+</head>
+<body>
+<iframe srcdoc=""></iframe>
+<script>
+"use strict";
+
+const searchParams = new URLSearchParams(document.location.search);
+const whiteSpace = searchParams.get("white-space");
+const testingDesignMode = searchParams.get("designMode") == "on";
+
+const isPreformatted =
+  whiteSpace == "pre" || whiteSpace == "pre-line" || whiteSpace == "pre-wrap";
+
+const iframe = document.querySelector("iframe");
+const minimumSrcDoc =
+  "<html>" +
+    "<head style='display:block'>" +
+      "<title>iframe</title>" +
+      "<script src='/resources/testdriver.js'></" + "script>" +
+      "<script src='/resources/testdriver-vendor.js'></" + "script>" +
+      "<script src='/resources/testdriver-actions.js'></" + "script>" +
+    "</head>" +
+    "<body><br></body>" +
+  "</html>";
+
+async function initializeAndWaitForLoad(iframeElement, srcDocValue) {
+  const waitForLoad =
+    new Promise(
+      resolve => iframeElement.addEventListener("load", resolve, {once: true})
+    );
+  iframeElement.srcdoc = srcDocValue;
+  await waitForLoad;
+  if (testingDesignMode) {
+    iframeElement.contentDocument.designMode = "on";
+  } else {
+    iframeElement.contentDocument.documentElement.setAttribute("contenteditable", "");
+  }
+  iframeElement.contentWindow.focus();
+  iframeElement.contentDocument.execCommand("defaultParagraphSeparator", false, "div");
+}
+
+function removeResourceScriptElements(node) {
+  node.querySelectorAll("script").forEach(
+    element => {
+      if (element.getAttribute("src")?.startsWith("/resources")) {
+        element.remove()
+      }
+    }
+  );
+}
+
+// DO NOT USE multi-line comment in this file, then, you can comment out
+// unnecessary tests when you need to attach the browser with a debugger.
+
+// <title>, <style> and <script> cannot have <br> element.  Therefore, it's
+// hard to think what is the best if linefeeds are not preformatted.
+promise_test(async () => {
+  await initializeAndWaitForLoad(iframe, minimumSrcDoc);
+  const childDoc = iframe.contentDocument;
+  const title = childDoc.querySelector("title");
+  title.setAttribute("style", `display:block;white-space:${whiteSpace}`);
+  const utils = new EditorTestUtils(title);
+  utils.setupEditingHost("{}");
+  await utils.sendEnterKey();
+  removeResourceScriptElements(childDoc);
+  title.removeAttribute("style");
+  childDoc.head.removeAttribute("style");
+
+  if (!isPreformatted) {
+    assert_in_array(
+      childDoc.documentElement.innerHTML,
+      [
+        "<head><title></title></head><body><br></body>",      // noop
+        "<head><title>\n</title></head><body><br></body>",    // (collapse white-space)
+        "<head><title>\n\n</title></head><body><br></body>",  // (collapse white-spaces)
+      ],
+      "0-2 collapsible linefeed(s) should be inserted"
+    );
+  } else {
+    // The second linefeed is required to make the last line visible
+    assert_equals(
+      childDoc.documentElement.innerHTML,
+      "<head><title>\n\n</title></head><body><br></body>",
+      "2 preformatted linefeeds should be inserted"
+    );
+  }
+}, `insertParagraph in empty <title style="display:block;white-space:${whiteSpace}"> should not split it`);
+
+promise_test(async () => {
+  await initializeAndWaitForLoad(iframe, minimumSrcDoc);
+  const childDoc = iframe.contentDocument;
+  const title = childDoc.querySelector("title");
+  title.setAttribute("style", `display:block;white-space:${whiteSpace}`);
+  const utils = new EditorTestUtils(title);
+  utils.setupEditingHost("ab[]cd");
+  await utils.sendEnterKey();
+  removeResourceScriptElements(childDoc);
+  title.removeAttribute("style");
+  childDoc.head.removeAttribute("style");
+
+  if (!isPreformatted) {
+    assert_in_array(
+      childDoc.documentElement.innerHTML,
+      [
+        "<head><title>abcd</title></head><body><br></body>",    // noop
+        "<head><title>ab\ncd</title></head><body><br></body>",  // (collapsible white-space)
+      ],
+      "0-1 collapsible linefeed should be inserted"
+    );
+  } else {
+    assert_equals(
+      childDoc.documentElement.innerHTML,
+      "<head><title>ab\ncd</title></head><body><br></body>",
+      "1 preformatted linefeed should be inserted"
+    );
+  }
+}, `insertParagraph in <title style="display:block;white-space:${whiteSpace}"> containing text should not split it`);
+
+promise_test(async () => {
+  await initializeAndWaitForLoad(iframe, minimumSrcDoc);
+  const childDoc = iframe.contentDocument;
+  const style = childDoc.createElement("style");
+  style.setAttribute("style", `display:block;white-space:${whiteSpace}`);
+  childDoc.head.appendChild(style);
+  const utils = new EditorTestUtils(style);
+  utils.setupEditingHost("{}");
+  await utils.sendEnterKey();
+  removeResourceScriptElements(childDoc);
+  style.removeAttribute("style");
+  childDoc.head.removeAttribute("style");
+
+  if (!isPreformatted) {
+    assert_in_array(
+      childDoc.documentElement.innerHTML,
+      [
+        "<head><title>iframe</title><style></style></head><body><br></body>",      // noop
+        "<head><title>iframe</title><style>\n</style></head><body><br></body>",    // (collapsible white-space)
+        "<head><title>iframe</title><style>\n\n</style></head><body><br></body>",  // (collapsible white-spaces)
+      ],
+      "0-2 collapsible linefeeds should be inserted"
+    );
+  } else {
+    // The second linefeed is required to make the last line visible
+    assert_equals(
+      childDoc.documentElement.innerHTML,
+      "<head><title>iframe</title><style>\n\n</style></head><body><br></body>",
+      "2 preformatted linefeeds should be inserted"
+    );
+  }
+}, `insertParagraph in empty <style style="display:block;white-space:${whiteSpace}"> should not split it`);
+
+promise_test(async () => {
+  await initializeAndWaitForLoad(iframe, minimumSrcDoc);
+  const childDoc = iframe.contentDocument;
+  const style = childDoc.createElement("style");
+  style.setAttribute("style", `display:block;white-space:${whiteSpace}`);
+  childDoc.head.appendChild(style);
+  const utils = new EditorTestUtils(style);
+  utils.setupEditingHost("ab[]cd");
+  await utils.sendEnterKey();
+  removeResourceScriptElements(childDoc);
+  style.removeAttribute("style");
+  childDoc.head.removeAttribute("style");
+
+  if (!isPreformatted) {
+    assert_in_array(
+      childDoc.documentElement.innerHTML,
+      [
+        "<head><title>iframe</title><style>abcd</style></head><body><br></body>",    // noop
+        "<head><title>iframe</title><style>ab\ncd</style></head><body><br></body>",  // (collapsible white-space)
+      ],
+      "0-1 collapsible linefeed should be inserted"
+    );
+  } else {
+    assert_equals(
+      childDoc.documentElement.innerHTML,
+      "<head><title>iframe</title><style>ab\ncd</style></head><body><br></body>",
+      "1 preformatted linefeed should be inserted"
+    );
+  }
+}, `insertParagraph in <style style="display:block;white-space:${whiteSpace}"> containing text should not split it`);
+
+promise_test(async () => {
+  await initializeAndWaitForLoad(iframe, minimumSrcDoc);
+  const childDoc = iframe.contentDocument;
+  const script = childDoc.createElement("script");
+  script.setAttribute("style", `display:block;white-space:${whiteSpace}`);
+  childDoc.head.appendChild(script);
+  // Setting <script>.innerHTML causes throwing exception because it runs
+  // setting script, so we cannot use EditorTestUtils.setupEditingHost.
+  childDoc.getSelection().collapse(script, 0);
+  const utils = new EditorTestUtils(childDoc.documentElement);
+  await utils.sendEnterKey();
+  removeResourceScriptElements(childDoc);
+  script.removeAttribute("style");
+  childDoc.head.removeAttribute("style");
+
+  if (!isPreformatted) {
+    assert_in_array(
+      childDoc.documentElement.innerHTML,
+      [
+        "<head><title>iframe</title><script></" + "script></head><body><br></body>",      // noop
+        "<head><title>iframe</title><script>\n</" + "script></head><body><br></body>",    // (collapsible white-space)
+        "<head><title>iframe</title><script>\n\n</" + "script></head><body><br></body>",  // (collapsible white-spaces)
+      ],
+      "0-2 collapsible linefeeds should be inserted"
+    );
+  } else {
+    // The second linefeed is required to make the last line visible
+    assert_equals(
+      childDoc.documentElement.innerHTML,
+      "<head><title>iframe</title><script>\n\n</" + "script></head><body><br></body>",
+      "2 preformatted linefeeds should be inserted"
+    );
+  }
+}, `insertParagraph in empty <script style="display:block;white-space:${whiteSpace}"> should not split it`);
+
+promise_test(async () => {
+  await initializeAndWaitForLoad(iframe, minimumSrcDoc);
+  const childDoc = iframe.contentDocument;
+  const script = childDoc.createElement("script");
+  script.setAttribute("style", `display:block;white-space:${whiteSpace}`);
+  childDoc.head.appendChild(script);
+  // Setting <script>.innerHTML causes throwing exception because it runs
+  // setting script, so we cannot use EditorTestUtils.setupEditingHost.
+  script.innerText = "// ab// cd";
+  childDoc.getSelection().collapse(script.firstChild, "// ab".length);
+  const utils = new EditorTestUtils(childDoc.documentElement);
+  await utils.sendEnterKey();
+  removeResourceScriptElements(childDoc);
+  script.removeAttribute("style");
+  childDoc.head.removeAttribute("style");
+
+  if (!isPreformatted) {
+    assert_in_array(
+      childDoc.documentElement.innerHTML,
+      [
+        "<head><title>iframe</title><script>// ab// cd</" + "script></head><body><br></body>",    // noop
+        "<head><title>iframe</title><script>// ab\n// cd</" + "script></head><body><br></body>",  // (collapsible white-space)
+      ],
+      "0-1 linefeed should be inserted"
+    );
+  } else {
+    assert_equals(
+      childDoc.documentElement.innerHTML,
+      "<head><title>iframe</title><script>// ab\n// cd</" + "script></head><body><br></body>",
+      "1 preformatted linefeed should be inserted"
+    );
+  }
+}, `insertParagraph in <script style="display:block;white-space:${whiteSpace}"> containing text should not split it`);
+
+// <div> element in the <head> should be same behavior as the following result.
+//  See insertparagraph-in-child-of-html.tentative.html for the detail.
+promise_test(async () => {
+  await initializeAndWaitForLoad(iframe, minimumSrcDoc);
+  const childDoc = iframe.contentDocument;
+  const div = childDoc.createElement("div");
+  div.setAttribute("style", `white-space:${whiteSpace}`);
+  childDoc.head.appendChild(div);
+  const utils = new EditorTestUtils(div);
+  utils.setupEditingHost("{}");
+  await utils.sendEnterKey();
+  removeResourceScriptElements(childDoc);
+  childDoc.head.removeAttribute("style");
+
+  if (!isPreformatted) {
+    assert_equals(
+      childDoc.documentElement.innerHTML,
+      `<head><title>iframe</title><div style="white-space:${whiteSpace}"><br></div><div style="white-space:${whiteSpace}"><br></div></head><body><br></body>`,
+      "The <div> should be split"
+    );
+  } else {
+    assert_in_array(
+      childDoc.documentElement.innerHTML,
+      [
+        `<head><title>iframe</title><div style="white-space:${whiteSpace}">\n</div><div style="white-space:${whiteSpace}">\n</div></head><body><br></body>`,
+        `<head><title>iframe</title><div style="white-space:${whiteSpace}"><br></div><div style="white-space:${whiteSpace}"><br></div></head><body><br></body>`,
+      ],
+      "The <div> should be split"
+    );
+  }
+}, `insertParagraph in empty <div style="white-space:${
+  whiteSpace
+}"> in the <head> should split the <div>`);
+
+promise_test(async () => {
+  await initializeAndWaitForLoad(iframe, minimumSrcDoc);
+  const childDoc = iframe.contentDocument;
+  const div = childDoc.createElement("div");
+  div.setAttribute("style", `white-space:${whiteSpace}`);
+  childDoc.head.appendChild(div);
+  const utils = new EditorTestUtils(div);
+  utils.setupEditingHost("{}<br>");
+  await utils.sendEnterKey();
+  removeResourceScriptElements(childDoc);
+  childDoc.head.removeAttribute("style");
+
+  if (!isPreformatted) {
+    assert_equals(
+      childDoc.documentElement.innerHTML,
+      `<head><title>iframe</title><div style="white-space:${whiteSpace}"><br></div><div style="white-space:${whiteSpace}"><br></div></head><body><br></body>`,
+      "The <div> should be split"
+    );
+  } else {
+    assert_in_array(
+      childDoc.documentElement.innerHTML,
+      [
+        `<head><title>iframe</title><div style="white-space:${whiteSpace}">\n</div><div style="white-space:${whiteSpace}">\n</div></head><body><br></body>`,
+        `<head><title>iframe</title><div style="white-space:${whiteSpace}"><br></div><div style="white-space:${whiteSpace}">\n</div></head><body><br></body>`,
+        `<head><title>iframe</title><div style="white-space:${whiteSpace}">\n</div><div style="white-space:${whiteSpace}"><br></div></head><body><br></body>`,
+        `<head><title>iframe</title><div style="white-space:${whiteSpace}"><br></div><div style="white-space:${whiteSpace}"><br></div></head><body><br></body>`,
+      ],
+      "The <div> should be split"
+    );
+  }
+}, `insertParagraph in <div style="white-space:${
+  whiteSpace
+}"> (containing only a <br>) in the <head> should split the <div> element`);
+
+promise_test(async () => {
+  await initializeAndWaitForLoad(iframe, minimumSrcDoc);
+  const childDoc = iframe.contentDocument;
+  const div = childDoc.createElement("div");
+  div.setAttribute("style", `white-space:${whiteSpace}`);
+  childDoc.head.appendChild(div);
+  const utils = new EditorTestUtils(div);
+  utils.setupEditingHost("ab[]cd");
+  await utils.sendEnterKey();
+  removeResourceScriptElements(childDoc);
+  childDoc.head.removeAttribute("style");
+
+  assert_in_array(
+    childDoc.documentElement.innerHTML,
+    [
+      `<head><title>iframe</title><div style="white-space:${whiteSpace}">ab</div><div style="white-space:${whiteSpace}">cd</div></head><body><br></body>`,
+      `<head><title>iframe</title><div style="white-space:${whiteSpace}">ab</div><div style="white-space:${whiteSpace}">cd<br></div></head><body><br></body>`,
+      `<head><title>iframe</title><div style="white-space:${whiteSpace}">ab<br></div><div style="white-space:${whiteSpace}">cd</div></head><body><br></body>`,
+      `<head><title>iframe</title><div style="white-space:${whiteSpace}">ab<br></div><div style="white-space:${whiteSpace}">cd<br></div></head><body><br></body>`,
+    ],
+    "The <div> should be split"
+  );
+}, `insertParagraph in <div style="white-space:${
+  whiteSpace
+}"> (containing text) in the <head> should split the <div> element`);
+</script>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/editing/other/insertparagraph-in-child-of-html.tentative.html b/third_party/blink/web_tests/external/wpt/editing/other/insertparagraph-in-child-of-html.tentative.html
new file mode 100644
index 0000000..a82da32d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/editing/other/insertparagraph-in-child-of-html.tentative.html
@@ -0,0 +1,344 @@
+<!doctype html>
+<html><head>
+<meta chareset="utf-8">
+<meta name="timeout" content="long">
+<meta name="variant" content="?designMode=off&white-space=normal">
+<meta name="variant" content="?designMode=off&white-space=pre">
+<meta name="variant" content="?designMode=off&white-space=pre-line">
+<meta name="variant" content="?designMode=off&white-space=pre-wrap">
+<meta name="variant" content="?designMode=on&white-space=normal">
+<meta name="variant" content="?designMode=on&white-space=pre">
+<meta name="variant" content="?designMode=on&white-space=pre-line">
+<meta name="variant" content="?designMode=on&white-space=pre-wrap">
+<title>Insert paragraph in a child of the html element</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="../include/editor-test-utils.js"></script>
+</head><body>
+<iframe srcdoc=""></iframe>
+<script>
+"use strict";
+
+const searchParams = new URLSearchParams(document.location.search);
+const whiteSpace = searchParams.get("white-space");
+const testingDesignMode = searchParams.get("designMode") == "on";
+
+const isPreformatted =
+  whiteSpace == "pre" || whiteSpace == "pre-line" || whiteSpace == "pre-wrap";
+
+const iframe = document.querySelector("iframe");
+const minimumSrcDoc =
+  "<html>" +
+    "<head>" +
+      "<title>iframe</title>" +
+      "<script src='/resources/testdriver.js'></" + "script>" +
+      "<script src='/resources/testdriver-vendor.js'></" + "script>" +
+      "<script src='/resources/testdriver-actions.js'></" + "script>" +
+    "</head>" +
+    "<body><br></body>" +
+  "</html>";
+
+async function initializeAndWaitForLoad(iframeElement, srcDocValue) {
+  const waitForLoad =
+    new Promise(
+      resolve => iframeElement.addEventListener("load", resolve, {once: true})
+    );
+  iframeElement.srcdoc = srcDocValue;
+  await waitForLoad;
+  if (testingDesignMode) {
+    iframeElement.contentDocument.designMode = "on";
+  } else {
+    iframeElement.contentDocument.documentElement.setAttribute("contenteditable", "");
+  }
+  iframeElement.contentWindow.focus();
+  iframeElement.contentDocument.execCommand("defaultParagraphSeparator", false, "div");
+}
+
+function removeResourceScriptElements(node) {
+  node.querySelectorAll("script").forEach(
+    element => {
+      if (element.getAttribute("src")?.startsWith("/resources")) {
+        element.remove()
+      }
+    }
+  );
+}
+
+// DO NOT USE multi-line comment in this file, then, you can comment out
+// unnecessary tests when you need to attach the browser with a debugger.
+
+// For backward compatibility, <div> elements outside <body> should be split
+// by insertParagraph.  However, should not unwrap existing <div> in any case
+// to avoid its child to become children of the <html>.
+promise_test(async () => {
+  await initializeAndWaitForLoad(iframe, minimumSrcDoc);
+  const childDoc = iframe.contentDocument;
+  const div = childDoc.createElement("div");
+  div.setAttribute("style", `white-space:${whiteSpace}`);
+  childDoc.documentElement.appendChild(div);
+  const utils = new EditorTestUtils(div);
+  utils.setupEditingHost("{}");
+  await utils.sendEnterKey();
+  removeResourceScriptElements(childDoc);
+
+  if (!isPreformatted) {
+    assert_equals(
+      childDoc.documentElement.innerHTML,
+      `<head><title>iframe</title></head><body><br></body><div style="white-space:${whiteSpace}"><br></div><div style="white-space:${whiteSpace}"><br></div>`,
+      "The <div> should be split"
+    );
+  } else {
+    assert_in_array(
+      childDoc.documentElement.innerHTML,
+      [
+        `<head><title>iframe</title></head><body><br></body><div style="white-space:${whiteSpace}">\n</div><div style="white-space:${whiteSpace}">\n</div>`,
+        `<head><title>iframe</title></head><body><br></body><div style="white-space:${whiteSpace}"><br></div><div style="white-space:${whiteSpace}"><br></div>`,
+      ],
+      "The <div> should be split"
+    );
+  }
+}, `insertParagraph in empty <div style="white-space:${
+  whiteSpace
+}"> after <body> should split the <div>`);
+
+promise_test(async () => {
+  await initializeAndWaitForLoad(iframe, minimumSrcDoc);
+  const childDoc = iframe.contentDocument;
+  const div = childDoc.createElement("div");
+  div.setAttribute("style", `white-space:${whiteSpace}`);
+  childDoc.documentElement.appendChild(div);
+  const utils = new EditorTestUtils(div);
+  utils.setupEditingHost("{}<br>");
+  await utils.sendEnterKey();
+  removeResourceScriptElements(childDoc);
+
+  if (!isPreformatted) {
+    assert_equals(
+      childDoc.documentElement.innerHTML,
+      `<head><title>iframe</title></head><body><br></body><div style="white-space:${whiteSpace}"><br></div><div style="white-space:${whiteSpace}"><br></div>`,
+      "The <div> should be split"
+    );
+  } else {
+    assert_in_array(
+      childDoc.documentElement.innerHTML,
+      [
+        `<head><title>iframe</title></head><body><br></body><div style="white-space:${whiteSpace}">\n</div><div style="white-space:${whiteSpace}">\n</div>`,
+        `<head><title>iframe</title></head><body><br></body><div style="white-space:${whiteSpace}"><br></div><div style="white-space:${whiteSpace}">\n</div>`,
+        `<head><title>iframe</title></head><body><br></body><div style="white-space:${whiteSpace}">\n</div><div style="white-space:${whiteSpace}"><br></div>`,
+        `<head><title>iframe</title></head><body><br></body><div style="white-space:${whiteSpace}"><br></div><div style="white-space:${whiteSpace}"><br></div>`,
+      ],
+      "The <div> should be split"
+    );
+  }
+}, `insertParagraph in <div style="white-space:${
+  whiteSpace
+}"> (containing only a <br>) after <body> should split the <div>`);
+
+promise_test(async () => {
+  await initializeAndWaitForLoad(iframe, minimumSrcDoc);
+  const childDoc = iframe.contentDocument;
+  const div = childDoc.createElement("div");
+  div.setAttribute("style", `white-space:${whiteSpace}`);
+  childDoc.documentElement.appendChild(div);
+  const utils = new EditorTestUtils(div);
+  utils.setupEditingHost("ab[]cd");
+  await utils.sendEnterKey();
+  removeResourceScriptElements(childDoc);
+
+  assert_in_array(
+    childDoc.documentElement.innerHTML,
+    [
+      `<head><title>iframe</title></head><body><br></body><div style="white-space:${whiteSpace}">ab</div><div style="white-space:${whiteSpace}">cd</div>`,
+      `<head><title>iframe</title></head><body><br></body><div style="white-space:${whiteSpace}">ab<br></div><div style="white-space:${whiteSpace}">cd</div>`,
+      `<head><title>iframe</title></head><body><br></body><div style="white-space:${whiteSpace}">ab</div><div style="white-space:${whiteSpace}">cd<br></div>`,
+      `<head><title>iframe</title></head><body><br></body><div style="white-space:${whiteSpace}">ab<br></div><div style="white-space:${whiteSpace}">cd<br></div>`,
+    ],
+    "The <div> should be split"
+  );
+}, `insertParagraph in <div style="white-space:${
+  whiteSpace
+}"> (containing text) after <body> should not create another <div> element`);
+
+promise_test(async () => {
+  await initializeAndWaitForLoad(iframe, minimumSrcDoc);
+  const childDoc = iframe.contentDocument;
+  const div = childDoc.createElement("div");
+  div.setAttribute("style", `white-space:${whiteSpace}`);
+  childDoc.documentElement.insertBefore(div, childDoc.body);
+  const utils = new EditorTestUtils(div);
+  utils.setupEditingHost("{}");
+  await utils.sendEnterKey();
+  removeResourceScriptElements(childDoc);
+
+  if (!isPreformatted) {
+    assert_equals(
+      childDoc.documentElement.innerHTML,
+      `<head><title>iframe</title></head><div style="white-space:${whiteSpace}"><br></div><div style="white-space:${whiteSpace}"><br></div><body><br></body>`,
+      "The <div> should be split"
+    );
+  } else {
+    assert_in_array(
+      childDoc.documentElement.innerHTML,
+      [
+        `<head><title>iframe</title></head><div style="white-space:${whiteSpace}">\n</div><div style="white-space:${whiteSpace}">\n</div><body><br></body>`,
+        `<head><title>iframe</title></head><div style="white-space:${whiteSpace}"><br></div><div style="white-space:${whiteSpace}"><br></div><body><br></body>`,
+      ],
+      "The <div> should be split"
+    );
+  }
+}, `insertParagraph in empty <div style="white-space:${
+  whiteSpace
+}"> before <body> should split the <div>`);
+
+promise_test(async () => {
+  await initializeAndWaitForLoad(iframe, minimumSrcDoc);
+  const childDoc = iframe.contentDocument;
+  const div = childDoc.createElement("div");
+  div.setAttribute("style", `white-space:${whiteSpace}`);
+  childDoc.documentElement.insertBefore(div, childDoc.body);
+  const utils = new EditorTestUtils(div);
+  utils.setupEditingHost("{}<br>");
+  await utils.sendEnterKey();
+  removeResourceScriptElements(childDoc);
+
+  if (!isPreformatted) {
+    assert_equals(
+      childDoc.documentElement.innerHTML,
+      `<head><title>iframe</title></head><div style="white-space:${whiteSpace}"><br></div><div style="white-space:${whiteSpace}"><br></div><body><br></body>`,
+      "The <div> should be split"
+    );
+  } else {
+    assert_in_array(
+      childDoc.documentElement.innerHTML,
+      [
+        `<head><title>iframe</title></head><div style="white-space:${whiteSpace}">\n</div><div style="white-space:${whiteSpace}">\n</div><body><br></body>`,
+        `<head><title>iframe</title></head><div style="white-space:${whiteSpace}"><br></div><div style="white-space:${whiteSpace}">\n</div><body><br></body>`,
+        `<head><title>iframe</title></head><div style="white-space:${whiteSpace}">\n</div><div style="white-space:${whiteSpace}"><br></div><body><br></body>`,
+        `<head><title>iframe</title></head><div style="white-space:${whiteSpace}"><br></div><div style="white-space:${whiteSpace}"><br></div><body><br></body>`,
+      ],
+      "The <div> should be split"
+    );
+  }
+}, `insertParagraph in <div style="white-space:${
+  whiteSpace
+}"> (containing only a <br>) before <body> should split the <div>`);
+
+promise_test(async () => {
+  await initializeAndWaitForLoad(iframe, minimumSrcDoc);
+  const childDoc = iframe.contentDocument;
+  const div = childDoc.createElement("div");
+  div.setAttribute("style", `white-space:${whiteSpace}`);
+  childDoc.documentElement.insertBefore(div, childDoc.body);
+  const utils = new EditorTestUtils(div);
+  utils.setupEditingHost("ab[]cd");
+  await utils.sendEnterKey();
+  removeResourceScriptElements(childDoc);
+
+  assert_in_array(
+    childDoc.documentElement.innerHTML,
+    [
+      `<head><title>iframe</title></head><div style="white-space:${whiteSpace}">ab</div><div style="white-space:${whiteSpace}">cd</div><body><br></body>`,
+      `<head><title>iframe</title></head><div style="white-space:${whiteSpace}">ab<br></div><div style="white-space:${whiteSpace}">cd</div><body><br></body>`,
+      `<head><title>iframe</title></head><div style="white-space:${whiteSpace}">ab</div><div style="white-space:${whiteSpace}">cd<br></div><body><br></body>`,
+      `<head><title>iframe</title></head><div style="white-space:${whiteSpace}">ab<br></div><div style="white-space:${whiteSpace}">cd<br></div><body><br></body>`,
+    ],
+    "The <div> should be split"
+  );
+}, `insertParagraph in <div style="white-space:${
+  whiteSpace
+}"> (containing text) before <body> should split the <div>`);
+
+promise_test(async () => {
+  await initializeAndWaitForLoad(iframe, minimumSrcDoc);
+  const childDoc = iframe.contentDocument;
+  const div = document.createElement("div");
+  div.setAttribute("style", `white-space:${whiteSpace}`);
+  childDoc.documentElement.insertBefore(div, childDoc.head);
+  const utils = new EditorTestUtils(div);
+  utils.setupEditingHost("{}");
+  await utils.sendEnterKey();
+  removeResourceScriptElements(childDoc);
+
+  if (!isPreformatted) {
+    assert_equals(
+      childDoc.documentElement.innerHTML,
+      `<div style="white-space:${whiteSpace}"><br></div><div style="white-space:${whiteSpace}"><br></div><head><title>iframe</title></head><body><br></body>`,
+      "The <div> should be split"
+    );
+  } else {
+    assert_in_array(
+      childDoc.documentElement.innerHTML,
+      [
+        `<div style="white-space:${whiteSpace}">\n</div><div style="white-space:${whiteSpace}">\n</div><head><title>iframe</title></head><body><br></body>`,
+        `<div style="white-space:${whiteSpace}"><br></div><div style="white-space:${whiteSpace}"><br></div><head><title>iframe</title></head><body><br></body>`,
+      ],
+      "The <div> should be split"
+    );
+  }
+}, `insertParagraph in empty <div style="white-space:${
+  whiteSpace
+}"> before <head> should split the <div>`);
+
+promise_test(async () => {
+  await initializeAndWaitForLoad(iframe, minimumSrcDoc);
+  const childDoc = iframe.contentDocument;
+  const div = childDoc.createElement("div");
+  div.setAttribute("style", `white-space:${whiteSpace}`);
+  childDoc.documentElement.insertBefore(div, childDoc.head);
+  const utils = new EditorTestUtils(div);
+  utils.setupEditingHost("{}<br>");
+  await utils.sendEnterKey();
+  removeResourceScriptElements(childDoc);
+
+  if (!isPreformatted) {
+    assert_equals(
+      childDoc.documentElement.innerHTML,
+      `<div style="white-space:${whiteSpace}"><br></div><div style="white-space:${whiteSpace}"><br></div><head><title>iframe</title></head><body><br></body>`,
+      "The <div> should be split"
+    );
+  } else {
+    assert_in_array(
+      childDoc.documentElement.innerHTML,
+      [
+        `<div style="white-space:${whiteSpace}">\n</div><div style="white-space:${whiteSpace}">\n</div><head><title>iframe</title></head><body><br></body>`,
+        `<div style="white-space:${whiteSpace}"><br></div><div style="white-space:${whiteSpace}">\n</div><head><title>iframe</title></head><body><br></body>`,
+        `<div style="white-space:${whiteSpace}">\n</div><div style="white-space:${whiteSpace}"><br></div><head><title>iframe</title></head><body><br></body>`,
+        `<div style="white-space:${whiteSpace}"><br></div><div style="white-space:${whiteSpace}"><br></div><head><title>iframe</title></head><body><br></body>`,
+      ],
+      "The <div> should be split"
+    );
+  }
+}, `insertParagraph in <div style="white-space:${
+  whiteSpace
+}"> (containing only a <br>) before <head> should split the <div>`);
+
+promise_test(async () => {
+  await initializeAndWaitForLoad(iframe, minimumSrcDoc);
+  const childDoc = iframe.contentDocument;
+  const div = childDoc.createElement("div");
+  div.setAttribute("style", `white-space:${whiteSpace}`);
+  childDoc.documentElement.insertBefore(div, childDoc.head);
+  const utils = new EditorTestUtils(div);
+  utils.setupEditingHost("ab[]cd");
+  await utils.sendEnterKey();
+  removeResourceScriptElements(childDoc);
+
+  assert_in_array(
+    childDoc.documentElement.innerHTML,
+    [
+      `<div style="white-space:${whiteSpace}">ab</div><div style="white-space:${whiteSpace}">cd</div><head><title>iframe</title></head><body><br></body>`,
+      `<div style="white-space:${whiteSpace}">ab<br></div><div style="white-space:${whiteSpace}">cd</div><head><title>iframe</title></head><body><br></body>`,
+      `<div style="white-space:${whiteSpace}">ab</div><div style="white-space:${whiteSpace}">cd<br></div><head><title>iframe</title></head><body><br></body>`,
+      `<div style="white-space:${whiteSpace}">ab<br></div><div style="white-space:${whiteSpace}">cd<br></div><head><title>iframe</title></head><body><br></body>`,
+    ],
+    "The <div> should be split"
+  );
+}, `insertParagraph in <div style="white-space:${
+  whiteSpace
+}"> (containing text) before <head> should split the <div>`);
+
+</script>
+</body></html>
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/block/float/float-avoidance-expected.png b/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/block/float/float-avoidance-expected.png
new file mode 100644
index 0000000..1bd5c92
--- /dev/null
+++ b/third_party/blink/web_tests/flag-specific/disable-layout-ng/fast/block/float/float-avoidance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/paint/invalidation/table/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt b/third_party/blink/web_tests/flag-specific/disable-layout-ng/paint/invalidation/table/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt
new file mode 100644
index 0000000..0b547d7
--- /dev/null
+++ b/third_party/blink/web_tests/flag-specific/disable-layout-ng/paint/invalidation/table/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt
@@ -0,0 +1,22 @@
+{
+  "layers": [
+    {
+      "name": "Scrolling background of LayoutView #document",
+      "bounds": [1059, 585],
+      "contentsOpaque": true,
+      "backgroundColor": "#FFFFFF",
+      "invalidations": [
+        [809, 74, 37, 19],
+        [543, 74, 37, 19],
+        [276, 74, 37, 19],
+        [10, 74, 36, 19]
+      ]
+    },
+    {
+      "name": "HorizontalScrollbar",
+      "position": [0, 585],
+      "bounds": [800, 15]
+    }
+  ]
+}
+
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/virtual/backface-visibility-interop/paint/invalidation/table/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt b/third_party/blink/web_tests/flag-specific/disable-layout-ng/virtual/backface-visibility-interop/paint/invalidation/table/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt
new file mode 100644
index 0000000..0b547d7
--- /dev/null
+++ b/third_party/blink/web_tests/flag-specific/disable-layout-ng/virtual/backface-visibility-interop/paint/invalidation/table/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt
@@ -0,0 +1,22 @@
+{
+  "layers": [
+    {
+      "name": "Scrolling background of LayoutView #document",
+      "bounds": [1059, 585],
+      "contentsOpaque": true,
+      "backgroundColor": "#FFFFFF",
+      "invalidations": [
+        [809, 74, 37, 19],
+        [543, 74, 37, 19],
+        [276, 74, 37, 19],
+        [10, 74, 36, 19]
+      ]
+    },
+    {
+      "name": "HorizontalScrollbar",
+      "position": [0, 585],
+      "bounds": [800, 15]
+    }
+  ]
+}
+
diff --git a/third_party/blink/web_tests/flag-specific/highdpi/virtual/layout_ng_printing/printing/composited-thead-tfoot-repeat-expected.png b/third_party/blink/web_tests/flag-specific/highdpi/virtual/layout_ng_printing/printing/composited-thead-tfoot-repeat-expected.png
index 4d35fba..2f6bd1d 100644
--- a/third_party/blink/web_tests/flag-specific/highdpi/virtual/layout_ng_printing/printing/composited-thead-tfoot-repeat-expected.png
+++ b/third_party/blink/web_tests/flag-specific/highdpi/virtual/layout_ng_printing/printing/composited-thead-tfoot-repeat-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/delete-in-child-of-head.tentative_designMode=off_method=backspace-expected.txt b/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/delete-in-child-of-head.tentative_designMode=off_method=backspace-expected.txt
new file mode 100644
index 0000000..43d564315
--- /dev/null
+++ b/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/delete-in-child-of-head.tentative_designMode=off_method=backspace-expected.txt
@@ -0,0 +1,20 @@
+This is a testharness.js-based test.
+FAIL delete in <div> elements in <head> should join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete around invisible <meta> should not delete it at joining paragraphs promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete around invisible <title> should not delete it at joining paragraphs promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete around invisible <style> should not delete it at joining paragraphs promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete around invisible <script> should not delete it at joining paragraphs promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete around invisible <link> should not delete it at joining paragraphs promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete around invisible <base> should not delete it at joining paragraphs promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete around invisible <template> should not delete it at joining paragraphs promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete in visible <script> elements in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete in visible <style> elements in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete in visible <title> elements in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete at boundary of <script> and <div> in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete at boundary of <style> and <div> in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete at boundary of <title> and <div> in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete at boundary of <div> and <script> in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete at boundary of <div> and <style> in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete at boundary of <div> and <title> in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/delete-in-child-of-head.tentative_designMode=off_method=forwarddelete-expected.txt b/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/delete-in-child-of-head.tentative_designMode=off_method=forwarddelete-expected.txt
new file mode 100644
index 0000000..fb21d62
--- /dev/null
+++ b/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/delete-in-child-of-head.tentative_designMode=off_method=forwarddelete-expected.txt
@@ -0,0 +1,20 @@
+This is a testharness.js-based test.
+FAIL forwarddelete in <div> elements in <head> should join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete around invisible <meta> should not delete it at joining paragraphs promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete around invisible <title> should not delete it at joining paragraphs promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete around invisible <style> should not delete it at joining paragraphs promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete around invisible <script> should not delete it at joining paragraphs promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete around invisible <link> should not delete it at joining paragraphs promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete around invisible <base> should not delete it at joining paragraphs promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete around invisible <template> should not delete it at joining paragraphs promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete in visible <script> elements in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete in visible <style> elements in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete in visible <title> elements in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete at boundary of <script> and <div> in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete at boundary of <style> and <div> in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete at boundary of <title> and <div> in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete at boundary of <div> and <script> in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete at boundary of <div> and <style> in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete at boundary of <div> and <title> in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/delete-in-child-of-head.tentative_designMode=on_method=backspace-expected.txt b/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/delete-in-child-of-head.tentative_designMode=on_method=backspace-expected.txt
new file mode 100644
index 0000000..43d564315
--- /dev/null
+++ b/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/delete-in-child-of-head.tentative_designMode=on_method=backspace-expected.txt
@@ -0,0 +1,20 @@
+This is a testharness.js-based test.
+FAIL delete in <div> elements in <head> should join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete around invisible <meta> should not delete it at joining paragraphs promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete around invisible <title> should not delete it at joining paragraphs promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete around invisible <style> should not delete it at joining paragraphs promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete around invisible <script> should not delete it at joining paragraphs promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete around invisible <link> should not delete it at joining paragraphs promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete around invisible <base> should not delete it at joining paragraphs promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete around invisible <template> should not delete it at joining paragraphs promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete in visible <script> elements in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete in visible <style> elements in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete in visible <title> elements in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete at boundary of <script> and <div> in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete at boundary of <style> and <div> in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete at boundary of <title> and <div> in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete at boundary of <div> and <script> in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete at boundary of <div> and <style> in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete at boundary of <div> and <title> in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/delete-in-child-of-html.tentative_designMode=off_method=forwarddelete-expected.txt b/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/delete-in-child-of-html.tentative_designMode=off_method=forwarddelete-expected.txt
new file mode 100644
index 0000000..bee7add
--- /dev/null
+++ b/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/delete-in-child-of-html.tentative_designMode=off_method=forwarddelete-expected.txt
@@ -0,0 +1,14 @@
+This is a testharness.js-based test.
+FAIL forwarddelete in <div> elements after <body> should join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete should merge <div> after <body> into the <body> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete should merge <div> after <body> into the <div> in the <body> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete should merge <div> after <body> into the empty <body> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete should merge <div> before <body> into the <body> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete should merge <div> before <body> into the <div> in the <body> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete should merge <div> before <body> into the empty <body> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete from <div> around invisible <head> element should not delete the <head> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete from <div> following visible <head> element should be merged with the <div> in the <head> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete from <div> following visible <head> element should be merged with the visible <style> in the <head> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete from <div> following visible <script> element should be merged with the visible <script> in the <head> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/delete-in-child-of-html.tentative_designMode=on_method=backspace-expected.txt b/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/delete-in-child-of-html.tentative_designMode=on_method=backspace-expected.txt
new file mode 100644
index 0000000..ec4c7c8
--- /dev/null
+++ b/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/delete-in-child-of-html.tentative_designMode=on_method=backspace-expected.txt
@@ -0,0 +1,15 @@
+This is a testharness.js-based test.
+FAIL delete in <div> elements after <body> should join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete should merge <div> after <body> into the <body> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete should merge <div> after <body> into the <div> in the <body> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete should merge <div> after <body> into the empty <body> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete should merge <div> before <body> into the <body> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete should merge <div> before <body> into the <div> in the <body> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete should merge <div> before <body> into the empty <body> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete from <div> following invisible <head> element shouldn't delete the <head> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete from <div> around invisible <head> element should not delete the <head> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete from <div> following visible <head> element should be merged with the <div> in the <head> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete from <div> following visible <head> element should be merged with the visible <style> in the <head> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete from <div> following visible <script> element should be merged with the visible <script> in the <head> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/delete-in-child-of-html.tentative_designMode=on_method=forwarddelete-expected.txt b/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/delete-in-child-of-html.tentative_designMode=on_method=forwarddelete-expected.txt
new file mode 100644
index 0000000..bee7add
--- /dev/null
+++ b/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/delete-in-child-of-html.tentative_designMode=on_method=forwarddelete-expected.txt
@@ -0,0 +1,14 @@
+This is a testharness.js-based test.
+FAIL forwarddelete in <div> elements after <body> should join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete should merge <div> after <body> into the <body> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete should merge <div> after <body> into the <div> in the <body> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete should merge <div> after <body> into the empty <body> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete should merge <div> before <body> into the <body> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete should merge <div> before <body> into the <div> in the <body> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete should merge <div> before <body> into the empty <body> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete from <div> around invisible <head> element should not delete the <head> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete from <div> following visible <head> element should be merged with the <div> in the <head> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete from <div> following visible <head> element should be merged with the visible <style> in the <head> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete from <div> following visible <script> element should be merged with the visible <script> in the <head> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=off_white-space=normal-expected.txt b/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=off_white-space=normal-expected.txt
new file mode 100644
index 0000000..c22ae9c0
--- /dev/null
+++ b/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=off_white-space=normal-expected.txt
@@ -0,0 +1,12 @@
+This is a testharness.js-based test.
+FAIL insertParagraph in empty <title style="display:block;white-space:normal"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <title style="display:block;white-space:normal"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <style style="display:block;white-space:normal"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <style style="display:block;white-space:normal"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <script style="display:block;white-space:normal"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <script style="display:block;white-space:normal"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <div style="white-space:normal"> in the <head> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:normal"> (containing only a <br>) in the <head> should split the <div> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:normal"> (containing text) in the <head> should split the <div> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=off_white-space=pre-line-expected.txt b/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=off_white-space=pre-line-expected.txt
new file mode 100644
index 0000000..025a992
--- /dev/null
+++ b/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=off_white-space=pre-line-expected.txt
@@ -0,0 +1,12 @@
+This is a testharness.js-based test.
+FAIL insertParagraph in empty <title style="display:block;white-space:pre-line"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <title style="display:block;white-space:pre-line"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <style style="display:block;white-space:pre-line"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <style style="display:block;white-space:pre-line"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <script style="display:block;white-space:pre-line"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <script style="display:block;white-space:pre-line"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <div style="white-space:pre-line"> in the <head> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre-line"> (containing only a <br>) in the <head> should split the <div> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre-line"> (containing text) in the <head> should split the <div> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=off_white-space=pre-wrap-expected.txt b/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=off_white-space=pre-wrap-expected.txt
new file mode 100644
index 0000000..22eb4feb
--- /dev/null
+++ b/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=off_white-space=pre-wrap-expected.txt
@@ -0,0 +1,12 @@
+This is a testharness.js-based test.
+FAIL insertParagraph in empty <title style="display:block;white-space:pre-wrap"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <title style="display:block;white-space:pre-wrap"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <style style="display:block;white-space:pre-wrap"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <style style="display:block;white-space:pre-wrap"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <script style="display:block;white-space:pre-wrap"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <script style="display:block;white-space:pre-wrap"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <div style="white-space:pre-wrap"> in the <head> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre-wrap"> (containing only a <br>) in the <head> should split the <div> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre-wrap"> (containing text) in the <head> should split the <div> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=on_white-space=normal-expected.txt b/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=on_white-space=normal-expected.txt
new file mode 100644
index 0000000..c22ae9c0
--- /dev/null
+++ b/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=on_white-space=normal-expected.txt
@@ -0,0 +1,12 @@
+This is a testharness.js-based test.
+FAIL insertParagraph in empty <title style="display:block;white-space:normal"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <title style="display:block;white-space:normal"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <style style="display:block;white-space:normal"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <style style="display:block;white-space:normal"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <script style="display:block;white-space:normal"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <script style="display:block;white-space:normal"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <div style="white-space:normal"> in the <head> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:normal"> (containing only a <br>) in the <head> should split the <div> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:normal"> (containing text) in the <head> should split the <div> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=on_white-space=pre-line-expected.txt b/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=on_white-space=pre-line-expected.txt
new file mode 100644
index 0000000..025a992
--- /dev/null
+++ b/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=on_white-space=pre-line-expected.txt
@@ -0,0 +1,12 @@
+This is a testharness.js-based test.
+FAIL insertParagraph in empty <title style="display:block;white-space:pre-line"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <title style="display:block;white-space:pre-line"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <style style="display:block;white-space:pre-line"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <style style="display:block;white-space:pre-line"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <script style="display:block;white-space:pre-line"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <script style="display:block;white-space:pre-line"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <div style="white-space:pre-line"> in the <head> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre-line"> (containing only a <br>) in the <head> should split the <div> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre-line"> (containing text) in the <head> should split the <div> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=on_white-space=pre-wrap-expected.txt b/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=on_white-space=pre-wrap-expected.txt
new file mode 100644
index 0000000..22eb4feb
--- /dev/null
+++ b/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=on_white-space=pre-wrap-expected.txt
@@ -0,0 +1,12 @@
+This is a testharness.js-based test.
+FAIL insertParagraph in empty <title style="display:block;white-space:pre-wrap"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <title style="display:block;white-space:pre-wrap"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <style style="display:block;white-space:pre-wrap"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <style style="display:block;white-space:pre-wrap"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <script style="display:block;white-space:pre-wrap"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <script style="display:block;white-space:pre-wrap"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <div style="white-space:pre-wrap"> in the <head> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre-wrap"> (containing only a <br>) in the <head> should split the <div> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre-wrap"> (containing text) in the <head> should split the <div> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/insertparagraph-in-child-of-html.tentative_designMode=off_white-space=normal-expected.txt b/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/insertparagraph-in-child-of-html.tentative_designMode=off_white-space=normal-expected.txt
new file mode 100644
index 0000000..19b5ed7d
--- /dev/null
+++ b/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/insertparagraph-in-child-of-html.tentative_designMode=off_white-space=normal-expected.txt
@@ -0,0 +1,12 @@
+This is a testharness.js-based test.
+FAIL insertParagraph in empty <div style="white-space:normal"> after <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:normal"> (containing only a <br>) after <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:normal"> (containing text) after <body> should not create another <div> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <div style="white-space:normal"> before <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:normal"> (containing only a <br>) before <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:normal"> (containing text) before <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <div style="white-space:normal"> before <head> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:normal"> (containing only a <br>) before <head> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:normal"> (containing text) before <head> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/insertparagraph-in-child-of-html.tentative_designMode=off_white-space=pre-expected.txt b/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/insertparagraph-in-child-of-html.tentative_designMode=off_white-space=pre-expected.txt
new file mode 100644
index 0000000..ff7e9caf
--- /dev/null
+++ b/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/insertparagraph-in-child-of-html.tentative_designMode=off_white-space=pre-expected.txt
@@ -0,0 +1,12 @@
+This is a testharness.js-based test.
+FAIL insertParagraph in empty <div style="white-space:pre"> after <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre"> (containing only a <br>) after <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre"> (containing text) after <body> should not create another <div> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <div style="white-space:pre"> before <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre"> (containing only a <br>) before <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre"> (containing text) before <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <div style="white-space:pre"> before <head> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre"> (containing only a <br>) before <head> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre"> (containing text) before <head> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/insertparagraph-in-child-of-html.tentative_designMode=off_white-space=pre-line-expected.txt b/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/insertparagraph-in-child-of-html.tentative_designMode=off_white-space=pre-line-expected.txt
new file mode 100644
index 0000000..0d3b273
--- /dev/null
+++ b/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/insertparagraph-in-child-of-html.tentative_designMode=off_white-space=pre-line-expected.txt
@@ -0,0 +1,12 @@
+This is a testharness.js-based test.
+FAIL insertParagraph in empty <div style="white-space:pre-line"> after <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre-line"> (containing only a <br>) after <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre-line"> (containing text) after <body> should not create another <div> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <div style="white-space:pre-line"> before <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre-line"> (containing only a <br>) before <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre-line"> (containing text) before <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <div style="white-space:pre-line"> before <head> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre-line"> (containing only a <br>) before <head> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre-line"> (containing text) before <head> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/insertparagraph-in-child-of-html.tentative_designMode=off_white-space=pre-wrap-expected.txt b/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/insertparagraph-in-child-of-html.tentative_designMode=off_white-space=pre-wrap-expected.txt
new file mode 100644
index 0000000..606258a
--- /dev/null
+++ b/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/insertparagraph-in-child-of-html.tentative_designMode=off_white-space=pre-wrap-expected.txt
@@ -0,0 +1,12 @@
+This is a testharness.js-based test.
+FAIL insertParagraph in empty <div style="white-space:pre-wrap"> after <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre-wrap"> (containing only a <br>) after <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre-wrap"> (containing text) after <body> should not create another <div> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <div style="white-space:pre-wrap"> before <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre-wrap"> (containing only a <br>) before <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre-wrap"> (containing text) before <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <div style="white-space:pre-wrap"> before <head> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre-wrap"> (containing only a <br>) before <head> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre-wrap"> (containing text) before <head> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/insertparagraph-in-child-of-html.tentative_designMode=on_white-space=normal-expected.txt b/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/insertparagraph-in-child-of-html.tentative_designMode=on_white-space=normal-expected.txt
new file mode 100644
index 0000000..19b5ed7d
--- /dev/null
+++ b/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/insertparagraph-in-child-of-html.tentative_designMode=on_white-space=normal-expected.txt
@@ -0,0 +1,12 @@
+This is a testharness.js-based test.
+FAIL insertParagraph in empty <div style="white-space:normal"> after <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:normal"> (containing only a <br>) after <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:normal"> (containing text) after <body> should not create another <div> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <div style="white-space:normal"> before <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:normal"> (containing only a <br>) before <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:normal"> (containing text) before <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <div style="white-space:normal"> before <head> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:normal"> (containing only a <br>) before <head> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:normal"> (containing text) before <head> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/insertparagraph-in-child-of-html.tentative_designMode=on_white-space=pre-expected.txt b/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/insertparagraph-in-child-of-html.tentative_designMode=on_white-space=pre-expected.txt
new file mode 100644
index 0000000..ff7e9caf
--- /dev/null
+++ b/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/insertparagraph-in-child-of-html.tentative_designMode=on_white-space=pre-expected.txt
@@ -0,0 +1,12 @@
+This is a testharness.js-based test.
+FAIL insertParagraph in empty <div style="white-space:pre"> after <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre"> (containing only a <br>) after <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre"> (containing text) after <body> should not create another <div> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <div style="white-space:pre"> before <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre"> (containing only a <br>) before <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre"> (containing text) before <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <div style="white-space:pre"> before <head> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre"> (containing only a <br>) before <head> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre"> (containing text) before <head> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/insertparagraph-in-child-of-html.tentative_designMode=on_white-space=pre-line-expected.txt b/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/insertparagraph-in-child-of-html.tentative_designMode=on_white-space=pre-line-expected.txt
new file mode 100644
index 0000000..0d3b273
--- /dev/null
+++ b/third_party/blink/web_tests/platform/generic/external/wpt/editing/other/insertparagraph-in-child-of-html.tentative_designMode=on_white-space=pre-line-expected.txt
@@ -0,0 +1,12 @@
+This is a testharness.js-based test.
+FAIL insertParagraph in empty <div style="white-space:pre-line"> after <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre-line"> (containing only a <br>) after <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre-line"> (containing text) after <body> should not create another <div> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <div style="white-space:pre-line"> before <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre-line"> (containing only a <br>) before <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre-line"> (containing text) before <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <div style="white-space:pre-line"> before <head> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre-line"> (containing only a <br>) before <head> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre-line"> (containing text) before <head> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/linux/external/wpt/editing/other/delete-in-child-of-head.tentative_designMode=on_method=forwarddelete-expected.txt b/third_party/blink/web_tests/platform/linux/external/wpt/editing/other/delete-in-child-of-head.tentative_designMode=on_method=forwarddelete-expected.txt
new file mode 100644
index 0000000..fb21d62
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/external/wpt/editing/other/delete-in-child-of-head.tentative_designMode=on_method=forwarddelete-expected.txt
@@ -0,0 +1,20 @@
+This is a testharness.js-based test.
+FAIL forwarddelete in <div> elements in <head> should join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete around invisible <meta> should not delete it at joining paragraphs promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete around invisible <title> should not delete it at joining paragraphs promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete around invisible <style> should not delete it at joining paragraphs promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete around invisible <script> should not delete it at joining paragraphs promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete around invisible <link> should not delete it at joining paragraphs promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete around invisible <base> should not delete it at joining paragraphs promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete around invisible <template> should not delete it at joining paragraphs promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete in visible <script> elements in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete in visible <style> elements in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete in visible <title> elements in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete at boundary of <script> and <div> in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete at boundary of <style> and <div> in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete at boundary of <title> and <div> in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete at boundary of <div> and <script> in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete at boundary of <div> and <style> in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete at boundary of <div> and <title> in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/linux/external/wpt/editing/other/delete-in-child-of-html.tentative_designMode=off_method=backspace-expected.txt b/third_party/blink/web_tests/platform/linux/external/wpt/editing/other/delete-in-child-of-html.tentative_designMode=off_method=backspace-expected.txt
new file mode 100644
index 0000000..ec4c7c8
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/external/wpt/editing/other/delete-in-child-of-html.tentative_designMode=off_method=backspace-expected.txt
@@ -0,0 +1,15 @@
+This is a testharness.js-based test.
+FAIL delete in <div> elements after <body> should join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete should merge <div> after <body> into the <body> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete should merge <div> after <body> into the <div> in the <body> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete should merge <div> after <body> into the empty <body> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete should merge <div> before <body> into the <body> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete should merge <div> before <body> into the <div> in the <body> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete should merge <div> before <body> into the empty <body> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete from <div> following invisible <head> element shouldn't delete the <head> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete from <div> around invisible <head> element should not delete the <head> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete from <div> following visible <head> element should be merged with the <div> in the <head> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete from <div> following visible <head> element should be merged with the visible <style> in the <head> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete from <div> following visible <script> element should be merged with the visible <script> in the <head> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/linux/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=off_white-space=pre-expected.txt b/third_party/blink/web_tests/platform/linux/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=off_white-space=pre-expected.txt
new file mode 100644
index 0000000..8b3c576e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=off_white-space=pre-expected.txt
@@ -0,0 +1,12 @@
+This is a testharness.js-based test.
+FAIL insertParagraph in empty <title style="display:block;white-space:pre"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <title style="display:block;white-space:pre"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <style style="display:block;white-space:pre"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <style style="display:block;white-space:pre"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <script style="display:block;white-space:pre"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <script style="display:block;white-space:pre"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <div style="white-space:pre"> in the <head> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre"> (containing only a <br>) in the <head> should split the <div> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre"> (containing text) in the <head> should split the <div> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/linux/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=on_white-space=pre-expected.txt b/third_party/blink/web_tests/platform/linux/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=on_white-space=pre-expected.txt
new file mode 100644
index 0000000..8b3c576e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=on_white-space=pre-expected.txt
@@ -0,0 +1,12 @@
+This is a testharness.js-based test.
+FAIL insertParagraph in empty <title style="display:block;white-space:pre"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <title style="display:block;white-space:pre"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <style style="display:block;white-space:pre"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <style style="display:block;white-space:pre"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <script style="display:block;white-space:pre"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <script style="display:block;white-space:pre"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <div style="white-space:pre"> in the <head> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre"> (containing only a <br>) in the <head> should split the <div> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre"> (containing text) in the <head> should split the <div> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/linux/external/wpt/editing/other/insertparagraph-in-child-of-html.tentative_designMode=on_white-space=pre-wrap-expected.txt b/third_party/blink/web_tests/platform/linux/external/wpt/editing/other/insertparagraph-in-child-of-html.tentative_designMode=on_white-space=pre-wrap-expected.txt
new file mode 100644
index 0000000..606258a
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/external/wpt/editing/other/insertparagraph-in-child-of-html.tentative_designMode=on_white-space=pre-wrap-expected.txt
@@ -0,0 +1,12 @@
+This is a testharness.js-based test.
+FAIL insertParagraph in empty <div style="white-space:pre-wrap"> after <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre-wrap"> (containing only a <br>) after <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre-wrap"> (containing text) after <body> should not create another <div> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <div style="white-space:pre-wrap"> before <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre-wrap"> (containing only a <br>) before <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre-wrap"> (containing text) before <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <div style="white-space:pre-wrap"> before <head> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre-wrap"> (containing only a <br>) before <head> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre-wrap"> (containing text) before <head> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/linux/fast/block/basic/align-attribute-rtl-cell-expected.png b/third_party/blink/web_tests/platform/linux/fast/block/basic/align-attribute-rtl-cell-expected.png
index 48f7fd0..811d6800 100644
--- a/third_party/blink/web_tests/platform/linux/fast/block/basic/align-attribute-rtl-cell-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/block/basic/align-attribute-rtl-cell-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/block/basic/align-attribute-rtl-expected.png b/third_party/blink/web_tests/platform/linux/fast/block/basic/align-attribute-rtl-expected.png
index 0e238f5..47132aab 100644
--- a/third_party/blink/web_tests/platform/linux/fast/block/basic/align-attribute-rtl-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/block/basic/align-attribute-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/block/float/float-avoidance-expected.png b/third_party/blink/web_tests/platform/linux/fast/block/float/float-avoidance-expected.png
index 1bd5c92..596f3795 100644
--- a/third_party/blink/web_tests/platform/linux/fast/block/float/float-avoidance-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/block/float/float-avoidance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-line-grammar-error-expected.png b/third_party/blink/web_tests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-line-grammar-error-expected.png
index 800944c..705559a 100644
--- a/third_party/blink/web_tests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-line-grammar-error-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-line-grammar-error-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-line-spelling-error-expected.png b/third_party/blink/web_tests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-line-spelling-error-expected.png
index b9346e2..ce7545ad 100644
--- a/third_party/blink/web_tests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-line-spelling-error-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-line-spelling-error-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-skip-ink-expected.png b/third_party/blink/web_tests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-skip-ink-expected.png
new file mode 100644
index 0000000..3d489455
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-skip-ink-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png b/third_party/blink/web_tests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png
index 72ea3435..d8fc1c9 100644
--- a/third_party/blink/web_tests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png b/third_party/blink/web_tests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png
index 0610a1b1..70a80bad 100644
--- a/third_party/blink/web_tests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-links-expected.png b/third_party/blink/web_tests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-links-expected.png
index 12ef2ff7..708e9e8b 100644
--- a/third_party/blink/web_tests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-links-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-links-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-not-propagated-by-out-of-flow-expected.png b/third_party/blink/web_tests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-not-propagated-by-out-of-flow-expected.png
index a4546b7c..7295bb3 100644
--- a/third_party/blink/web_tests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-not-propagated-by-out-of-flow-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-not-propagated-by-out-of-flow-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-simple-underlines-expected.png b/third_party/blink/web_tests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-simple-underlines-expected.png
index 492c774..42b00ad9 100644
--- a/third_party/blink/web_tests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-simple-underlines-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-simple-underlines-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-wavy-font-size-expected.png b/third_party/blink/web_tests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-wavy-font-size-expected.png
index 4cf54316..841e639 100644
--- a/third_party/blink/web_tests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-wavy-font-size-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-wavy-font-size-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/table/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt b/third_party/blink/web_tests/platform/linux/paint/invalidation/table/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt
index 0b547d7..9b1d7f5 100644
--- a/third_party/blink/web_tests/platform/linux/paint/invalidation/table/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt
+++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/table/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt
@@ -6,10 +6,7 @@
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
       "invalidations": [
-        [809, 74, 37, 19],
-        [543, 74, 37, 19],
-        [276, 74, 37, 19],
-        [10, 74, 36, 19]
+        [10, 74, 836, 19]
       ]
     },
     {
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_printing/printing/composited-thead-tfoot-repeat-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_printing/printing/composited-thead-tfoot-repeat-expected.png
index e9f476e2..37da640 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_printing/printing/composited-thead-tfoot-repeat-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_printing/printing/composited-thead-tfoot-repeat-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/css3-text/css3-text-decoration/text-decoration-style-wavy-font-size-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/css3-text/css3-text-decoration/text-decoration-style-wavy-font-size-expected.png
new file mode 100644
index 0000000..2d7844c
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/fast/css3-text/css3-text-decoration/text-decoration-style-wavy-font-size-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/fast/css3-text/css3-text-decoration/text-decoration-style-wavy-font-size-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/fast/css3-text/css3-text-decoration/text-decoration-style-wavy-font-size-expected.png
new file mode 100644
index 0000000..2d7844c
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.14/fast/css3-text/css3-text-decoration/text-decoration-style-wavy-font-size-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_printing/printing/tfoot-repeats-at-bottom-of-each-page-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_printing/printing/tfoot-repeats-at-bottom-of-each-page-expected.png
index 6834f20..9531afa7 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_printing/printing/tfoot-repeats-at-bottom-of-each-page-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_printing/printing/tfoot-repeats-at-bottom-of-each-page-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_printing/printing/tfoot-repeats-at-bottom-of-each-page-multiple-tables-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_printing/printing/tfoot-repeats-at-bottom-of-each-page-multiple-tables-expected.png
index c40b8f3d..dd65944 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_printing/printing/tfoot-repeats-at-bottom-of-each-page-multiple-tables-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_printing/printing/tfoot-repeats-at-bottom-of-each-page-multiple-tables-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-expected.png
index a63dfa4..7f15509 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png
index 88ff9c7..3185a10d 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=off_white-space=pre-expected.txt b/third_party/blink/web_tests/platform/mac-mac10.15/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=off_white-space=pre-expected.txt
new file mode 100644
index 0000000..8b3c576e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.15/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=off_white-space=pre-expected.txt
@@ -0,0 +1,12 @@
+This is a testharness.js-based test.
+FAIL insertParagraph in empty <title style="display:block;white-space:pre"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <title style="display:block;white-space:pre"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <style style="display:block;white-space:pre"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <style style="display:block;white-space:pre"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <script style="display:block;white-space:pre"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <script style="display:block;white-space:pre"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <div style="white-space:pre"> in the <head> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre"> (containing only a <br>) in the <head> should split the <div> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre"> (containing text) in the <head> should split the <div> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/fast/css3-text/css3-text-decoration/text-decoration-skip-ink-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/fast/css3-text/css3-text-decoration/text-decoration-skip-ink-expected.png
new file mode 100644
index 0000000..3d489455
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.15/fast/css3-text/css3-text-decoration/text-decoration-skip-ink-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png
new file mode 100644
index 0000000..0f5cb1bd
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.15/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png
new file mode 100644
index 0000000..94016c7e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.15/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-links-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-links-expected.png
new file mode 100644
index 0000000..d82feba
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.15/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-links-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-not-propagated-by-out-of-flow-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-not-propagated-by-out-of-flow-expected.png
new file mode 100644
index 0000000..9d94d95
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.15/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-not-propagated-by-out-of-flow-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-simple-underlines-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-simple-underlines-expected.png
new file mode 100644
index 0000000..f9cd12f4
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.15/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-simple-underlines-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/fast/css3-text/css3-text-decoration/text-decoration-style-wavy-font-size-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/fast/css3-text/css3-text-decoration/text-decoration-style-wavy-font-size-expected.png
new file mode 100644
index 0000000..2d7844c
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.15/fast/css3-text/css3-text-decoration/text-decoration-style-wavy-font-size-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=off_white-space=pre-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=off_white-space=pre-expected.txt
new file mode 100644
index 0000000..8b3c576e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=off_white-space=pre-expected.txt
@@ -0,0 +1,12 @@
+This is a testharness.js-based test.
+FAIL insertParagraph in empty <title style="display:block;white-space:pre"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <title style="display:block;white-space:pre"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <style style="display:block;white-space:pre"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <style style="display:block;white-space:pre"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <script style="display:block;white-space:pre"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <script style="display:block;white-space:pre"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <div style="white-space:pre"> in the <head> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre"> (containing only a <br>) in the <head> should split the <div> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre"> (containing text) in the <head> should split the <div> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/fast/css3-text/css3-text-decoration/text-decoration-skip-ink-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/fast/css3-text/css3-text-decoration/text-decoration-skip-ink-expected.png
new file mode 100644
index 0000000..3d489455
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/fast/css3-text/css3-text-decoration/text-decoration-skip-ink-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png
new file mode 100644
index 0000000..0f5cb1bd
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png
new file mode 100644
index 0000000..94016c7e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-links-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-links-expected.png
new file mode 100644
index 0000000..551ffe9
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-links-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-not-propagated-by-out-of-flow-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-not-propagated-by-out-of-flow-expected.png
new file mode 100644
index 0000000..9d94d95
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-not-propagated-by-out-of-flow-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-simple-underlines-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-simple-underlines-expected.png
new file mode 100644
index 0000000..f9cd12f4
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-simple-underlines-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/fast/css3-text/css3-text-decoration/text-decoration-style-wavy-font-size-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/fast/css3-text/css3-text-decoration/text-decoration-style-wavy-font-size-expected.png
new file mode 100644
index 0000000..f38ebae5
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/fast/css3-text/css3-text-decoration/text-decoration-style-wavy-font-size-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/fenced-frame-mparch/wpt_internal/fenced_frame/visual-viewport.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/fenced-frame-mparch/wpt_internal/fenced_frame/visual-viewport.https-expected.txt
deleted file mode 100644
index f04e018c..0000000
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/fenced-frame-mparch/wpt_internal/fenced_frame/visual-viewport.https-expected.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-This is a testharness.js-based test.
-FAIL visualViewport values inside fenced frame promise_test: Unhandled rejection with value: object "Error: assert_equals: [PRECONDITION] document scrolled x expected 30 but got 0"
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/platform/mac-mac11/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=off_white-space=pre-expected.txt b/third_party/blink/web_tests/platform/mac-mac11/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=off_white-space=pre-expected.txt
new file mode 100644
index 0000000..8b3c576e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=off_white-space=pre-expected.txt
@@ -0,0 +1,12 @@
+This is a testharness.js-based test.
+FAIL insertParagraph in empty <title style="display:block;white-space:pre"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <title style="display:block;white-space:pre"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <style style="display:block;white-space:pre"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <style style="display:block;white-space:pre"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <script style="display:block;white-space:pre"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <script style="display:block;white-space:pre"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <div style="white-space:pre"> in the <head> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre"> (containing only a <br>) in the <head> should split the <div> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre"> (containing text) in the <head> should split the <div> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac11/fast/css3-text/css3-text-decoration/text-decoration-skip-ink-expected.png b/third_party/blink/web_tests/platform/mac-mac11/fast/css3-text/css3-text-decoration/text-decoration-skip-ink-expected.png
new file mode 100644
index 0000000..3d489455
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11/fast/css3-text/css3-text-decoration/text-decoration-skip-ink-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png b/third_party/blink/web_tests/platform/mac-mac11/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png
new file mode 100644
index 0000000..0f5cb1bd
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png b/third_party/blink/web_tests/platform/mac-mac11/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png
new file mode 100644
index 0000000..94016c7e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-links-expected.png b/third_party/blink/web_tests/platform/mac-mac11/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-links-expected.png
new file mode 100644
index 0000000..d82feba
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-links-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-not-propagated-by-out-of-flow-expected.png b/third_party/blink/web_tests/platform/mac-mac11/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-not-propagated-by-out-of-flow-expected.png
new file mode 100644
index 0000000..9d94d95
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-not-propagated-by-out-of-flow-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-simple-underlines-expected.png b/third_party/blink/web_tests/platform/mac-mac11/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-simple-underlines-expected.png
new file mode 100644
index 0000000..f9cd12f4
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-simple-underlines-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11/fast/css3-text/css3-text-decoration/text-decoration-style-wavy-font-size-expected.png b/third_party/blink/web_tests/platform/mac-mac11/fast/css3-text/css3-text-decoration/text-decoration-style-wavy-font-size-expected.png
new file mode 100644
index 0000000..2d7844c
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11/fast/css3-text/css3-text-decoration/text-decoration-style-wavy-font-size-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11/virtual/layout_ng_printing/printing/tfoot-repeats-at-bottom-of-each-page-expected.png b/third_party/blink/web_tests/platform/mac-mac11/virtual/layout_ng_printing/printing/tfoot-repeats-at-bottom-of-each-page-expected.png
index b53ac61..98468da0 100644
--- a/third_party/blink/web_tests/platform/mac-mac11/virtual/layout_ng_printing/printing/tfoot-repeats-at-bottom-of-each-page-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac11/virtual/layout_ng_printing/printing/tfoot-repeats-at-bottom-of-each-page-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11/virtual/layout_ng_printing/printing/tfoot-repeats-at-bottom-of-each-page-multiple-tables-expected.png b/third_party/blink/web_tests/platform/mac-mac11/virtual/layout_ng_printing/printing/tfoot-repeats-at-bottom-of-each-page-multiple-tables-expected.png
index 009a9d1a..93b781bc 100644
--- a/third_party/blink/web_tests/platform/mac-mac11/virtual/layout_ng_printing/printing/tfoot-repeats-at-bottom-of-each-page-multiple-tables-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac11/virtual/layout_ng_printing/printing/tfoot-repeats-at-bottom-of-each-page-multiple-tables-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-expected.png b/third_party/blink/web_tests/platform/mac-mac11/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-expected.png
index 900c526f..4e36002 100644
--- a/third_party/blink/web_tests/platform/mac-mac11/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac11/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png b/third_party/blink/web_tests/platform/mac-mac11/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png
index 84b3b729..9f67862 100644
--- a/third_party/blink/web_tests/platform/mac-mac11/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac11/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=off_white-space=pre-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=off_white-space=pre-expected.txt
new file mode 100644
index 0000000..8b3c576e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=off_white-space=pre-expected.txt
@@ -0,0 +1,12 @@
+This is a testharness.js-based test.
+FAIL insertParagraph in empty <title style="display:block;white-space:pre"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <title style="display:block;white-space:pre"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <style style="display:block;white-space:pre"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <style style="display:block;white-space:pre"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <script style="display:block;white-space:pre"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <script style="display:block;white-space:pre"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <div style="white-space:pre"> in the <head> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre"> (containing only a <br>) in the <head> should split the <div> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre"> (containing text) in the <head> should split the <div> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/fast/css3-text/css3-text-decoration/text-decoration-skip-ink-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/fast/css3-text/css3-text-decoration/text-decoration-skip-ink-expected.png
new file mode 100644
index 0000000..3d489455
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/fast/css3-text/css3-text-decoration/text-decoration-skip-ink-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png
new file mode 100644
index 0000000..0f5cb1bd
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png
new file mode 100644
index 0000000..94016c7e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-links-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-links-expected.png
new file mode 100644
index 0000000..551ffe9
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-links-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-not-propagated-by-out-of-flow-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-not-propagated-by-out-of-flow-expected.png
new file mode 100644
index 0000000..9d94d95
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-not-propagated-by-out-of-flow-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-simple-underlines-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-simple-underlines-expected.png
new file mode 100644
index 0000000..f9cd12f4
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-simple-underlines-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/fast/css3-text/css3-text-decoration/text-decoration-style-wavy-font-size-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/fast/css3-text/css3-text-decoration/text-decoration-style-wavy-font-size-expected.png
new file mode 100644
index 0000000..f38ebae5
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/fast/css3-text/css3-text-decoration/text-decoration-style-wavy-font-size-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/external/wpt/editing/other/delete-in-child-of-head.tentative_designMode=on_method=forwarddelete-expected.txt b/third_party/blink/web_tests/platform/mac/external/wpt/editing/other/delete-in-child-of-head.tentative_designMode=on_method=forwarddelete-expected.txt
new file mode 100644
index 0000000..fb21d62
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/external/wpt/editing/other/delete-in-child-of-head.tentative_designMode=on_method=forwarddelete-expected.txt
@@ -0,0 +1,20 @@
+This is a testharness.js-based test.
+FAIL forwarddelete in <div> elements in <head> should join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete around invisible <meta> should not delete it at joining paragraphs promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete around invisible <title> should not delete it at joining paragraphs promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete around invisible <style> should not delete it at joining paragraphs promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete around invisible <script> should not delete it at joining paragraphs promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete around invisible <link> should not delete it at joining paragraphs promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete around invisible <base> should not delete it at joining paragraphs promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete around invisible <template> should not delete it at joining paragraphs promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete in visible <script> elements in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete in visible <style> elements in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete in visible <title> elements in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete at boundary of <script> and <div> in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete at boundary of <style> and <div> in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete at boundary of <title> and <div> in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete at boundary of <div> and <script> in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete at boundary of <div> and <style> in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete at boundary of <div> and <title> in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac/external/wpt/editing/other/delete-in-child-of-html.tentative_designMode=off_method=backspace-expected.txt b/third_party/blink/web_tests/platform/mac/external/wpt/editing/other/delete-in-child-of-html.tentative_designMode=off_method=backspace-expected.txt
new file mode 100644
index 0000000..ec4c7c8
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/external/wpt/editing/other/delete-in-child-of-html.tentative_designMode=off_method=backspace-expected.txt
@@ -0,0 +1,15 @@
+This is a testharness.js-based test.
+FAIL delete in <div> elements after <body> should join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete should merge <div> after <body> into the <body> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete should merge <div> after <body> into the <div> in the <body> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete should merge <div> after <body> into the empty <body> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete should merge <div> before <body> into the <body> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete should merge <div> before <body> into the <div> in the <body> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete should merge <div> before <body> into the empty <body> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete from <div> following invisible <head> element shouldn't delete the <head> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete from <div> around invisible <head> element should not delete the <head> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete from <div> following visible <head> element should be merged with the <div> in the <head> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete from <div> following visible <head> element should be merged with the visible <style> in the <head> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete from <div> following visible <script> element should be merged with the visible <script> in the <head> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=off_white-space=pre-expected.txt b/third_party/blink/web_tests/platform/mac/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=off_white-space=pre-expected.txt
new file mode 100644
index 0000000..8b3c576e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=off_white-space=pre-expected.txt
@@ -0,0 +1,12 @@
+This is a testharness.js-based test.
+FAIL insertParagraph in empty <title style="display:block;white-space:pre"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <title style="display:block;white-space:pre"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <style style="display:block;white-space:pre"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <style style="display:block;white-space:pre"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <script style="display:block;white-space:pre"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <script style="display:block;white-space:pre"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <div style="white-space:pre"> in the <head> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre"> (containing only a <br>) in the <head> should split the <div> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre"> (containing text) in the <head> should split the <div> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=on_white-space=pre-expected.txt b/third_party/blink/web_tests/platform/mac/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=on_white-space=pre-expected.txt
new file mode 100644
index 0000000..8b3c576e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=on_white-space=pre-expected.txt
@@ -0,0 +1,12 @@
+This is a testharness.js-based test.
+FAIL insertParagraph in empty <title style="display:block;white-space:pre"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <title style="display:block;white-space:pre"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <style style="display:block;white-space:pre"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <style style="display:block;white-space:pre"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <script style="display:block;white-space:pre"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <script style="display:block;white-space:pre"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <div style="white-space:pre"> in the <head> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre"> (containing only a <br>) in the <head> should split the <div> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre"> (containing text) in the <head> should split the <div> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac/external/wpt/editing/other/insertparagraph-in-child-of-html.tentative_designMode=on_white-space=pre-wrap-expected.txt b/third_party/blink/web_tests/platform/mac/external/wpt/editing/other/insertparagraph-in-child-of-html.tentative_designMode=on_white-space=pre-wrap-expected.txt
new file mode 100644
index 0000000..606258a
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/external/wpt/editing/other/insertparagraph-in-child-of-html.tentative_designMode=on_white-space=pre-wrap-expected.txt
@@ -0,0 +1,12 @@
+This is a testharness.js-based test.
+FAIL insertParagraph in empty <div style="white-space:pre-wrap"> after <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre-wrap"> (containing only a <br>) after <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre-wrap"> (containing text) after <body> should not create another <div> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <div style="white-space:pre-wrap"> before <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre-wrap"> (containing only a <br>) before <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre-wrap"> (containing text) before <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <div style="white-space:pre-wrap"> before <head> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre-wrap"> (containing only a <br>) before <head> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre-wrap"> (containing text) before <head> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac/fast/block/basic/align-attribute-ltr-cell-expected.png b/third_party/blink/web_tests/platform/mac/fast/block/basic/align-attribute-ltr-cell-expected.png
index fdd8a7f71..55a8f3f 100644
--- a/third_party/blink/web_tests/platform/mac/fast/block/basic/align-attribute-ltr-cell-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/block/basic/align-attribute-ltr-cell-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/block/basic/align-attribute-ltr-expected.png b/third_party/blink/web_tests/platform/mac/fast/block/basic/align-attribute-ltr-expected.png
index 66fa9384..07a7b00 100644
--- a/third_party/blink/web_tests/platform/mac/fast/block/basic/align-attribute-ltr-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/block/basic/align-attribute-ltr-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/block/basic/align-attribute-rtl-cell-expected.png b/third_party/blink/web_tests/platform/mac/fast/block/basic/align-attribute-rtl-cell-expected.png
index be487af..735d782b 100644
--- a/third_party/blink/web_tests/platform/mac/fast/block/basic/align-attribute-rtl-cell-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/block/basic/align-attribute-rtl-cell-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/block/basic/align-attribute-rtl-expected.png b/third_party/blink/web_tests/platform/mac/fast/block/basic/align-attribute-rtl-expected.png
index deee45e..23b6a99 100644
--- a/third_party/blink/web_tests/platform/mac/fast/block/basic/align-attribute-rtl-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/block/basic/align-attribute-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/block/float/float-avoidance-expected.png b/third_party/blink/web_tests/platform/mac/fast/block/float/float-avoidance-expected.png
index a9af768..6321469 100644
--- a/third_party/blink/web_tests/platform/mac/fast/block/float/float-avoidance-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/block/float/float-avoidance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-skip-ink-expected.png b/third_party/blink/web_tests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-skip-ink-expected.png
new file mode 100644
index 0000000..3d489455
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-skip-ink-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png b/third_party/blink/web_tests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png
new file mode 100644
index 0000000..0f5cb1bd
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png b/third_party/blink/web_tests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png
index f58d14c..94016c7e 100644
--- a/third_party/blink/web_tests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-links-expected.png b/third_party/blink/web_tests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-links-expected.png
index 26b563f..d82feba 100644
--- a/third_party/blink/web_tests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-links-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-links-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-not-propagated-by-out-of-flow-expected.png b/third_party/blink/web_tests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-not-propagated-by-out-of-flow-expected.png
index 8173aa9..9d94d95 100644
--- a/third_party/blink/web_tests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-not-propagated-by-out-of-flow-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-not-propagated-by-out-of-flow-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-simple-underlines-expected.png b/third_party/blink/web_tests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-simple-underlines-expected.png
index 18fbcb2..f9cd12f4 100644
--- a/third_party/blink/web_tests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-simple-underlines-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-simple-underlines-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-style-wavy-font-size-expected.png b/third_party/blink/web_tests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-style-wavy-font-size-expected.png
index ac9a5a4..2d7844c 100644
--- a/third_party/blink/web_tests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-style-wavy-font-size-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/css3-text/css3-text-decoration/text-decoration-style-wavy-font-size-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/table/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt b/third_party/blink/web_tests/platform/mac/paint/invalidation/table/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt
index 20475374..00461731 100644
--- a/third_party/blink/web_tests/platform/mac/paint/invalidation/table/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt
+++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/table/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt
@@ -6,10 +6,7 @@
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
       "invalidations": [
-        [809, 71, 37, 18],
-        [543, 71, 37, 18],
-        [276, 71, 37, 18],
-        [10, 71, 36, 18]
+        [10, 71, 836, 18]
       ]
     },
     {
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_printing/printing/composited-thead-tfoot-repeat-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_printing/printing/composited-thead-tfoot-repeat-expected.png
new file mode 100644
index 0000000..4fb83873
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_printing/printing/composited-thead-tfoot-repeat-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_printing/printing/tfoot-repeats-at-bottom-of-each-page-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_printing/printing/tfoot-repeats-at-bottom-of-each-page-expected.png
new file mode 100644
index 0000000..5dc5249
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_printing/printing/tfoot-repeats-at-bottom-of-each-page-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_printing/printing/tfoot-repeats-at-bottom-of-each-page-multiple-tables-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_printing/printing/tfoot-repeats-at-bottom-of-each-page-multiple-tables-expected.png
new file mode 100644
index 0000000..5286b120
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_printing/printing/tfoot-repeats-at-bottom-of-each-page-multiple-tables-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-expected.png
new file mode 100644
index 0000000..0936004
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png
new file mode 100644
index 0000000..7dfd7db
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=off_white-space=pre-expected.txt b/third_party/blink/web_tests/platform/win/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=off_white-space=pre-expected.txt
new file mode 100644
index 0000000..8b3c576e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=off_white-space=pre-expected.txt
@@ -0,0 +1,12 @@
+This is a testharness.js-based test.
+FAIL insertParagraph in empty <title style="display:block;white-space:pre"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <title style="display:block;white-space:pre"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <style style="display:block;white-space:pre"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <style style="display:block;white-space:pre"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <script style="display:block;white-space:pre"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <script style="display:block;white-space:pre"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <div style="white-space:pre"> in the <head> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre"> (containing only a <br>) in the <head> should split the <div> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre"> (containing text) in the <head> should split the <div> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/win/fast/block/basic/align-attribute-rtl-cell-expected.png b/third_party/blink/web_tests/platform/win/fast/block/basic/align-attribute-rtl-cell-expected.png
index a7a37628..3b6e96d 100644
--- a/third_party/blink/web_tests/platform/win/fast/block/basic/align-attribute-rtl-cell-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/block/basic/align-attribute-rtl-cell-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/block/basic/align-attribute-rtl-expected.png b/third_party/blink/web_tests/platform/win/fast/block/basic/align-attribute-rtl-expected.png
index 0755dcb..bf5f4b9 100644
--- a/third_party/blink/web_tests/platform/win/fast/block/basic/align-attribute-rtl-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/block/basic/align-attribute-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/block/float/float-avoidance-expected.png b/third_party/blink/web_tests/platform/win/fast/block/float/float-avoidance-expected.png
index fc44c5e..676da8b 100644
--- a/third_party/blink/web_tests/platform/win/fast/block/float/float-avoidance-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/block/float/float-avoidance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-line-grammar-error-expected.png b/third_party/blink/web_tests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-line-grammar-error-expected.png
index 6069802..9da068a7 100644
--- a/third_party/blink/web_tests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-line-grammar-error-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-line-grammar-error-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-line-spelling-error-expected.png b/third_party/blink/web_tests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-line-spelling-error-expected.png
index 59e24c6..f0bf0c21 100644
--- a/third_party/blink/web_tests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-line-spelling-error-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-line-spelling-error-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-skip-ink-expected.png b/third_party/blink/web_tests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-skip-ink-expected.png
new file mode 100644
index 0000000..3d489455
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-skip-ink-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png b/third_party/blink/web_tests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png
new file mode 100644
index 0000000..0f5cb1bd
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png b/third_party/blink/web_tests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png
index 7de056c9..e985d8f 100644
--- a/third_party/blink/web_tests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-links-expected.png b/third_party/blink/web_tests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-links-expected.png
index 59a35be..9da9cee 100644
--- a/third_party/blink/web_tests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-links-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-links-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-not-propagated-by-out-of-flow-expected.png b/third_party/blink/web_tests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-not-propagated-by-out-of-flow-expected.png
index 28825b5..54641f8 100644
--- a/third_party/blink/web_tests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-not-propagated-by-out-of-flow-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-not-propagated-by-out-of-flow-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-simple-underlines-expected.png b/third_party/blink/web_tests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-simple-underlines-expected.png
index ad5618ea..b34df05 100644
--- a/third_party/blink/web_tests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-simple-underlines-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-simple-underlines-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-style-wavy-font-size-expected.png b/third_party/blink/web_tests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-style-wavy-font-size-expected.png
index 8639f69..5f8f72c 100644
--- a/third_party/blink/web_tests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-style-wavy-font-size-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/css3-text/css3-text-decoration/text-decoration-style-wavy-font-size-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/table/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/table/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt
index e111856..877329c 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/table/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/table/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt
@@ -6,10 +6,7 @@
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
       "invalidations": [
-        [809, 74, 36, 19],
-        [543, 74, 36, 19],
-        [276, 74, 36, 19],
-        [10, 74, 35, 19]
+        [10, 74, 835, 19]
       ]
     },
     {
diff --git a/third_party/blink/web_tests/platform/win/virtual/layout_ng_printing/printing/composited-thead-tfoot-repeat-expected.png b/third_party/blink/web_tests/platform/win/virtual/layout_ng_printing/printing/composited-thead-tfoot-repeat-expected.png
new file mode 100644
index 0000000..2999ff82
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/layout_ng_printing/printing/composited-thead-tfoot-repeat-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/no-alloc-direct-call/external/wpt/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-video-expected.txt b/third_party/blink/web_tests/platform/win/virtual/no-alloc-direct-call/external/wpt/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-video-expected.txt
index 62138a8..0474795 100644
--- a/third_party/blink/web_tests/platform/win/virtual/no-alloc-direct-call/external/wpt/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-video-expected.txt
+++ b/third_party/blink/web_tests/platform/win/virtual/no-alloc-direct-call/external/wpt/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-video-expected.txt
@@ -22,7 +22,7 @@
 PASS Rec2020-3FF000000, Context display-p3, ImageData srgb, cropSource=false
 PASS Rec2020-3FF000000, Context display-p3, ImageData srgb, cropSource=true
 FAIL Rec2020-3FF000000, Context display-p3, ImageData display-p3, cropSource=false assert_true: Actual pixel value 233,51,36,255 is approximately equal to 255,0,9,255. expected true got false
-FAIL Rec2020-3FF000000, Context display-p3, ImageData display-p3, cropSource=true promise_test: Unhandled rejection with value: object "InvalidStateError: Failed to execute 'createImageBitmap' on 'Window': The provided element's player has no current data."
+FAIL Rec2020-3FF000000, Context display-p3, ImageData display-p3, cropSource=true assert_true: Actual pixel value 233,51,36,255 is approximately equal to 255,0,9,255. expected true got false
 FAIL Rec2020-222000000, Context srgb, ImageData srgb, cropSource=false assert_true: Actual pixel value 134,0,2,255 is approximately equal to 186,0,0,255. expected true got false
 FAIL Rec2020-222000000, Context srgb, ImageData srgb, cropSource=true assert_true: Actual pixel value 134,0,2,255 is approximately equal to 186,0,0,255. expected true got false
 FAIL Rec2020-222000000, Context srgb, ImageData display-p3, cropSource=false assert_true: Actual pixel value 122,22,15,255 is approximately equal to 170,34,23,255. expected true got false
diff --git a/third_party/blink/web_tests/platform/win10/external/wpt/editing/other/delete-in-child-of-head.tentative_designMode=on_method=forwarddelete-expected.txt b/third_party/blink/web_tests/platform/win10/external/wpt/editing/other/delete-in-child-of-head.tentative_designMode=on_method=forwarddelete-expected.txt
new file mode 100644
index 0000000..fb21d62
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win10/external/wpt/editing/other/delete-in-child-of-head.tentative_designMode=on_method=forwarddelete-expected.txt
@@ -0,0 +1,20 @@
+This is a testharness.js-based test.
+FAIL forwarddelete in <div> elements in <head> should join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete around invisible <meta> should not delete it at joining paragraphs promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete around invisible <title> should not delete it at joining paragraphs promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete around invisible <style> should not delete it at joining paragraphs promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete around invisible <script> should not delete it at joining paragraphs promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete around invisible <link> should not delete it at joining paragraphs promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete around invisible <base> should not delete it at joining paragraphs promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete around invisible <template> should not delete it at joining paragraphs promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete in visible <script> elements in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete in visible <style> elements in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete in visible <title> elements in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete at boundary of <script> and <div> in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete at boundary of <style> and <div> in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete at boundary of <title> and <div> in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete at boundary of <div> and <script> in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete at boundary of <div> and <style> in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL forwarddelete at boundary of <div> and <title> in <head> should not join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/win10/external/wpt/editing/other/delete-in-child-of-html.tentative_designMode=off_method=backspace-expected.txt b/third_party/blink/web_tests/platform/win10/external/wpt/editing/other/delete-in-child-of-html.tentative_designMode=off_method=backspace-expected.txt
new file mode 100644
index 0000000..ec4c7c8
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win10/external/wpt/editing/other/delete-in-child-of-html.tentative_designMode=off_method=backspace-expected.txt
@@ -0,0 +1,15 @@
+This is a testharness.js-based test.
+FAIL delete in <div> elements after <body> should join them promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete should merge <div> after <body> into the <body> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete should merge <div> after <body> into the <div> in the <body> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete should merge <div> after <body> into the empty <body> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete should merge <div> before <body> into the <body> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete should merge <div> before <body> into the <div> in the <body> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete should merge <div> before <body> into the empty <body> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete from <div> following invisible <head> element shouldn't delete the <head> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete from <div> around invisible <head> element should not delete the <head> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete from <div> following visible <head> element should be merged with the <div> in the <head> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete from <div> following visible <head> element should be merged with the visible <style> in the <head> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL delete from <div> following visible <script> element should be merged with the visible <script> in the <head> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/win10/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=off_white-space=pre-expected.txt b/third_party/blink/web_tests/platform/win10/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=off_white-space=pre-expected.txt
new file mode 100644
index 0000000..8b3c576e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win10/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=off_white-space=pre-expected.txt
@@ -0,0 +1,12 @@
+This is a testharness.js-based test.
+FAIL insertParagraph in empty <title style="display:block;white-space:pre"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <title style="display:block;white-space:pre"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <style style="display:block;white-space:pre"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <style style="display:block;white-space:pre"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <script style="display:block;white-space:pre"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <script style="display:block;white-space:pre"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <div style="white-space:pre"> in the <head> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre"> (containing only a <br>) in the <head> should split the <div> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre"> (containing text) in the <head> should split the <div> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/win10/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=on_white-space=pre-expected.txt b/third_party/blink/web_tests/platform/win10/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=on_white-space=pre-expected.txt
new file mode 100644
index 0000000..8b3c576e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win10/external/wpt/editing/other/insertparagraph-in-child-of-head.tentative_designMode=on_white-space=pre-expected.txt
@@ -0,0 +1,12 @@
+This is a testharness.js-based test.
+FAIL insertParagraph in empty <title style="display:block;white-space:pre"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <title style="display:block;white-space:pre"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <style style="display:block;white-space:pre"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <style style="display:block;white-space:pre"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <script style="display:block;white-space:pre"> should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <script style="display:block;white-space:pre"> containing text should not split it promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <div style="white-space:pre"> in the <head> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre"> (containing only a <br>) in the <head> should split the <div> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre"> (containing text) in the <head> should split the <div> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/win10/external/wpt/editing/other/insertparagraph-in-child-of-html.tentative_designMode=on_white-space=pre-wrap-expected.txt b/third_party/blink/web_tests/platform/win10/external/wpt/editing/other/insertparagraph-in-child-of-html.tentative_designMode=on_white-space=pre-wrap-expected.txt
new file mode 100644
index 0000000..606258a
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win10/external/wpt/editing/other/insertparagraph-in-child-of-html.tentative_designMode=on_white-space=pre-wrap-expected.txt
@@ -0,0 +1,12 @@
+This is a testharness.js-based test.
+FAIL insertParagraph in empty <div style="white-space:pre-wrap"> after <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre-wrap"> (containing only a <br>) after <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre-wrap"> (containing text) after <body> should not create another <div> element promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <div style="white-space:pre-wrap"> before <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre-wrap"> (containing only a <br>) before <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre-wrap"> (containing text) before <body> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in empty <div style="white-space:pre-wrap"> before <head> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre-wrap"> (containing only a <br>) before <head> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+FAIL insertParagraph in <div style="white-space:pre-wrap"> (containing text) before <head> should split the <div> promise_test: Unhandled rejection with value: object "Error: can only send actions in top-level window"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/win10/fast/css3-text/css3-text-decoration/text-decoration-line-grammar-error-expected.png b/third_party/blink/web_tests/platform/win10/fast/css3-text/css3-text-decoration/text-decoration-line-grammar-error-expected.png
new file mode 100644
index 0000000..9da068a7
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win10/fast/css3-text/css3-text-decoration/text-decoration-line-grammar-error-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win10/fast/css3-text/css3-text-decoration/text-decoration-line-spelling-error-expected.png b/third_party/blink/web_tests/platform/win10/fast/css3-text/css3-text-decoration/text-decoration-line-spelling-error-expected.png
new file mode 100644
index 0000000..f0bf0c21
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win10/fast/css3-text/css3-text-decoration/text-decoration-line-spelling-error-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win10/fast/css3-text/css3-text-decoration/text-decoration-skip-ink-expected.png b/third_party/blink/web_tests/platform/win10/fast/css3-text/css3-text-decoration/text-decoration-skip-ink-expected.png
new file mode 100644
index 0000000..3d489455
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win10/fast/css3-text/css3-text-decoration/text-decoration-skip-ink-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win10/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png b/third_party/blink/web_tests/platform/win10/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png
new file mode 100644
index 0000000..0f5cb1bd
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win10/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win10/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png b/third_party/blink/web_tests/platform/win10/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png
new file mode 100644
index 0000000..e985d8f
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win10/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win10/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-links-expected.png b/third_party/blink/web_tests/platform/win10/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-links-expected.png
new file mode 100644
index 0000000..9da9cee
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win10/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-links-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win10/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-not-propagated-by-out-of-flow-expected.png b/third_party/blink/web_tests/platform/win10/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-not-propagated-by-out-of-flow-expected.png
new file mode 100644
index 0000000..54641f8
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win10/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-not-propagated-by-out-of-flow-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win10/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-simple-underlines-expected.png b/third_party/blink/web_tests/platform/win10/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-simple-underlines-expected.png
new file mode 100644
index 0000000..b34df05
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win10/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-simple-underlines-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win10/fast/css3-text/css3-text-decoration/text-decoration-style-wavy-font-size-expected.png b/third_party/blink/web_tests/platform/win10/fast/css3-text/css3-text-decoration/text-decoration-style-wavy-font-size-expected.png
new file mode 100644
index 0000000..5f8f72c
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win10/fast/css3-text/css3-text-decoration/text-decoration-style-wavy-font-size-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win10/virtual/no-alloc-direct-call/external/wpt/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-video-expected.txt b/third_party/blink/web_tests/platform/win10/virtual/no-alloc-direct-call/external/wpt/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-video-expected.txt
deleted file mode 100644
index 0474795..0000000
--- a/third_party/blink/web_tests/platform/win10/virtual/no-alloc-direct-call/external/wpt/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-video-expected.txt
+++ /dev/null
@@ -1,35 +0,0 @@
-This is a testharness.js-based test.
-PASS sRGB-FF0100, Context srgb, ImageData srgb, cropSource=false
-PASS sRGB-FF0100, Context srgb, ImageData srgb, cropSource=true
-PASS sRGB-FF0100, Context srgb, ImageData display-p3, cropSource=false
-PASS sRGB-FF0100, Context srgb, ImageData display-p3, cropSource=true
-PASS sRGB-FF0100, Context display-p3, ImageData srgb, cropSource=false
-PASS sRGB-FF0100, Context display-p3, ImageData srgb, cropSource=true
-PASS sRGB-FF0100, Context display-p3, ImageData display-p3, cropSource=false
-PASS sRGB-FF0100, Context display-p3, ImageData display-p3, cropSource=true
-PASS sRGB-BB0000, Context srgb, ImageData srgb, cropSource=false
-PASS sRGB-BB0000, Context srgb, ImageData srgb, cropSource=true
-PASS sRGB-BB0000, Context srgb, ImageData display-p3, cropSource=false
-PASS sRGB-BB0000, Context srgb, ImageData display-p3, cropSource=true
-PASS sRGB-BB0000, Context display-p3, ImageData srgb, cropSource=false
-PASS sRGB-BB0000, Context display-p3, ImageData srgb, cropSource=true
-PASS sRGB-BB0000, Context display-p3, ImageData display-p3, cropSource=false
-PASS sRGB-BB0000, Context display-p3, ImageData display-p3, cropSource=true
-PASS Rec2020-3FF000000, Context srgb, ImageData srgb, cropSource=false
-PASS Rec2020-3FF000000, Context srgb, ImageData srgb, cropSource=true
-PASS Rec2020-3FF000000, Context srgb, ImageData display-p3, cropSource=false
-PASS Rec2020-3FF000000, Context srgb, ImageData display-p3, cropSource=true
-PASS Rec2020-3FF000000, Context display-p3, ImageData srgb, cropSource=false
-PASS Rec2020-3FF000000, Context display-p3, ImageData srgb, cropSource=true
-FAIL Rec2020-3FF000000, Context display-p3, ImageData display-p3, cropSource=false assert_true: Actual pixel value 233,51,36,255 is approximately equal to 255,0,9,255. expected true got false
-FAIL Rec2020-3FF000000, Context display-p3, ImageData display-p3, cropSource=true assert_true: Actual pixel value 233,51,36,255 is approximately equal to 255,0,9,255. expected true got false
-FAIL Rec2020-222000000, Context srgb, ImageData srgb, cropSource=false assert_true: Actual pixel value 134,0,2,255 is approximately equal to 186,0,0,255. expected true got false
-FAIL Rec2020-222000000, Context srgb, ImageData srgb, cropSource=true assert_true: Actual pixel value 134,0,2,255 is approximately equal to 186,0,0,255. expected true got false
-FAIL Rec2020-222000000, Context srgb, ImageData display-p3, cropSource=false assert_true: Actual pixel value 122,22,15,255 is approximately equal to 170,34,23,255. expected true got false
-FAIL Rec2020-222000000, Context srgb, ImageData display-p3, cropSource=true assert_true: Actual pixel value 122,22,15,255 is approximately equal to 170,34,23,255. expected true got false
-FAIL Rec2020-222000000, Context display-p3, ImageData srgb, cropSource=false assert_true: Actual pixel value 134,1,3,255 is approximately equal to 186,0,0,255. expected true got false
-FAIL Rec2020-222000000, Context display-p3, ImageData srgb, cropSource=true assert_true: Actual pixel value 134,1,3,255 is approximately equal to 186,0,0,255. expected true got false
-FAIL Rec2020-222000000, Context display-p3, ImageData display-p3, cropSource=false assert_true: Actual pixel value 122,22,15,255 is approximately equal to 169,0,3,255. expected true got false
-FAIL Rec2020-222000000, Context display-p3, ImageData display-p3, cropSource=true assert_true: Actual pixel value 122,22,15,255 is approximately equal to 169,0,3,255. expected true got false
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/virtual/layout_ng_table_frag/README.md b/third_party/blink/web_tests/virtual/layout_ng_table_frag/README.md
deleted file mode 100644
index d856107..0000000
--- a/third_party/blink/web_tests/virtual/layout_ng_table_frag/README.md
+++ /dev/null
@@ -1 +0,0 @@
-Testing LayoutNGTableFragmentation; see ../../VirtualTestSuites
diff --git a/third_party/freetype/README.chromium b/third_party/freetype/README.chromium
index 3bf120f..81e875e 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-12-1-55-g275b116b4
-Revision: 275b116b40c9d183d42242099ea9ff276985855b
+Version: VER-2-12-1-57-g9a00282ef
+Revision: 9a00282efce6350e438cd2b9ef779cbc4a5c4d8b
 CPEPrefix: cpe:/a:freetype:freetype:2.11.1
 License: Custom license "inspired by the BSD, Artistic, and IJG (Independent
          JPEG Group) licenses"
diff --git a/third_party/puffin/BUILD.gn b/third_party/puffin/BUILD.gn
index 2c3d87d..a47a98801 100644
--- a/third_party/puffin/BUILD.gn
+++ b/third_party/puffin/BUILD.gn
@@ -113,6 +113,8 @@
     "src/unittest_common.cc",
     "src/utils_unittest.cc",
   ]
+  data_deps =
+      [ "//chrome/test/data/updater/puffin_patch_test:puffin_patch_test_files" ]
   deps = [
     ":libpuffdiff",
     ":libpuffpatch",
diff --git a/third_party/puffin/README.chromium b/third_party/puffin/README.chromium
index 3efc1be0..e14113f 100644
--- a/third_party/puffin/README.chromium
+++ b/third_party/puffin/README.chromium
@@ -32,4 +32,5 @@
     service we plant to implement only requires libpuffpatch.
 - Added puffin::Status enum to help disambiguate errors from puffin::PuffPatch
 - Added puffin::ApplyPuffPatch API which allows chromium libraries to call
-    puffin::PuffPatch without having worry about UniqueStreamPtr's and Buffer's.
\ No newline at end of file
+    puffin::PuffPatch without having worry about UniqueStreamPtr's and Buffer's.
+- Added ApplyPuffPatchTest to patching_unittest to test the new method.
\ No newline at end of file
diff --git a/third_party/puffin/src/patching_unittest.cc b/third_party/puffin/src/patching_unittest.cc
index c9fc1316..d8b9ddb 100644
--- a/third_party/puffin/src/patching_unittest.cc
+++ b/third_party/puffin/src/patching_unittest.cc
@@ -5,6 +5,8 @@
 #include <string>
 #include <vector>
 
+#include "base/files/file_util.h"
+#include "base/path_service.h"
 #include "gtest/gtest.h"
 
 #include "puffin/memory_stream.h"
@@ -25,6 +27,12 @@
 
 namespace {
 
+base::FilePath out_test_file(const char* file) {
+  base::FilePath path;
+  base::PathService::Get(base::DIR_GEN_TEST_DATA_ROOT, &path);
+  return path.AppendASCII(file);
+}
+
 #if PRINT_SAMPLE
 // Print an array into hex-format to the output. This can be used to create
 // static arrays for unit testing of the puffer/huffer.
@@ -140,6 +148,29 @@
                kSubblockDeflateExtentsSample1, {}, kPatch1ToNoDeflate);
 }
 
+TEST(PatchingTest, ApplyPuffPatchTest) {
+  ASSERT_EQ(ApplyPuffPatch(out_test_file("puffin_app_v1.crx3"),
+                           out_test_file("puffin_app_v1_to_v2.puff"),
+                           out_test_file("puffin_app_v1_to_v2.crx3")),
+            Status::P_OK);
+  std::string expected, actual;
+  ASSERT_TRUE(
+      base::ReadFileToString(out_test_file("puffin_app_v2.crx3"), &expected));
+  ASSERT_TRUE(base::ReadFileToString(out_test_file("puffin_app_v1_to_v2.crx3"),
+                                     &actual));
+  ASSERT_EQ(expected.compare(actual), 0);
+
+  ASSERT_EQ(ApplyPuffPatch(out_test_file("puffin_app_v2.crx3"),
+                           out_test_file("puffin_app_v2_to_v1.puff"),
+                           out_test_file("puffin_app_v2_to_v1.crx3")),
+            Status::P_OK);
+  ASSERT_TRUE(
+      base::ReadFileToString(out_test_file("puffin_app_v1.crx3"), &expected));
+  ASSERT_TRUE(base::ReadFileToString(out_test_file("puffin_app_v2_to_v1.crx3"),
+                                     &actual));
+  ASSERT_EQ(expected.compare(actual), 0);
+}
+
 // TODO(ahassani): add tests for:
 //   TestPatchingNoDeflateTo2
 
diff --git a/third_party/win_build_output/midl/chrome/updater/app/server/win/arm64/updater_legacy_idl.h b/third_party/win_build_output/midl/chrome/updater/app/server/win/arm64/updater_legacy_idl.h
index adfb166..852afaf 100644
--- a/third_party/win_build_output/midl/chrome/updater/app/server/win/arm64/updater_legacy_idl.h
+++ b/third_party/win_build_output/midl/chrome/updater/app/server/win/arm64/updater_legacy_idl.h
@@ -154,6 +154,30 @@
 #endif 	/* __GoogleUpdate3WebSystemClass_FWD_DEFINED__ */

 

 

+#ifndef __PolicyStatusUserClass_FWD_DEFINED__

+#define __PolicyStatusUserClass_FWD_DEFINED__

+

+#ifdef __cplusplus

+typedef class PolicyStatusUserClass PolicyStatusUserClass;

+#else

+typedef struct PolicyStatusUserClass PolicyStatusUserClass;

+#endif /* __cplusplus */

+

+#endif 	/* __PolicyStatusUserClass_FWD_DEFINED__ */

+

+

+#ifndef __PolicyStatusSystemClass_FWD_DEFINED__

+#define __PolicyStatusSystemClass_FWD_DEFINED__

+

+#ifdef __cplusplus

+typedef class PolicyStatusSystemClass PolicyStatusSystemClass;

+#else

+typedef struct PolicyStatusSystemClass PolicyStatusSystemClass;

+#endif /* __cplusplus */

+

+#endif 	/* __PolicyStatusSystemClass_FWD_DEFINED__ */

+

+

 #ifndef __ProcessLauncherClass_FWD_DEFINED__

 #define __ProcessLauncherClass_FWD_DEFINED__

 

@@ -2749,6 +2773,22 @@
 GoogleUpdate3WebSystemClass;

 #endif

 

+EXTERN_C const CLSID CLSID_PolicyStatusUserClass;

+

+#ifdef __cplusplus

+

+class DECLSPEC_UUID("6DDCE70D-A4AE-4E97-908C-BE7B2DB750AD")

+PolicyStatusUserClass;

+#endif

+

+EXTERN_C const CLSID CLSID_PolicyStatusSystemClass;

+

+#ifdef __cplusplus

+

+class DECLSPEC_UUID("521FDB42-7130-4806-822A-FC5163FAD983")

+PolicyStatusSystemClass;

+#endif

+

 EXTERN_C const CLSID CLSID_ProcessLauncherClass;

 

 #ifdef __cplusplus

diff --git a/third_party/win_build_output/midl/chrome/updater/app/server/win/arm64/updater_legacy_idl.tlb b/third_party/win_build_output/midl/chrome/updater/app/server/win/arm64/updater_legacy_idl.tlb
index 7522809..0ddb67edd 100644
--- a/third_party/win_build_output/midl/chrome/updater/app/server/win/arm64/updater_legacy_idl.tlb
+++ b/third_party/win_build_output/midl/chrome/updater/app/server/win/arm64/updater_legacy_idl.tlb
Binary files differ
diff --git a/third_party/win_build_output/midl/chrome/updater/app/server/win/arm64/updater_legacy_idl_i.c b/third_party/win_build_output/midl/chrome/updater/app/server/win/arm64/updater_legacy_idl_i.c
index 2eebddd..8dd89d8 100644
--- a/third_party/win_build_output/midl/chrome/updater/app/server/win/arm64/updater_legacy_idl_i.c
+++ b/third_party/win_build_output/midl/chrome/updater/app/server/win/arm64/updater_legacy_idl_i.c
@@ -109,6 +109,12 @@
 MIDL_DEFINE_GUID(CLSID, CLSID_GoogleUpdate3WebSystemClass,0x8A1D4361,0x2C08,0x4700,0xA3,0x51,0x3E,0xAA,0x9C,0xBF,0xF5,0xE4);

 

 

+MIDL_DEFINE_GUID(CLSID, CLSID_PolicyStatusUserClass,0x6DDCE70D,0xA4AE,0x4E97,0x90,0x8C,0xBE,0x7B,0x2D,0xB7,0x50,0xAD);

+

+

+MIDL_DEFINE_GUID(CLSID, CLSID_PolicyStatusSystemClass,0x521FDB42,0x7130,0x4806,0x82,0x2A,0xFC,0x51,0x63,0xFA,0xD9,0x83);

+

+

 MIDL_DEFINE_GUID(CLSID, CLSID_ProcessLauncherClass,0xABC01078,0xF197,0x4b0b,0xAD,0xBC,0xCF,0xE6,0x84,0xB3,0x9C,0x82);

 

 #undef MIDL_DEFINE_GUID

diff --git a/third_party/win_build_output/midl/chrome/updater/app/server/win/x64/updater_legacy_idl.h b/third_party/win_build_output/midl/chrome/updater/app/server/win/x64/updater_legacy_idl.h
index 463b15e..7438529 100644
--- a/third_party/win_build_output/midl/chrome/updater/app/server/win/x64/updater_legacy_idl.h
+++ b/third_party/win_build_output/midl/chrome/updater/app/server/win/x64/updater_legacy_idl.h
@@ -154,6 +154,30 @@
 #endif 	/* __GoogleUpdate3WebSystemClass_FWD_DEFINED__ */

 

 

+#ifndef __PolicyStatusUserClass_FWD_DEFINED__

+#define __PolicyStatusUserClass_FWD_DEFINED__

+

+#ifdef __cplusplus

+typedef class PolicyStatusUserClass PolicyStatusUserClass;

+#else

+typedef struct PolicyStatusUserClass PolicyStatusUserClass;

+#endif /* __cplusplus */

+

+#endif 	/* __PolicyStatusUserClass_FWD_DEFINED__ */

+

+

+#ifndef __PolicyStatusSystemClass_FWD_DEFINED__

+#define __PolicyStatusSystemClass_FWD_DEFINED__

+

+#ifdef __cplusplus

+typedef class PolicyStatusSystemClass PolicyStatusSystemClass;

+#else

+typedef struct PolicyStatusSystemClass PolicyStatusSystemClass;

+#endif /* __cplusplus */

+

+#endif 	/* __PolicyStatusSystemClass_FWD_DEFINED__ */

+

+

 #ifndef __ProcessLauncherClass_FWD_DEFINED__

 #define __ProcessLauncherClass_FWD_DEFINED__

 

@@ -2749,6 +2773,22 @@
 GoogleUpdate3WebSystemClass;

 #endif

 

+EXTERN_C const CLSID CLSID_PolicyStatusUserClass;

+

+#ifdef __cplusplus

+

+class DECLSPEC_UUID("6DDCE70D-A4AE-4E97-908C-BE7B2DB750AD")

+PolicyStatusUserClass;

+#endif

+

+EXTERN_C const CLSID CLSID_PolicyStatusSystemClass;

+

+#ifdef __cplusplus

+

+class DECLSPEC_UUID("521FDB42-7130-4806-822A-FC5163FAD983")

+PolicyStatusSystemClass;

+#endif

+

 EXTERN_C const CLSID CLSID_ProcessLauncherClass;

 

 #ifdef __cplusplus

diff --git a/third_party/win_build_output/midl/chrome/updater/app/server/win/x64/updater_legacy_idl.tlb b/third_party/win_build_output/midl/chrome/updater/app/server/win/x64/updater_legacy_idl.tlb
index 7522809..0ddb67edd 100644
--- a/third_party/win_build_output/midl/chrome/updater/app/server/win/x64/updater_legacy_idl.tlb
+++ b/third_party/win_build_output/midl/chrome/updater/app/server/win/x64/updater_legacy_idl.tlb
Binary files differ
diff --git a/third_party/win_build_output/midl/chrome/updater/app/server/win/x64/updater_legacy_idl_i.c b/third_party/win_build_output/midl/chrome/updater/app/server/win/x64/updater_legacy_idl_i.c
index 6214bf5a..c94a1b0d 100644
--- a/third_party/win_build_output/midl/chrome/updater/app/server/win/x64/updater_legacy_idl_i.c
+++ b/third_party/win_build_output/midl/chrome/updater/app/server/win/x64/updater_legacy_idl_i.c
@@ -109,6 +109,12 @@
 MIDL_DEFINE_GUID(CLSID, CLSID_GoogleUpdate3WebSystemClass,0x8A1D4361,0x2C08,0x4700,0xA3,0x51,0x3E,0xAA,0x9C,0xBF,0xF5,0xE4);

 

 

+MIDL_DEFINE_GUID(CLSID, CLSID_PolicyStatusUserClass,0x6DDCE70D,0xA4AE,0x4E97,0x90,0x8C,0xBE,0x7B,0x2D,0xB7,0x50,0xAD);

+

+

+MIDL_DEFINE_GUID(CLSID, CLSID_PolicyStatusSystemClass,0x521FDB42,0x7130,0x4806,0x82,0x2A,0xFC,0x51,0x63,0xFA,0xD9,0x83);

+

+

 MIDL_DEFINE_GUID(CLSID, CLSID_ProcessLauncherClass,0xABC01078,0xF197,0x4b0b,0xAD,0xBC,0xCF,0xE6,0x84,0xB3,0x9C,0x82);

 

 #undef MIDL_DEFINE_GUID

diff --git a/third_party/win_build_output/midl/chrome/updater/app/server/win/x86/updater_legacy_idl.h b/third_party/win_build_output/midl/chrome/updater/app/server/win/x86/updater_legacy_idl.h
index 5f8f78e361..a02c2024c 100644
--- a/third_party/win_build_output/midl/chrome/updater/app/server/win/x86/updater_legacy_idl.h
+++ b/third_party/win_build_output/midl/chrome/updater/app/server/win/x86/updater_legacy_idl.h
@@ -154,6 +154,30 @@
 #endif 	/* __GoogleUpdate3WebSystemClass_FWD_DEFINED__ */

 

 

+#ifndef __PolicyStatusUserClass_FWD_DEFINED__

+#define __PolicyStatusUserClass_FWD_DEFINED__

+

+#ifdef __cplusplus

+typedef class PolicyStatusUserClass PolicyStatusUserClass;

+#else

+typedef struct PolicyStatusUserClass PolicyStatusUserClass;

+#endif /* __cplusplus */

+

+#endif 	/* __PolicyStatusUserClass_FWD_DEFINED__ */

+

+

+#ifndef __PolicyStatusSystemClass_FWD_DEFINED__

+#define __PolicyStatusSystemClass_FWD_DEFINED__

+

+#ifdef __cplusplus

+typedef class PolicyStatusSystemClass PolicyStatusSystemClass;

+#else

+typedef struct PolicyStatusSystemClass PolicyStatusSystemClass;

+#endif /* __cplusplus */

+

+#endif 	/* __PolicyStatusSystemClass_FWD_DEFINED__ */

+

+

 #ifndef __ProcessLauncherClass_FWD_DEFINED__

 #define __ProcessLauncherClass_FWD_DEFINED__

 

@@ -2749,6 +2773,22 @@
 GoogleUpdate3WebSystemClass;

 #endif

 

+EXTERN_C const CLSID CLSID_PolicyStatusUserClass;

+

+#ifdef __cplusplus

+

+class DECLSPEC_UUID("6DDCE70D-A4AE-4E97-908C-BE7B2DB750AD")

+PolicyStatusUserClass;

+#endif

+

+EXTERN_C const CLSID CLSID_PolicyStatusSystemClass;

+

+#ifdef __cplusplus

+

+class DECLSPEC_UUID("521FDB42-7130-4806-822A-FC5163FAD983")

+PolicyStatusSystemClass;

+#endif

+

 EXTERN_C const CLSID CLSID_ProcessLauncherClass;

 

 #ifdef __cplusplus

diff --git a/third_party/win_build_output/midl/chrome/updater/app/server/win/x86/updater_legacy_idl.tlb b/third_party/win_build_output/midl/chrome/updater/app/server/win/x86/updater_legacy_idl.tlb
index c6f21b8..3005501 100644
--- a/third_party/win_build_output/midl/chrome/updater/app/server/win/x86/updater_legacy_idl.tlb
+++ b/third_party/win_build_output/midl/chrome/updater/app/server/win/x86/updater_legacy_idl.tlb
Binary files differ
diff --git a/third_party/win_build_output/midl/chrome/updater/app/server/win/x86/updater_legacy_idl_i.c b/third_party/win_build_output/midl/chrome/updater/app/server/win/x86/updater_legacy_idl_i.c
index 38114430..3bd8e36e 100644
--- a/third_party/win_build_output/midl/chrome/updater/app/server/win/x86/updater_legacy_idl_i.c
+++ b/third_party/win_build_output/midl/chrome/updater/app/server/win/x86/updater_legacy_idl_i.c
@@ -109,6 +109,12 @@
 MIDL_DEFINE_GUID(CLSID, CLSID_GoogleUpdate3WebSystemClass,0x8A1D4361,0x2C08,0x4700,0xA3,0x51,0x3E,0xAA,0x9C,0xBF,0xF5,0xE4);

 

 

+MIDL_DEFINE_GUID(CLSID, CLSID_PolicyStatusUserClass,0x6DDCE70D,0xA4AE,0x4E97,0x90,0x8C,0xBE,0x7B,0x2D,0xB7,0x50,0xAD);

+

+

+MIDL_DEFINE_GUID(CLSID, CLSID_PolicyStatusSystemClass,0x521FDB42,0x7130,0x4806,0x82,0x2A,0xFC,0x51,0x63,0xFA,0xD9,0x83);

+

+

 MIDL_DEFINE_GUID(CLSID, CLSID_ProcessLauncherClass,0xABC01078,0xF197,0x4b0b,0xAD,0xBC,0xCF,0xE6,0x84,0xB3,0x9C,0x82);

 

 #undef MIDL_DEFINE_GUID

diff --git a/tools/cygprofile/symbol_extractor.py b/tools/cygprofile/symbol_extractor.py
index e4ce28e..99373de 100644
--- a/tools/cygprofile/symbol_extractor.py
+++ b/tools/cygprofile/symbol_extractor.py
@@ -188,7 +188,9 @@
   """
   command = [_TOOL_PREFIX + 'objdump', '-t', '-w', binary_filename]
   try:
-    p = subprocess.Popen(command, stdout=subprocess.PIPE)
+    p = subprocess.Popen(command,
+                         stdout=subprocess.PIPE,
+                         universal_newlines=True)
   except OSError as error:
     logging.error("Failed to execute the command: path=%s, binary_filename=%s",
                   command[0], binary_filename)
diff --git a/tools/cygprofile/symbol_extractor_unittest.py b/tools/cygprofile/symbol_extractor_unittest.py
index 4186e74b..90cf72b 100755
--- a/tools/cygprofile/symbol_extractor_unittest.py
+++ b/tools/cygprofile/symbol_extractor_unittest.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env vpython
+#!/usr/bin/env vpython3
 # Copyright 2015 The Chromium Authors. All rights reserved.
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
diff --git a/tools/ipc_fuzzer/OWNERS b/tools/ipc_fuzzer/OWNERS
index 703ed9d..413e33e2e 100644
--- a/tools/ipc_fuzzer/OWNERS
+++ b/tools/ipc_fuzzer/OWNERS
@@ -1 +1,2 @@
+dcheng@chromium.org
 tsepez@chromium.org
diff --git a/tools/mb/mb_config.pyl b/tools/mb/mb_config.pyl
index 41dd635..38b71ee 100644
--- a/tools/mb/mb_config.pyl
+++ b/tools/mb/mb_config.pyl
@@ -93,6 +93,7 @@
       'android-10-arm64-rel': 'android_release_bot_minimal_symbols_arm64_fastbuild_webview_trichrome_reclient',
       'android-11-x86-rel': 'android_release_bot_minimal_symbols_x86_fastbuild_webview_trichrome_reclient',
       'android-12-x64-rel': 'android_release_bot_minimal_symbols_x64_fastbuild_webview_trichrome_reclient',
+      'android-12l-x86-rel': 'android_release_bot_minimal_symbols_x86_fastbuild_webview_trichrome_reclient',
       'android-arm64-proguard-rel': 'android_release_bot_minimal_symbols_arm64_webview_google_reclient',
       'android-bfcache-rel': 'android_release_bot_minimal_symbols_reclient',
       'android-binary-size-generator': 'android_binary_size_reclient',
@@ -942,6 +943,7 @@
       'android-11-x86-rel': 'android_release_trybot_x86_fastbuild_webview_trichrome',
       'android-12-x64-dbg': 'android_debug_trybot_x64_webview_trichrome_webview_shell',
       'android-12-x64-rel': 'android_release_trybot_x64_fastbuild_webview_trichrome',
+      'android-12l-x86-rel': 'android_release_trybot_x86_fastbuild_webview_trichrome',
       'android-arm64-all-targets-dbg': 'android_debug_trybot_compile_only_arm64_fastbuild',
       'android-asan': 'android_clang_asan_release_trybot',
       'android-bfcache-rel': 'android_release_trybot',
diff --git a/tools/mb/mb_config_expectations/chromium.android.json b/tools/mb/mb_config_expectations/chromium.android.json
index 039e9d9..47bae3e 100644
--- a/tools/mb/mb_config_expectations/chromium.android.json
+++ b/tools/mb/mb_config_expectations/chromium.android.json
@@ -164,6 +164,23 @@
       "use_remoteexec": true
     }
   },
+  "android-12l-x86-rel": {
+    "gn_args": {
+      "dcheck_always_on": false,
+      "disable_android_lint": true,
+      "ffmpeg_branding": "Chrome",
+      "is_component_build": false,
+      "is_debug": false,
+      "proprietary_codecs": true,
+      "strip_debug_info": true,
+      "symbol_level": 1,
+      "system_webview_package_name": "com.google.android.webview.debug",
+      "target_cpu": "x86",
+      "target_os": "android",
+      "use_errorprone_java_compiler": false,
+      "use_remoteexec": true
+    }
+  },
   "android-arm64-proguard-rel": {
     "gn_args": {
       "dcheck_always_on": false,
diff --git a/tools/mb/mb_config_expectations/tryserver.chromium.android.json b/tools/mb/mb_config_expectations/tryserver.chromium.android.json
index e7aa749..8b289be 100644
--- a/tools/mb/mb_config_expectations/tryserver.chromium.android.json
+++ b/tools/mb/mb_config_expectations/tryserver.chromium.android.json
@@ -65,6 +65,23 @@
       "use_goma": true
     }
   },
+  "android-12l-x86-rel": {
+    "gn_args": {
+      "dcheck_always_on": true,
+      "disable_android_lint": true,
+      "ffmpeg_branding": "Chrome",
+      "is_component_build": false,
+      "is_debug": false,
+      "proprietary_codecs": true,
+      "strip_debug_info": true,
+      "symbol_level": 0,
+      "system_webview_package_name": "com.google.android.webview.debug",
+      "target_cpu": "x86",
+      "target_os": "android",
+      "use_errorprone_java_compiler": false,
+      "use_goma": true
+    }
+  },
   "android-arm64-all-targets-dbg": {
     "gn_args": {
       "disable_android_lint": true,
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index ef2498d..af000819 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -24374,6 +24374,9 @@
   <int value="5" label="Composited Too Many Quads"/>
   <int value="6" label="Composited Backdrop Filter"/>
   <int value="7" label="Composited Copy Request"/>
+  <int value="8" label="Composited Not Axis Aligned - 3d Transform"/>
+  <int value="9" label="Composited Not Axis Aligned - Shear Transform"/>
+  <int value="10" label="Composited Not Axis Aligned - Rotated Transform"/>
 </enum>
 
 <enum name="DeleteCorruptedPasswordsResult">
@@ -57374,6 +57377,7 @@
   <int value="-936308513" label="CompactBubbleLauncher:enabled"/>
   <int value="-934842188"
       label="AutofillEnableVirtualCardFidoEnrollment:disabled"/>
+  <int value="-934444201" label="Hotspot:enabled"/>
   <int value="-934163513" label="EcheSWA:enabled"/>
   <int value="-933377608"
       label="OmniboxUIExperimentHideSteadyStateUrlScheme:enabled"/>
@@ -58496,6 +58500,7 @@
   <int value="-196110497" label="force-text-direction"/>
   <int value="-195242003"
       label="PrivateNetworkAccessRespectPreflightResults:disabled"/>
+  <int value="-195161821" label="ScrollUpdateOptimizations:disabled"/>
   <int value="-195029497" label="MediaRemoting:disabled"/>
   <int value="-192919826" label="ViewsSimplifiedFullscreenUI:enabled"/>
   <int value="-192389983" label="NoStatePrefetch:enabled"/>
@@ -60476,6 +60481,7 @@
       label="AutofillEnableSupportForMoreStructureInAddresses:disabled"/>
   <int value="1072010558" label="NTPModernLayout:disabled"/>
   <int value="1072517479" label="ImprovedCookieControls:enabled"/>
+  <int value="1073699828" label="ScrollUpdateOptimizations:enabled"/>
   <int value="1074359194" label="UseSuggestionsEvenIfFew:enabled"/>
   <int value="1074427701" label="NewPrintPreviewLayout:enabled"/>
   <int value="1075637651" label="disable-tablet-splitview"/>
@@ -60975,6 +60981,7 @@
       label="OmniboxUIExperimentHideSuggestionUrlTrivialSubdomains:disabled"/>
   <int value="1387356699" label="PolicyAtomicGroup:enabled"/>
   <int value="1389729816" label="data-reduction-proxy-lo-fi"/>
+  <int value="1391313384" label="Hotspot:disabled"/>
   <int value="1392836587" label="DesktopPWAsElidedExtensionsMenu:disabled"/>
   <int value="1392935139" label="KidsManagementUrlClassification:enabled"/>
   <int value="1393413889" label="SeparatePointingStickSettings:disabled"/>
diff --git a/tools/metrics/histograms/metadata/network/histograms.xml b/tools/metrics/histograms/metadata/network/histograms.xml
index 4724f0a5..1bf93194b 100644
--- a/tools/metrics/histograms/metadata/network/histograms.xml
+++ b/tools/metrics/histograms/metadata/network/histograms.xml
@@ -249,7 +249,7 @@
 </histogram>
 
 <histogram name="Network.Cellular.ESim.EnableProfile.Result"
-    enum="HermesResponseStatus" expires_after="2022-09-01">
+    enum="HermesResponseStatus" expires_after="2023-09-01">
   <owner>azeemarshad@chromium.org</owner>
   <owner>khorimoto@chromium.org</owner>
   <owner>cros-connectivity@google.com</owner>
@@ -367,7 +367,7 @@
 
 <histogram
     name="Network.Cellular.ESim.Policy.ESimInstall.OperationResult{OperationType}"
-    enum="NetworkCellularESimInstallResult" expires_after="2022-09-01">
+    enum="NetworkCellularESimInstallResult" expires_after="2023-09-01">
   <owner>azeemarshad@chromium.org</owner>
   <owner>cros-connectivity@google.com</owner>
   <owner>jiajunz@google.com</owner>
@@ -401,7 +401,7 @@
 </histogram>
 
 <histogram name="Network.Cellular.ESim.Policy.ResetEuicc.Duration" units="ms"
-    expires_after="2022-09-01">
+    expires_after="2023-09-01">
   <owner>azeemarshad@chromium.org</owner>
   <owner>cros-connectivity@google.com</owner>
   <owner>jiajunz@google.com</owner>
@@ -411,7 +411,7 @@
 </histogram>
 
 <histogram name="Network.Cellular.ESim.Policy.ResetEuicc.Result"
-    enum="NetworkCellularResetEuiccResult" expires_after="2022-09-01">
+    enum="NetworkCellularResetEuiccResult" expires_after="2023-09-01">
   <owner>azeemarshad@chromium.org</owner>
   <owner>cros-connectivity@google.com</owner>
   <owner>jiajunz@google.com</owner>
@@ -460,7 +460,7 @@
 </histogram>
 
 <histogram name="Network.Cellular.ESim.Policy.Usage.Duration" units="seconds"
-    expires_after="2022-09-01">
+    expires_after="2023-09-01">
   <owner>azeemarshad@chromium.org</owner>
   <owner>cros-connectivity@google.com</owner>
   <owner>hsuregan@chromium.org</owner>
@@ -535,7 +535,7 @@
 </histogram>
 
 <histogram name="Network.Cellular.ESim.RequestPendingProfiles.Result"
-    enum="HermesResponseStatus" expires_after="2022-09-01">
+    enum="HermesResponseStatus" expires_after="2023-09-01">
   <owner>azeemarshad@chromium.org</owner>
   <owner>khorimoto@chromium.org</owner>
   <owner>cros-connectivity@google.com</owner>
@@ -633,7 +633,7 @@
 </histogram>
 
 <histogram name="Network.Cellular.InhibitResult"
-    enum="NetworkCellularInhibitResult" expires_after="2022-09-01">
+    enum="NetworkCellularInhibitResult" expires_after="2023-09-01">
   <owner>azeemarshad@chromium.org</owner>
   <owner>khorimoto@chromium.org</owner>
   <owner>cros-connectivity@google.com</owner>
@@ -791,7 +791,7 @@
 </histogram>
 
 <histogram name="Network.Cellular.{SimType}.DisconnectByPolicy.Result"
-    enum="BooleanSuccess" expires_after="2022-09-01">
+    enum="BooleanSuccess" expires_after="2023-09-01">
   <owner>azeemarshad@chromium.org</owner>
   <owner>cros-connectivity@google.com</owner>
   <owner>jiajunz@google.com</owner>
@@ -806,7 +806,7 @@
 </histogram>
 
 <histogram name="Network.Cellular.{SimType}.Disconnections"
-    enum="NetworkCellularConnectionState" expires_after="2022-09-01">
+    enum="NetworkCellularConnectionState" expires_after="2023-09-01">
   <owner>azeemarshad@chromium.org</owner>
   <owner>cros-connectivity@google.com</owner>
   <summary>
diff --git a/tools/perf/core/perfetto_binary_roller/binary_deps.json b/tools/perf/core/perfetto_binary_roller/binary_deps.json
index f6e9e6a..fac1e289f 100644
--- a/tools/perf/core/perfetto_binary_roller/binary_deps.json
+++ b/tools/perf/core/perfetto_binary_roller/binary_deps.json
@@ -5,16 +5,16 @@
             "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux_arm64/49b4b5dcbc312d8d2c3751cf29238b8efeb4e494/trace_processor_shell"
         },
         "win": {
-            "hash": "d7e53918c0f1864c0da750f3eaf6c91d5fc0953c",
-            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/win/c9aa8a4ab3b84294b6a08705d07aa7b7c200b049/trace_processor_shell.exe"
+            "hash": "ab72fde28b8d84c12e2de2ebd2eee9177ff4d45d",
+            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/win/049a4290ea53cc6797f5b1c433bbc5a21985ad77/trace_processor_shell.exe"
         },
         "linux_arm": {
             "hash": "58893933be305d3bfe0a72ebebcacde2ac3ca893",
             "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux_arm/49b4b5dcbc312d8d2c3751cf29238b8efeb4e494/trace_processor_shell"
         },
         "mac": {
-            "hash": "05d75c83cb2794e125f66c042ae6fb21f185ef51",
-            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/mac/c9aa8a4ab3b84294b6a08705d07aa7b7c200b049/trace_processor_shell"
+            "hash": "51434125005f7f2ea81241f2a2045870e0e01afa",
+            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/mac/049a4290ea53cc6797f5b1c433bbc5a21985ad77/trace_processor_shell"
         },
         "mac_arm64": {
             "hash": "e1ad4861384b06d911a65f035317914b8cc975c6",
@@ -22,7 +22,7 @@
         },
         "linux": {
             "hash": "e5fb41a71c96e4800a9c0dc7d8647b9dc56629fe",
-            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/e8137e2b16874eec8cb0750baa58d4b429dde319/trace_processor_shell"
+            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/624891936a38ebb943bd53afc7610cebb8bba946/trace_processor_shell"
         }
     },
     "power_profile.sql": {
diff --git a/ui/chromeos/translations/ui_chromeos_strings_af.xtb b/ui/chromeos/translations/ui_chromeos_strings_af.xtb
index e0ba091..2e34c72 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_af.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_af.xtb
@@ -949,7 +949,6 @@
 <translation id="9034924485347205037">Linux-lêers</translation>
 <translation id="9035012421917565900">Die items kan nie na "<ph name="DESTINATION_NAME" />" toe teruggeskuif word nie en daarom sal jy nie hierdie handeling kan ontdoen nie.</translation>
 <translation id="9035689366572880647">Voer huidige PIN in</translation>
-<translation id="9037777873893411148">*Organisasie se berging is vol</translation>
 <translation id="9038620279323455325">'n Lêer met die naam "<ph name="FILE_NAME" />" bestaan reeds. Kies asseblief 'n ander naam.</translation>
 <translation id="9046895021617826162">Kon nie koppel nie</translation>
 <translation id="9065512565307033593">Jou netwerktoegang sal gedeaktiveer word as jy nie verifieer nie.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_am.xtb b/ui/chromeos/translations/ui_chromeos_strings_am.xtb
index 44b8f52..7cf774f 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_am.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_am.xtb
@@ -950,7 +950,6 @@
 <translation id="9034924485347205037">የLinux ፋይሎች</translation>
 <translation id="9035012421917565900">ንጥሎቹ ተመልሰው ወደ «<ph name="DESTINATION_NAME" />» ሊወሰዱ አይችሉም፤ ስለዚህ ይህን ድርጊት መቀልበስ አይችሉም።</translation>
 <translation id="9035689366572880647">የአሁኑን ፒን ያስገቡ</translation>
-<translation id="9037777873893411148">*የድርጅት ማከማቻ ሞልቷል</translation>
 <translation id="9038620279323455325">«<ph name="FILE_NAME" />» የሚባለው ፋይል አስቀድሞ አለ። እባክዎ የተለየ ስም ይምረጡ።</translation>
 <translation id="9046895021617826162">ማገናኘት አልተሳካም</translation>
 <translation id="9065512565307033593">ማረጋገጥ ካልቻሉ የእርስዎ የአውታረ መረብ መዳረሻ ይሰናከላል።</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ar.xtb b/ui/chromeos/translations/ui_chromeos_strings_ar.xtb
index b8aba628..d5ba54c1 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ar.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ar.xtb
@@ -951,7 +951,6 @@
 <translation id="9034924485347205037">‏ملفات نظام التشغيل Linux</translation>
 <translation id="9035012421917565900">لا يمكن نقل العناصر مرة أخرى إلى '<ph name="DESTINATION_NAME" />'، لذلك لن تتمكن من التراجع عن هذا الإجراء.</translation>
 <translation id="9035689366572880647">إدخال رقم التعريف الشخصي الحالي</translation>
-<translation id="9037777873893411148">*مساحة التخزين المتوفّرة للمؤسسة ممتلئة</translation>
 <translation id="9038620279323455325">الملف الذي يحمل الاسم "<ph name="FILE_NAME" />" موجود من قبل. يُرجى اختيار اسم مختلف.</translation>
 <translation id="9046895021617826162">تعذّر الاتصال</translation>
 <translation id="9065512565307033593">‏إذا تعذّر عليك تأكيد رمز PUK، سيتم إيقاف إمكانية الوصول إلى الشبكة.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_as.xtb b/ui/chromeos/translations/ui_chromeos_strings_as.xtb
index 0d4dcdcec..859eaeb 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_as.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_as.xtb
@@ -949,7 +949,6 @@
 <translation id="9034924485347205037">Linux ফাইল</translation>
 <translation id="9035012421917565900">বস্তুবোৰ ‘<ph name="DESTINATION_NAME" />’লৈ পুনৰ লৈ যাব নোৱাৰি, সেয়েহে আপুনি এই কাৰ্যটো আনডু কৰিব নোৱাৰিব।</translation>
 <translation id="9035689366572880647">বৰ্তমানৰ পিনটো দিয়ক</translation>
-<translation id="9037777873893411148">*প্ৰতিষ্ঠানৰ ষ্ট’ৰেজ পূৰ্ণ হৈছে</translation>
 <translation id="9038620279323455325">"<ph name="FILE_NAME" />" নামৰ ফাইল ইতিমধ্যে আছেই। অনুগ্ৰহ কৰি অন্য কোনো নাম বাছনি কৰক।</translation>
 <translation id="9046895021617826162">সংযোগ কৰিব পৰা নগ'ল</translation>
 <translation id="9065512565307033593">আপুনি যদি সত্যাপন কৰিব নোৱাৰে, আপোনাৰ নেটৱৰ্ক এক্সেছ অক্ষম কৰা হ’ব।</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_az.xtb b/ui/chromeos/translations/ui_chromeos_strings_az.xtb
index a778f6b..de777fd0 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_az.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_az.xtb
@@ -947,7 +947,6 @@
 <translation id="9034924485347205037">Linux faylları</translation>
 <translation id="9035012421917565900">Element yenidən "<ph name="DESTINATION_NAME" />" təyinatına köçürülə bilməz, ona görə də bu əməliyyat geri qaytara bilməyəcəksiniz.</translation>
 <translation id="9035689366572880647">Cari PİN'i daxil edin</translation>
-<translation id="9037777873893411148">*Təşkilatın yaddaşı doludur</translation>
 <translation id="9038620279323455325">"<ph name="FILE_NAME" />" adlı fayl artıq mövcuddur. Fərqli ad seçin.</translation>
 <translation id="9046895021617826162">Qoşulma uğursuz oldu</translation>
 <translation id="9065512565307033593">Doğrulamaq alınmasa, şəbəkəyə girişiniz deaktiv ediləcək.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_be.xtb b/ui/chromeos/translations/ui_chromeos_strings_be.xtb
index bd911705..bfecd0fc 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_be.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_be.xtb
@@ -949,7 +949,6 @@
 <translation id="9034924485347205037">Файлы Linux</translation>
 <translation id="9035012421917565900">Немагчыма перамясціць элементы назад у "<ph name="DESTINATION_NAME" />", таму вы не зможаце адрабіць гэта дзеянне.</translation>
 <translation id="9035689366572880647">Увядзіце бягучы PIN-код</translation>
-<translation id="9037777873893411148">* Сховішча арганізацыі запоўнена</translation>
 <translation id="9038620279323455325">Файл пад назвай "<ph name="FILE_NAME" />" ужо існуе. Выберыце іншую назву.</translation>
 <translation id="9046895021617826162">Збой падключэння</translation>
 <translation id="9065512565307033593">Калі вы ўведзяце няправільны PUK-код, доступ да сеткі будзе адключаны.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_bg.xtb b/ui/chromeos/translations/ui_chromeos_strings_bg.xtb
index d9342ec..af99889 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_bg.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_bg.xtb
@@ -950,7 +950,6 @@
 <translation id="9034924485347205037">Файлове за Linux</translation>
 <translation id="9035012421917565900">Елементите не могат да бъдат върнати в/ъв „<ph name="DESTINATION_NAME" />“, така че няма да можете да отмените това действие.</translation>
 <translation id="9035689366572880647">Въведете текущия ПИН код</translation>
-<translation id="9037777873893411148">* Хранилището на организацията е пълно</translation>
 <translation id="9038620279323455325">Файлът „<ph name="FILE_NAME" />“ вече съществува. Моля, изберете друго име.</translation>
 <translation id="9046895021617826162">Свързването не бе успешно</translation>
 <translation id="9065512565307033593">Ако не успеете да потвърдите самоличността си, достъпът ви до мрежата ще бъде прекратен.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_bn.xtb b/ui/chromeos/translations/ui_chromeos_strings_bn.xtb
index 248f26a..26eb7d96 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_bn.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_bn.xtb
@@ -949,7 +949,6 @@
 <translation id="9034924485347205037">Linux ফাইল</translation>
 <translation id="9035012421917565900">আইটেমগুলিকে '<ph name="DESTINATION_NAME" />'-এ ফিরিয়ে নেওয়া যাবে না, তাই আপনি এই কাজটি আর আগের অবস্থায় ফেরাতে পারবেন না।</translation>
 <translation id="9035689366572880647">বর্তমান পিন লিখুন</translation>
-<translation id="9037777873893411148">*সংস্থার স্টোরেজ ভর্তি হয়ে গেছে</translation>
 <translation id="9038620279323455325">"<ph name="FILE_NAME" />" নামের ফাইল আগে থেকেই আছে। অন্য একটি নাম লিখুন।</translation>
 <translation id="9046895021617826162">সংযোগ ব্যর্থ হয়েছে</translation>
 <translation id="9065512565307033593">আপনি যাচাই না করলে, আপনার নেটওয়ার্ক অ্যাক্সেস করার সুবিধা বন্ধ হয়ে যাবে।</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_bs.xtb b/ui/chromeos/translations/ui_chromeos_strings_bs.xtb
index b09e0b5..97d6de6 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_bs.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_bs.xtb
@@ -950,7 +950,6 @@
 <translation id="9034924485347205037">Linux fajlovi</translation>
 <translation id="9035012421917565900">Stavke se ne mogu premjestiti nazad u "<ph name="DESTINATION_NAME" />", tako da nećete moći opozvati ovu radnju.</translation>
 <translation id="9035689366572880647">Unesite trenutni PIN</translation>
-<translation id="9037777873893411148">*Pohrana organizacije je puna</translation>
 <translation id="9038620279323455325">Fajl s nazivom "<ph name="FILE_NAME" />" već postoji. Odaberite drugi naziv fajla.</translation>
 <translation id="9046895021617826162">Povezivanje nije uspjelo</translation>
 <translation id="9065512565307033593">Ako ne uspijete potvrditi, onemogućit će vam se pristup mreži.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ca.xtb b/ui/chromeos/translations/ui_chromeos_strings_ca.xtb
index 6b930a6..1e88c5e 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ca.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ca.xtb
@@ -950,7 +950,6 @@
 <translation id="9034924485347205037">Fitxers de Linux</translation>
 <translation id="9035012421917565900">Com que els elements no es poden retornar a <ph name="DESTINATION_NAME" />, aquesta acció no es pot desfer.</translation>
 <translation id="9035689366572880647">Introdueix el PIN actual</translation>
-<translation id="9037777873893411148">* L'emmagatzematge de l'organització és ple</translation>
 <translation id="9038620279323455325">Ja hi ha un fitxer anomenat <ph name="FILE_NAME" />. Tria un altre nom.</translation>
 <translation id="9046895021617826162">S'ha produït un error en la connexió</translation>
 <translation id="9065512565307033593">Si no fas la verificació, l'accés a la xarxa es desactivarà.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_cs.xtb b/ui/chromeos/translations/ui_chromeos_strings_cs.xtb
index 8daff77..51ce376 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_cs.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_cs.xtb
@@ -949,7 +949,6 @@
 <translation id="9034924485347205037">Soubory systému Linux</translation>
 <translation id="9035012421917565900">Položky nelze přesunout zpět do týmu <ph name="DESTINATION_NAME" />. Tuto akci proto nebude možné vrátit zpět.</translation>
 <translation id="9035689366572880647">Zadejte aktuální PIN</translation>
-<translation id="9037777873893411148">*Úložiště organizace je plné</translation>
 <translation id="9038620279323455325">Soubor s názvem „<ph name="FILE_NAME" />“ již existuje. Zvolte jiný název.</translation>
 <translation id="9046895021617826162">Připojení selhalo</translation>
 <translation id="9065512565307033593">Pokud se vám nepodaří provést ověření, bude vám zakázán přístup k síti.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_cy.xtb b/ui/chromeos/translations/ui_chromeos_strings_cy.xtb
index 2271846..da193b4 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_cy.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_cy.xtb
@@ -949,7 +949,6 @@
 <translation id="9034924485347205037">Ffeiliau Linux</translation>
 <translation id="9035012421917565900">Ni ellid dychwelyd yr eitemau i '<ph name="DESTINATION_NAME" />', felly ni fyddwch yn gallu dadwneud y weithred hon.</translation>
 <translation id="9035689366572880647">Rhowch y PIN presennol</translation>
-<translation id="9037777873893411148">*Mae lle storio'r sefydliad yn llawn</translation>
 <translation id="9038620279323455325">Mae ffeil o'r enw "<ph name="FILE_NAME" />" eisoes yn bodoli. Dewiswch enw gwahanol.</translation>
 <translation id="9046895021617826162">Wedi methu cysylltu</translation>
 <translation id="9065512565307033593">Os byddwch yn methu â dilysu, bydd eich mynediad at y rhwydwaith yn cael ei ddiffodd.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_da.xtb b/ui/chromeos/translations/ui_chromeos_strings_da.xtb
index 16d33cd..42dba2b 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_da.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_da.xtb
@@ -950,7 +950,6 @@
 <translation id="9034924485347205037">Linux-filer</translation>
 <translation id="9035012421917565900">Elementerne kan ikke flyttes tilbage til "<ph name="DESTINATION_NAME" />", så du kan ikke fortryde denne handling.</translation>
 <translation id="9035689366572880647">Angiv aktuel pinkode</translation>
-<translation id="9037777873893411148">*Organisationens lagerplads er opbrugt</translation>
 <translation id="9038620279323455325">Der findes allerede en fil med navnet "<ph name="FILE_NAME" />". Vælg et andet navn.</translation>
 <translation id="9046895021617826162">Forbindelsen mislykkedes</translation>
 <translation id="9065512565307033593">Hvis du ikke bekræfter, mister du adgangen til netværket.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_de.xtb b/ui/chromeos/translations/ui_chromeos_strings_de.xtb
index 765ba34..1df6847 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_de.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_de.xtb
@@ -950,7 +950,6 @@
 <translation id="9034924485347205037">Linux-Dateien</translation>
 <translation id="9035012421917565900">Diese Elemente können nicht in "<ph name="DESTINATION_NAME" />" zurückverschoben werden. Diese Aktion lässt sich also nicht rückgängig machen.</translation>
 <translation id="9035689366572880647">Aktuelle PIN eingeben</translation>
-<translation id="9037777873893411148">*Speicher der Organisation belegt</translation>
 <translation id="9038620279323455325">Die Datei mit dem Namen "<ph name="FILE_NAME" />" existiert bereits. Wähle einen anderen Namen aus.</translation>
 <translation id="9046895021617826162">Verbindungsaufbau fehlgeschlagen</translation>
 <translation id="9065512565307033593">Ohne diese Bestätigung wird der Netzwerkzugriff deaktiviert.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_el.xtb b/ui/chromeos/translations/ui_chromeos_strings_el.xtb
index 57be47a..94033fcf 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_el.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_el.xtb
@@ -973,7 +973,6 @@
 <translation id="9034924485347205037">Αρχεία Linux</translation>
 <translation id="9035012421917565900">Τα στοιχεία δεν είναι δυνατό να επιστρέψουν στο "<ph name="DESTINATION_NAME" />", επομένως δεν θα μπορείτε να αναιρέσετε αυτήν την ενέργεια.</translation>
 <translation id="9035689366572880647">Εισαγάγετε τρέχον PIN</translation>
-<translation id="9037777873893411148">*Ο αποθηκευτικός χώρος του οργανισμού είναι πλήρης</translation>
 <translation id="9038620279323455325">Το αρχείο με το όνομα "<ph name="FILE_NAME" />" υπάρχει ήδη. Επιλέξτε ένα διαφορετικό όνομα.</translation>
 <translation id="9046895021617826162">Η σύνδεση απέτυχε</translation>
 <translation id="9065512565307033593">Εάν δεν επαληθεύσετε, θα απενεργοποιηθεί η πρόσβαση δικτύου σας.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb b/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb
index b86b4fe16..986e9744 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb
@@ -950,7 +950,6 @@
 <translation id="9034924485347205037">Linux files</translation>
 <translation id="9035012421917565900">The items cannot be moved back into '<ph name="DESTINATION_NAME" />', so you won't be able to undo this action.</translation>
 <translation id="9035689366572880647">Enter current PIN</translation>
-<translation id="9037777873893411148">*Org storage full</translation>
 <translation id="9038620279323455325">The file named '<ph name="FILE_NAME" />' already exists. Please choose a different name.</translation>
 <translation id="9046895021617826162">Connection failed</translation>
 <translation id="9065512565307033593">If you fail to verify, your network access will be disabled.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_es-419.xtb b/ui/chromeos/translations/ui_chromeos_strings_es-419.xtb
index 464da91a..c67c84f 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_es-419.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_es-419.xtb
@@ -950,7 +950,6 @@
 <translation id="9034924485347205037">Archivos de Linux</translation>
 <translation id="9035012421917565900">Los elementos no se pueden volver a colocar en "<ph name="DESTINATION_NAME" />", por lo que no podrás deshacer esta acción.</translation>
 <translation id="9035689366572880647">Ingresar el PIN actual</translation>
-<translation id="9037777873893411148">* El almacenamiento de la organización está lleno</translation>
 <translation id="9038620279323455325">Ya existe un archivo con el nombre "<ph name="FILE_NAME" />". Elige otro.</translation>
 <translation id="9046895021617826162">No se pudo conectar</translation>
 <translation id="9065512565307033593">Si no puedes verificar tu identidad, se inhabilitará tu acceso a la red.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_es.xtb b/ui/chromeos/translations/ui_chromeos_strings_es.xtb
index 5fab01f1..f4794e4 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_es.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_es.xtb
@@ -950,7 +950,6 @@
 <translation id="9034924485347205037">Archivos de Linux</translation>
 <translation id="9035012421917565900">Estos elementos no se pueden volver a mover a "<ph name="DESTINATION_NAME" />", por lo que no podrás deshacer esta acción.</translation>
 <translation id="9035689366572880647">Escribe el PIN actual</translation>
-<translation id="9037777873893411148">* Almacenamiento de organización lleno</translation>
 <translation id="9038620279323455325">Ya existe el archivo "<ph name="FILE_NAME" />". Elige otro nombre.</translation>
 <translation id="9046895021617826162">Error de conexión</translation>
 <translation id="9065512565307033593">Si no la verificas, se inhabilitará el acceso a la red.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_et.xtb b/ui/chromeos/translations/ui_chromeos_strings_et.xtb
index 82c853e..77e59df 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_et.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_et.xtb
@@ -950,7 +950,6 @@
 <translation id="9034924485347205037">Linuxi failid</translation>
 <translation id="9035012421917565900">Üksusi ei saa sihtkohta „<ph name="DESTINATION_NAME" />” tagasi teisaldada, seega ei saa te seda toimingut tagasi võtta.</translation>
 <translation id="9035689366572880647">Sisestage praegune PIN-kood</translation>
-<translation id="9037777873893411148">* Organisatsiooni salvestusruum on täis</translation>
 <translation id="9038620279323455325">Fail nimega „<ph name="FILE_NAME" />” on juba olemas? Valige muu nimi.</translation>
 <translation id="9046895021617826162">Ühendamine nurjus</translation>
 <translation id="9065512565307033593">Kui kinnitamine ebaõnnestub, keelatakse juurdepääs võrgule.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_eu.xtb b/ui/chromeos/translations/ui_chromeos_strings_eu.xtb
index 79d5513a..80d7474 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_eu.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_eu.xtb
@@ -949,7 +949,6 @@
 <translation id="9034924485347205037">Linux fitxategiak</translation>
 <translation id="9035012421917565900">Ezin dira eraman berriro elementuak "<ph name="DESTINATION_NAME" />" unitatera; beraz, ezin izango duzu desegin ekintza.</translation>
 <translation id="9035689366572880647">Idatzi oraingo PINa</translation>
-<translation id="9037777873893411148">*Erakundearen biltegia beteta dago</translation>
 <translation id="9038620279323455325">"<ph name="FILE_NAME" />" izena duen fitxategia bazegoen lehendik ere. Aukeratu beste izen bat.</translation>
 <translation id="9046895021617826162">Ezin izan da konektatu</translation>
 <translation id="9065512565307033593">Egiaztapena gauzatzen ez baduzu, desgaitu egingo da sarerako sarbidea.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fa.xtb b/ui/chromeos/translations/ui_chromeos_strings_fa.xtb
index 846210b..6543105 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_fa.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_fa.xtb
@@ -950,7 +950,6 @@
 <translation id="9034924485347205037">‏فایل‌های Linux</translation>
 <translation id="9035012421917565900">این موارد نمی‌توانند به «<ph name="DESTINATION_NAME" />» برگردانده شوند، بنابراین نمی‌توانید این اقدام را واگرد کنید.</translation>
 <translation id="9035689366572880647">پین کنونی را وارد کنید</translation>
-<translation id="9037777873893411148">*فضای ذخیره‌سازی سازمان پر است</translation>
 <translation id="9038620279323455325">فایلی با نام «<ph name="FILE_NAME" />» ازقبل وجود دارد. لطفاً نام دیگری انتخاب کنید.</translation>
 <translation id="9046895021617826162">اتصال برقرار نشد</translation>
 <translation id="9065512565307033593">اگر نتوانید به‌تأیید برسانید، دسترسی شما به شبکه غیرفعال خواهد شد.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fi.xtb b/ui/chromeos/translations/ui_chromeos_strings_fi.xtb
index 5e65a3a..e7c81a0 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_fi.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_fi.xtb
@@ -950,7 +950,6 @@
 <translation id="9034924485347205037">Linux-tiedostot</translation>
 <translation id="9035012421917565900">Kohteita ei voi siirtää takaisin paikkaan <ph name="DESTINATION_NAME" />, joten tätä toimintoa ei voi kumota.</translation>
 <translation id="9035689366572880647">Lisää nykyinen PIN-koodi</translation>
-<translation id="9037777873893411148">*Organisaation tallennustila täynnä</translation>
 <translation id="9038620279323455325">Tiedosto nimeltä <ph name="FILE_NAME" /> on jo olemassa. Valitse toinen nimi.</translation>
 <translation id="9046895021617826162">Yhdistäminen epäonnistui</translation>
 <translation id="9065512565307033593">Jos vahvistus ei onnistu, pääsy verkkoon estyy.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fil.xtb b/ui/chromeos/translations/ui_chromeos_strings_fil.xtb
index 1143861a..4bbbcc6 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_fil.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_fil.xtb
@@ -950,7 +950,6 @@
 <translation id="9034924485347205037">Mga Linux file</translation>
 <translation id="9035012421917565900">Hindi na maibabalik ang mga item sa '<ph name="DESTINATION_NAME" />,' kaya hindi mo maa-undo ang pagkilos na ito.</translation>
 <translation id="9035689366572880647">Ilagay ang kasalukuyang PIN</translation>
-<translation id="9037777873893411148">*Puno na ang storage ng org</translation>
 <translation id="9038620279323455325">Mayroon nang file na may pangalang "<ph name="FILE_NAME" />." Pumili ng ibang pangalan.</translation>
 <translation id="9046895021617826162">Nabigo ang pagkonekta</translation>
 <translation id="9065512565307033593">Kung hindi ka makakapag-verify, madi-disable ang iyong access sa network.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fr-CA.xtb b/ui/chromeos/translations/ui_chromeos_strings_fr-CA.xtb
index 13dcd4f..63591a8 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_fr-CA.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_fr-CA.xtb
@@ -951,7 +951,6 @@
 <translation id="9034924485347205037">Fichiers Linux</translation>
 <translation id="9035012421917565900">Les éléments ne peuvent pas être remis dans « <ph name="DESTINATION_NAME" /> ». Cette action est donc irréversible.</translation>
 <translation id="9035689366572880647">Entrez le NIP actuel</translation>
-<translation id="9037777873893411148">* Espace de stockage de l'organisation plein</translation>
 <translation id="9038620279323455325">Un fichier nommé « <ph name="FILE_NAME" /> » existe déjà. Veuillez choisir un autre nom.</translation>
 <translation id="9046895021617826162">Échec de la connexion</translation>
 <translation id="9065512565307033593">Si vous n'effectuez pas la vérification, votre accès réseau sera désactivé.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fr.xtb b/ui/chromeos/translations/ui_chromeos_strings_fr.xtb
index 3b688b9..191ec40 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_fr.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_fr.xtb
@@ -950,7 +950,6 @@
 <translation id="9034924485347205037">Fichiers Linux</translation>
 <translation id="9035012421917565900">Les éléments ne pourront pas être redéplacés vers "<ph name="DESTINATION_NAME" />". Cette action est donc irréversible.</translation>
 <translation id="9035689366572880647">Code PIN actuel</translation>
-<translation id="9037777873893411148">*Espace de stockage de l'organisation saturé</translation>
 <translation id="9038620279323455325">Le nom "<ph name="FILE_NAME" />" est déjà attribué à un fichier. Veuillez en choisir un autre.</translation>
 <translation id="9046895021617826162">Échec de la connexion</translation>
 <translation id="9065512565307033593">En cas d'échec de la validation, votre accès réseau sera désactivé.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_gl.xtb b/ui/chromeos/translations/ui_chromeos_strings_gl.xtb
index 3168559..6a29d406 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_gl.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_gl.xtb
@@ -949,7 +949,6 @@
 <translation id="9034924485347205037">Ficheiros de Linux</translation>
 <translation id="9035012421917565900">Os elementos non se poden transferir de novo a "<ph name="DESTINATION_NAME" />", así que non poderás desfacer esta acción.</translation>
 <translation id="9035689366572880647">Mete o PIN actual</translation>
-<translation id="9037777873893411148">*O almacenamento da organización está cheo</translation>
 <translation id="9038620279323455325">Xa existe un ficheiro denominado "<ph name="FILE_NAME" />". Escolle un nome diferente.</translation>
 <translation id="9046895021617826162">Erro na conexión</translation>
 <translation id="9065512565307033593">Se non levas a cabo a verificación correctamente, desactivaráseche o acceso á rede.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_gu.xtb b/ui/chromeos/translations/ui_chromeos_strings_gu.xtb
index dc592056..073d0f9 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_gu.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_gu.xtb
@@ -948,7 +948,6 @@
 <translation id="9034924485347205037">Linux ફાઇલો</translation>
 <translation id="9035012421917565900">આઇટમને પાછી '<ph name="DESTINATION_NAME" />'માં ખસેડી શકાતી નથી, તેથી તમે આ ક્રિયાનો છેલ્લો ફેરફાર રદ કરી શકશો નહીંં.</translation>
 <translation id="9035689366572880647">વર્તમાન પિન દાખલ કરો</translation>
-<translation id="9037777873893411148">*સંસ્થાનો સ્ટોરેજ ભરાઈ ગયો છે</translation>
 <translation id="9038620279323455325">"<ph name="FILE_NAME" />" નામની ફાઇલ પહેલાંથી અસ્તિત્વમાં છે. કૃપા કરીને કોઈ અલગ નામ પસંદ કરો.</translation>
 <translation id="9046895021617826162">કનેક્ટ કરવું નિષ્ફળ</translation>
 <translation id="9065512565307033593">જો તમે ચકાસણી કરવામાં નિષ્ફળ રહ્યાં, તો તમારા નેટવર્કનો ઍક્સેસ બંધ થઈ જશે.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_hi.xtb b/ui/chromeos/translations/ui_chromeos_strings_hi.xtb
index 001c7b9..6ad1608b 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_hi.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_hi.xtb
@@ -950,7 +950,6 @@
 <translation id="9034924485347205037">Linux की फ़ाइलें</translation>
 <translation id="9035012421917565900">ये आइटम '<ph name="DESTINATION_NAME" />' में वापस नहीं ले जाए जा सकते हैं, इसलिए आप इस कार्रवाई को पहले जैसा नहीं कर सकेंगे.</translation>
 <translation id="9035689366572880647">मौजूदा पिन डालें</translation>
-<translation id="9037777873893411148">*संगठन के डिवाइस का स्टोरेज भर गया है</translation>
 <translation id="9038620279323455325">"<ph name="FILE_NAME" />" नाम की फ़ाइल पहले से मौजूद है. कृपया कोई दूसरा नाम चुनें.</translation>
 <translation id="9046895021617826162">कनेक्ट करना विफल</translation>
 <translation id="9065512565307033593">अगर आप पुष्टि नहीं कर पाते, तो आपके नेटवर्क का ऐक्सेस बंद कर दिया जाएगा.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_hr.xtb b/ui/chromeos/translations/ui_chromeos_strings_hr.xtb
index b73d399..1c48afc 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_hr.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_hr.xtb
@@ -950,7 +950,6 @@
 <translation id="9034924485347205037">Linux datoteke</translation>
 <translation id="9035012421917565900">Te se stavke ne mogu vratiti na odredište "<ph name="DESTINATION_NAME" />", tako da nećete moći poništiti tu radnju.</translation>
 <translation id="9035689366572880647">Unesite trenutačni PIN</translation>
-<translation id="9037777873893411148">*Pohrana organizacije je puna</translation>
 <translation id="9038620279323455325">Datoteka s nazivom "<ph name="FILE_NAME" />" već postoji. Odaberite drugi naziv.</translation>
 <translation id="9046895021617826162">Neuspjelo povezivanje</translation>
 <translation id="9065512565307033593">Ako potvrda nije bila uspješna, nećete imati pristup mreži.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_hu.xtb b/ui/chromeos/translations/ui_chromeos_strings_hu.xtb
index 29443bd5..0650cca 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_hu.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_hu.xtb
@@ -950,7 +950,6 @@
 <translation id="9034924485347205037">Linux-fájlok</translation>
 <translation id="9035012421917565900">Az elemek nem helyezhetők vissza ide: „<ph name="DESTINATION_NAME" />”. Nem tudja visszavonni a műveletet.</translation>
 <translation id="9035689366572880647">Adja meg a jelenlegi PIN-kódot</translation>
-<translation id="9037777873893411148">* Megtelt a szervezet tárhelye</translation>
 <translation id="9038620279323455325">Már van „<ph name="FILE_NAME" />” nevű fájl. Válasszon másik nevet.</translation>
 <translation id="9046895021617826162">Csatlakozás sikertelen</translation>
 <translation id="9065512565307033593">Ha nem sikerül az igazolás, a hálózati hozzáférés le lesz tiltva.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_hy.xtb b/ui/chromeos/translations/ui_chromeos_strings_hy.xtb
index cb8d5fe..0077de9 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_hy.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_hy.xtb
@@ -949,7 +949,6 @@
 <translation id="9034924485347205037">Լինուքսի ֆայլեր</translation>
 <translation id="9035012421917565900">Տարրերը հնարավոր չէ տեղափոխել «<ph name="DESTINATION_NAME" />», այդ պատճառով այս գործողությունը չեք կարող հետարկել։</translation>
 <translation id="9035689366572880647">Մուտքագրեք ընթացիկ PIN կոդը</translation>
-<translation id="9037777873893411148">*Կազմակերպության տարածքը լցված է</translation>
 <translation id="9038620279323455325">«<ph name="FILE_NAME" />» անունով ֆայլ արդեն գոյություն ունի: Ընտրեք այլ անուն:</translation>
 <translation id="9046895021617826162">Չհաջողվեց միանալ</translation>
 <translation id="9065512565307033593">Եթե չկարողանաք հաստատել, ցանցն անհասանելի կդառնա։</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_id.xtb b/ui/chromeos/translations/ui_chromeos_strings_id.xtb
index f35dbd2..2e5ba9b 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_id.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_id.xtb
@@ -950,7 +950,6 @@
 <translation id="9034924485347205037">File Linux</translation>
 <translation id="9035012421917565900">Item tidak dapat dipindahkan kembali ke '<ph name="DESTINATION_NAME" />', jadi tindakan ini tidak dapat diurungkan.</translation>
 <translation id="9035689366572880647">Masukkan PIN saat ini</translation>
-<translation id="9037777873893411148">*Penyimpanan organisasi penuh</translation>
 <translation id="9038620279323455325">File bernama "<ph name="FILE_NAME" />" sudah ada. Harap pilih nama lain.</translation>
 <translation id="9046895021617826162">Gagal menyambung</translation>
 <translation id="9065512565307033593">Jika gagal memverifikasi, akses jaringan Anda akan dinonaktifkan.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_is.xtb b/ui/chromeos/translations/ui_chromeos_strings_is.xtb
index d5cbae4..7472595 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_is.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_is.xtb
@@ -949,7 +949,6 @@
 <translation id="9034924485347205037">Linux-skrár</translation>
 <translation id="9035012421917565900">Ekki er hægt að færa atriðin aftur í „<ph name="DESTINATION_NAME" />“, þannig að þú verður ófær um að afturkalla þessa aðgerð.</translation>
 <translation id="9035689366572880647">Sláðu inn núverandi PIN-númer</translation>
-<translation id="9037777873893411148">*Geymslurými fyrirtækisins er fullt</translation>
 <translation id="9038620279323455325">Skrá með heitið „<ph name="FILE_NAME" />“ er þegar til staðar. Veldu annað heiti.</translation>
 <translation id="9046895021617826162">Tenging mistókst</translation>
 <translation id="9065512565307033593">Ef þú staðfestir ekki verður slökkt á netaðganginum þínum.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_it.xtb b/ui/chromeos/translations/ui_chromeos_strings_it.xtb
index c96380e..2f7c2b5 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_it.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_it.xtb
@@ -949,7 +949,6 @@
 <translation id="9034924485347205037">File Linux</translation>
 <translation id="9035012421917565900">Non è possibile spostare di nuovo gli elementi in "<ph name="DESTINATION_NAME" />", quindi non potrai annullare questa azione.</translation>
 <translation id="9035689366572880647">Inserisci il PIN attuale</translation>
-<translation id="9037777873893411148">* Spazio di archiviazione dell'organizzazione esaurito</translation>
 <translation id="9038620279323455325">Esiste già un file chiamato "<ph name="FILE_NAME" />". Scegli un altro nome.</translation>
 <translation id="9046895021617826162">Connessione non riuscita</translation>
 <translation id="9065512565307033593">Se non superi la verifica, l'accesso alla rete verrà disattivato.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_iw.xtb b/ui/chromeos/translations/ui_chromeos_strings_iw.xtb
index 1d3aaf1a..a245383 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_iw.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_iw.xtb
@@ -951,7 +951,6 @@
 <translation id="9034924485347205037">‏קובצי Linux</translation>
 <translation id="9035012421917565900">לא ניתן להחזיר את הפריטים אל '<ph name="DESTINATION_NAME" />', ולא ניתן לבטל את הפעולה.</translation>
 <translation id="9035689366572880647">יש להזין את קוד האימות הנוכחי</translation>
-<translation id="9037777873893411148">*נפח האחסון של הארגון מלא</translation>
 <translation id="9038620279323455325">הקובץ שנקרא "<ph name="FILE_NAME" />" כבר קיים. יש לבחור שם אחר.</translation>
 <translation id="9046895021617826162">החיבור נכשל</translation>
 <translation id="9065512565307033593">אם האימות ייכשל, הגישה שלך לרשת תושבת.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ja.xtb b/ui/chromeos/translations/ui_chromeos_strings_ja.xtb
index 9cc6d19..5c08e74 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ja.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ja.xtb
@@ -950,7 +950,6 @@
 <translation id="9034924485347205037">Linux ファイル</translation>
 <translation id="9035012421917565900">この操作は元に戻せません(これらのアイテムを「<ph name="DESTINATION_NAME" />」に戻すことはできません)。</translation>
 <translation id="9035689366572880647">現在の PIN を入力</translation>
-<translation id="9037777873893411148">*組織のストレージの空き容量がなくなりました</translation>
 <translation id="9038620279323455325">「<ph name="FILE_NAME" />」という名前のファイルはすでに存在します。別の名前を選択してください。</translation>
 <translation id="9046895021617826162">接続に失敗しました</translation>
 <translation id="9065512565307033593">確認に失敗した場合、ネットワーク アクセスは無効になります。</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ka.xtb b/ui/chromeos/translations/ui_chromeos_strings_ka.xtb
index 4ad3e60..971d651 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ka.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ka.xtb
@@ -949,7 +949,6 @@
 <translation id="9034924485347205037">Linux ფაილები</translation>
 <translation id="9035012421917565900">ერთეულები „<ph name="DESTINATION_NAME" />“-ში ვეღარ დაბრუნდება, რაც ნიშნავს, რომ ამ მოქმედებას ვერ გააუქმებთ.</translation>
 <translation id="9035689366572880647">შეიყვანეთ ამჟამინდელი PIN-კოდი</translation>
-<translation id="9037777873893411148">*ორგ. მეხსიერება სავსეა</translation>
 <translation id="9038620279323455325">ფაილი სახელად „<ph name="FILE_NAME" />“ უკვე არსებობს. გთხოვთ, აირჩიოთ სხვა სახელი.</translation>
 <translation id="9046895021617826162">დაკავშირება ვერ მოხერხდა</translation>
 <translation id="9065512565307033593">თუ დადასტურებას ვერ მოახერხებთ, ქსელზე წვდომა გაითიშება.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_kk.xtb b/ui/chromeos/translations/ui_chromeos_strings_kk.xtb
index 74451aaa..496602c6 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_kk.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_kk.xtb
@@ -949,7 +949,6 @@
 <translation id="9034924485347205037">Linux файлдары</translation>
 <translation id="9035012421917565900">Файлдар "<ph name="DESTINATION_NAME" />" қалтасына қайта көшірілмейді, сондықтан бұл қадамды кері қайтару мүмкін емес.</translation>
 <translation id="9035689366572880647">Ағымдағы PIN кодын енгізіңіз</translation>
-<translation id="9037777873893411148">* Ұйым жады толы.</translation>
 <translation id="9038620279323455325">"<ph name="FILE_NAME" />" файлы бұрыннан бар. Басқа атау таңдаңыз.</translation>
 <translation id="9046895021617826162">Қосылмады</translation>
 <translation id="9065512565307033593">Растай алмасаңыз, желіге кіру мүмкіндігі өшіріледі.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_km.xtb b/ui/chromeos/translations/ui_chromeos_strings_km.xtb
index b4697f3..0c6d6ee7b 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_km.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_km.xtb
@@ -949,7 +949,6 @@
 <translation id="9034924485347205037">ឯកសារ Linux</translation>
 <translation id="9035012421917565900">ធាតុ​ទាំងនេះ​មិនអាច​ផ្លាស់ទី​ទៅក្នុង '<ph name="DESTINATION_NAME" />' បានទេ ដូច្នេះ​អ្នកនឹង​មិនអាច​ត្រឡប់​សកម្មភាព​នេះវិញ​បានទេ។</translation>
 <translation id="9035689366572880647">បញ្ចូលកូដ PIN បច្ចុប្បន្ន</translation>
-<translation id="9037777873893411148">*ទំហំ​ផ្ទុក​ស្ថាប័ន​ពេញ​ហើយ</translation>
 <translation id="9038620279323455325">ឯកសារដែល​ដាក់ឈ្មោះ "<ph name="FILE_NAME" />" មានរួចហើយ។ សូមជ្រើសរើស​ឈ្មោះផ្សេង។</translation>
 <translation id="9046895021617826162">ការភ្ជាប់បានបរាជ័យ</translation>
 <translation id="9065512565307033593">ប្រសិនបើអ្នក​មិនអាចផ្ទៀងផ្ទាត់​បានទេ សិទ្ធិចូលប្រើ​បណ្ដាញ​របស់អ្នក​នឹងត្រូវបានបិទ។</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_kn.xtb b/ui/chromeos/translations/ui_chromeos_strings_kn.xtb
index 035a5449..f15b6bb2 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_kn.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_kn.xtb
@@ -938,7 +938,6 @@
 <translation id="9034924485347205037">Linux ಫೈಲ್‌ಗಳು</translation>
 <translation id="9035012421917565900">ಐಟಂಗಳನ್ನು '<ph name="DESTINATION_NAME" />' ಗೆ ಮರಳಿ ಹಿಂತಿರುಗಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ, ಆದ್ದರಿಂದ ನಿಮಗೆ ಈ ಕ್ರಿಯೆಯನ್ನು ರದ್ದುಪಡಿಸಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ.</translation>
 <translation id="9035689366572880647">ಪ್ರಸ್ತುತ ಪಿನ್ ನಮೂದಿಸಿ</translation>
-<translation id="9037777873893411148">*ಸಂಸ್ಥೆಯ ಸಂಗ್ರಹಣೆ ಭರ್ತಿಯಾಗಿದೆ</translation>
 <translation id="9038620279323455325">"<ph name="FILE_NAME" />" ಹೆಸರಿನ ಫೈಲ್ ಈಗಾಗಲೇ ಇದೆ. ಬೇರೊಂದು ಹೆಸರನ್ನು ಆರಿಸಿ.</translation>
 <translation id="9046895021617826162">ಸಂಪರ್ಕವು ವಿಫಲವಾಗಿದೆ</translation>
 <translation id="9065512565307033593">ನೀವು ಪರಿಶೀಲಿಸಲು ವಿಫಲವಾದರೆ, ನಿಮ್ಮ ನೆಟ್‌ವರ್ಕ್ ಪ್ರವೇಶವನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗುತ್ತದೆ.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ko.xtb b/ui/chromeos/translations/ui_chromeos_strings_ko.xtb
index 20de799..ffa1820b 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ko.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ko.xtb
@@ -950,7 +950,6 @@
 <translation id="9034924485347205037">Linux 파일</translation>
 <translation id="9035012421917565900">항목을 다시 '<ph name="DESTINATION_NAME" />'(으)로 이동할 수 없으므로 이 작업을 실행취소할 수 없습니다.</translation>
 <translation id="9035689366572880647">현재 PIN 입력</translation>
-<translation id="9037777873893411148">*조직 저장용량이 가득 참</translation>
 <translation id="9038620279323455325">'<ph name="FILE_NAME" />' 파일이 이미 존재합니다. 다른 이름을 선택하세요.</translation>
 <translation id="9046895021617826162">연결 실패</translation>
 <translation id="9065512565307033593">확인하지 못하면 네트워크 액세스가 사용 중지됩니다.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ky.xtb b/ui/chromeos/translations/ui_chromeos_strings_ky.xtb
index d15657ce..ffbd75c 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ky.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ky.xtb
@@ -949,7 +949,6 @@
 <translation id="9034924485347205037">Linux файлдары</translation>
 <translation id="9035012421917565900">Бул файлдарды кайра "<ph name="DESTINATION_NAME" />" дискине жылдырууга мүмкүн болбой калат, андыктан бул аракетти кайтара албай каласыз.</translation>
 <translation id="9035689366572880647">Учурдагы PIN кодду киргизиңиз</translation>
-<translation id="9037777873893411148">*Уюмдун сактагычы толуп калды</translation>
 <translation id="9038620279323455325">"<ph name="FILE_NAME" />" деген файл мурунтан эле бар. Файлды башкача атаңыз.</translation>
 <translation id="9046895021617826162">Туташпай калды</translation>
 <translation id="9065512565307033593">Эгер текшерүүдөн өтпөсөңүз, тармакка кирүү мүмкүнчүлүгү өчүрүлөт.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_lo.xtb b/ui/chromeos/translations/ui_chromeos_strings_lo.xtb
index 9800db5..0cc2b136 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_lo.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_lo.xtb
@@ -949,7 +949,6 @@
 <translation id="9034924485347205037">ໄຟລ໌ Linux</translation>
 <translation id="9035012421917565900">ບໍ່ສາມາດຍ້າຍລາຍການນີ້ກັບຄືນຫາ '<ph name="DESTINATION_NAME" />' ໄດ້, ສະນັ້ນ ທ່ານຈະບໍ່ສາມາດລົບລ້າງການກະທຳນີ້ໄດ້.</translation>
 <translation id="9035689366572880647">ລະບຸ PIN ປັດຈຸບັນ</translation>
-<translation id="9037777873893411148">*ບ່ອນຈັດເກັບຂໍ້ມູນອົງກອນເຕັມແລ້ວ</translation>
 <translation id="9038620279323455325">ມີໄຟລ໌ຊື່ "<ph name="FILE_NAME" />" ຢູ່ແລ້ວ. ກະລຸນາເລືອກຊື່ໄຟລ໌ອື່ນ.</translation>
 <translation id="9046895021617826162">ເຊື່ອມຕໍ່ບໍ່ສໍາເລັດ</translation>
 <translation id="9065512565307033593">ຖ້າທ່ານຢັ້ງຢືນບໍ່ສຳເລັດ, ລະບົບຈະປິດການນຳໃຊ້ສິດເຂົ້າເຖິງເຄືອຂ່າຍຂອງທ່ານ.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_lt.xtb b/ui/chromeos/translations/ui_chromeos_strings_lt.xtb
index b3361e1..0868ccb9 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_lt.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_lt.xtb
@@ -950,7 +950,6 @@
 <translation id="9034924485347205037">„Linux“ failai</translation>
 <translation id="9035012421917565900">Elementų negalima perkelti atgal į „<ph name="DESTINATION_NAME" />“, todėl negalėsite anuliuoti šio veiksmo.</translation>
 <translation id="9035689366572880647">Įveskite dabartinį PIN kodą</translation>
-<translation id="9037777873893411148">* Organizacijos saugykla pilna</translation>
 <translation id="9038620279323455325">Failas pavadinimu „<ph name="FILE_NAME" />“ jau yra. Pasirinkite kitą pavadinimą.</translation>
 <translation id="9046895021617826162">Nepavyko prisijungti</translation>
 <translation id="9065512565307033593">Jei jums nepavyks patvirtinti, tinklo prieiga bus išjungta.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_lv.xtb b/ui/chromeos/translations/ui_chromeos_strings_lv.xtb
index 77d5f16..2cf88ee 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_lv.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_lv.xtb
@@ -950,7 +950,6 @@
 <translation id="9034924485347205037">Linux faili</translation>
 <translation id="9035012421917565900">Vienumus nevar pārvietot atpakaļ uz “<ph name="DESTINATION_NAME" />”, tādēļ nevarēsiet atsaukt šo darbību.</translation>
 <translation id="9035689366572880647">Ievadiet pašreizējo PIN</translation>
-<translation id="9037777873893411148">Org. krātuve ir pilna</translation>
 <translation id="9038620279323455325">Fails ar nosaukumu “<ph name="FILE_NAME" />” jau pastāv. Lūdzu, izvēlieties citu nosaukumu.</translation>
 <translation id="9046895021617826162">Savienojums neizdevās</translation>
 <translation id="9065512565307033593">Ja verifikācija neizdosies, jūsu piekļuve tīklam tiks atspējota.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_mk.xtb b/ui/chromeos/translations/ui_chromeos_strings_mk.xtb
index aa9d4dc..f472f12 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_mk.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_mk.xtb
@@ -949,7 +949,6 @@
 <translation id="9034924485347205037">Датотеки на Linux</translation>
 <translation id="9035012421917565900">Ставките не може да се преместат назад во „<ph name="DESTINATION_NAME" />“, па нема да може да го вратите дејствово.</translation>
 <translation id="9035689366572880647">Внесете го тековниот PIN-код</translation>
-<translation id="9037777873893411148">*Капацитетот на организацијата е полн</translation>
 <translation id="9038620279323455325">Веќе постои датотека со име „<ph name="FILE_NAME" />“. Одберете друго име.</translation>
 <translation id="9046895021617826162">Поврзувањето не успеа</translation>
 <translation id="9065512565307033593">Ако не успеете да потврдите, пристапот до мрежата ќе ви биде оневозможен.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ml.xtb b/ui/chromeos/translations/ui_chromeos_strings_ml.xtb
index 198f15f..64f0eb44 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ml.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ml.xtb
@@ -950,7 +950,6 @@
 <translation id="9034924485347205037">Linux ഫയലുകൾ</translation>
 <translation id="9035012421917565900">ഇനങ്ങൾ '<ph name="DESTINATION_NAME" />' എന്നതിലേക്ക് തിരികെ നീക്കാൻ കഴിയാത്തതിനാൽ, ഈ പ്രവൃത്തി നിങ്ങൾക്ക് പഴയപടിയാക്കാനാവില്ല.</translation>
 <translation id="9035689366572880647">നിലവിലെ പിൻ നൽകുക</translation>
-<translation id="9037777873893411148">*സ്ഥാപനത്തിന്റെ സ്‌റ്റോറേജ് നിറഞ്ഞു</translation>
 <translation id="9038620279323455325">"<ph name="FILE_NAME" />" എന്ന പേരുള്ള ഫയൽ മുമ്പേ നിലവിലുണ്ട്. മറ്റൊരു പേര് തിരഞ്ഞെടുക്കുക.</translation>
 <translation id="9046895021617826162">ബന്ധിപ്പിക്കല്‍ പരാജയപ്പെട്ടു</translation>
 <translation id="9065512565307033593">പരിശോധിച്ചുറപ്പിക്കാനായില്ലെങ്കിൽ, നിങ്ങളുടെ നെറ്റ്‌വർക്ക് ആക്‌സസ് പ്രവർത്തനരഹിതമാക്കും.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_mn.xtb b/ui/chromeos/translations/ui_chromeos_strings_mn.xtb
index 4dd65b8b..d260728 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_mn.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_mn.xtb
@@ -947,7 +947,6 @@
 <translation id="9034924485347205037">Linux-н файл</translation>
 <translation id="9035012421917565900">Зүйлийг буцааж '<ph name="DESTINATION_NAME" />' руу зөөх боломжгүй тул та энэ үйлдлийг буцаах боломжгүй.</translation>
 <translation id="9035689366572880647">Одоогийн ПИН-г оруулах</translation>
-<translation id="9037777873893411148">*Байгууллагын хадгалах сан дүүрсэн</translation>
 <translation id="9038620279323455325">"<ph name="FILE_NAME" />" нэртэй файл аль хэдийн байна. Өөр нэр сонгоно уу.</translation>
 <translation id="9046895021617826162">Холболт амжилтгүй боллоо</translation>
 <translation id="9065512565307033593">Хэрэв та баталгаажуулж чадаагүй бол таны сүлжээний хандалтыг идэвхгүй болгоно.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_mr.xtb b/ui/chromeos/translations/ui_chromeos_strings_mr.xtb
index e10af862..79d6b8e 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_mr.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_mr.xtb
@@ -950,7 +950,6 @@
 <translation id="9034924485347205037">Linux फाइल</translation>
 <translation id="9035012421917565900">हे आयटम '<ph name="DESTINATION_NAME" />' मध्ये परत हलवणे शक्य नाही, म्हणून ही क्रिया पहिल्यासारखी केली जाणार नाही.</translation>
 <translation id="9035689366572880647">सध्याचा पिन एंटर करा</translation>
-<translation id="9037777873893411148">*संस्थेचे स्टोरेज पूर्ण भरले आहे</translation>
 <translation id="9038620279323455325">"<ph name="FILE_NAME" />" नावाची फाइल आधीच अस्तित्वात आहे. कृपया वेगळे नाव निवडा.</translation>
 <translation id="9046895021617826162">कनेक्ट करण्यात अयशस्वी</translation>
 <translation id="9065512565307033593">तुम्हाला पडताळणी करता न आल्यास, तुमचा नेटवर्क अ‍ॅक्सेस बंद केला जाईल.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ms.xtb b/ui/chromeos/translations/ui_chromeos_strings_ms.xtb
index 78a9b358..fa97c02 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ms.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ms.xtb
@@ -950,7 +950,6 @@
 <translation id="9034924485347205037">Fail Linux</translation>
 <translation id="9035012421917565900">Items tidak boleh dialihkan kembali ke '<ph name="DESTINATION_NAME" />', oleh itu, anda tidak akan dapat membuat asal tindakan ini.</translation>
 <translation id="9035689366572880647">Masukkan PIN semasa</translation>
-<translation id="9037777873893411148">*Storan organisasi penuh</translation>
 <translation id="9038620279323455325">Fail bernama "<ph name="FILE_NAME" />" sudah wujud. Sila pilih nama lain.</translation>
 <translation id="9046895021617826162">Gagal disambungkan</translation>
 <translation id="9065512565307033593">Jika anda gagal mengesahkan identiti anda, akses rangkaian anda akan dilumpuhkan.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_my.xtb b/ui/chromeos/translations/ui_chromeos_strings_my.xtb
index 32b4595..3a8fee9 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_my.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_my.xtb
@@ -949,7 +949,6 @@
 <translation id="9034924485347205037">Linux ဖိုင်များ</translation>
 <translation id="9035012421917565900">၎င်းတို့ကို '<ph name="DESTINATION_NAME" />' သို့ ပြန်ရွှေ့၍မရသည့်အတွက် ဤလုပ်ဆောင်ချက်ကို တစ်ဆင့်နောက်ပြန်၍ ရမည်မဟုတ်ပါ။</translation>
 <translation id="9035689366572880647">လက်ရှိပင်နံပါတ် ထည့်ပါ</translation>
-<translation id="9037777873893411148">*အဖွဲ့အစည်းသိုလှောင်ခန်း ပြည့်ပါပြီ</translation>
 <translation id="9038620279323455325">"<ph name="FILE_NAME" />" အမည်ဖြင့်ဖိုင် ရှိပြီးဖြစ်သည်။ အခြားအမည်ရွေးပါ။</translation>
 <translation id="9046895021617826162">ကွန်ရက်ချိတ်ဆက်မှု မအောင်မြင်ပါ</translation>
 <translation id="9065512565307033593">အတည်ပြု၍မရပါက သင့်ကွန်ရက်သုံးခွင့်ကို ပိတ်လိုက်ပါမည်။</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ne.xtb b/ui/chromeos/translations/ui_chromeos_strings_ne.xtb
index 9787687..2d07168 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ne.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ne.xtb
@@ -949,7 +949,6 @@
 <translation id="9034924485347205037">Linux का फाइलहरू</translation>
 <translation id="9035012421917565900">यी वस्तुहरूलाई फेरि '<ph name="DESTINATION_NAME" />' मा सार्न सकिँदैन, त्यसैले तपाईं यस कार्यलाई अन्डू गर्न सक्नुहुनेछैन।</translation>
 <translation id="9035689366572880647">हालको PIN हाल्नुहोस्</translation>
-<translation id="9037777873893411148">*सङ्गठनको भण्डारण भरिएको छ</translation>
 <translation id="9038620279323455325">"<ph name="FILE_NAME" />" नाम गरेको फाइल पहिलेदेखि नै अवस्थित छ। कृपया कुनै फरक नाम चयन गर्नुहोस्।</translation>
 <translation id="9046895021617826162">जडान असफल भयो,</translation>
 <translation id="9065512565307033593">तपाईंले पुष्टि गर्न सक्नुभएन भने तपाईं अब नेटवर्क प्रयोग गर्न पाउनु हुने छैन।</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_nl.xtb b/ui/chromeos/translations/ui_chromeos_strings_nl.xtb
index 28fda2ed..d71be19 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_nl.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_nl.xtb
@@ -951,7 +951,6 @@
 <translation id="9034924485347205037">Linux-bestanden</translation>
 <translation id="9035012421917565900">De items kunnen niet worden teruggezet naar '<ph name="DESTINATION_NAME" />', dus je kunt deze actie niet ongedaan maken.</translation>
 <translation id="9035689366572880647">Geef je huidige pincode op</translation>
-<translation id="9037777873893411148">*Opslag van organisatie is vol</translation>
 <translation id="9038620279323455325">Er bestaat al een bestand met de naam '<ph name="FILE_NAME" />'. Kies een andere naam.</translation>
 <translation id="9046895021617826162">Verbinding mislukt</translation>
 <translation id="9065512565307033593">Als de verificatie mislukt, wordt je netwerktoegang ingetrokken.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_no.xtb b/ui/chromeos/translations/ui_chromeos_strings_no.xtb
index bbb35f1f..7e5d25c 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_no.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_no.xtb
@@ -950,7 +950,6 @@
 <translation id="9034924485347205037">Linux-filer</translation>
 <translation id="9035012421917565900">Disse elementene kan ikke flyttes tilbake til «<ph name="DESTINATION_NAME" />», så du kan ikke angre denne handlingen.</translation>
 <translation id="9035689366572880647">Skriv inn gjeldende PIN-kode</translation>
-<translation id="9037777873893411148">*Organisasjonens lagringsplass er oppbrukt</translation>
 <translation id="9038620279323455325">Filnavnet «<ph name="FILE_NAME" />» finnes allerede. Velg et annet navn.</translation>
 <translation id="9046895021617826162">Tilkoblingen mislyktes</translation>
 <translation id="9065512565307033593">Hvis du ikke verifiserer SIM-kortet, blir nettverkstilgangen din slått av.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_or.xtb b/ui/chromeos/translations/ui_chromeos_strings_or.xtb
index 004e385a..38196446 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_or.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_or.xtb
@@ -944,7 +944,6 @@
 <translation id="9034924485347205037">Linux ଫାଇଲ୍‍ଗୁଡ଼ିକ</translation>
 <translation id="9035012421917565900">ଆଇଟମ୍‌କୁ <ph name="DESTINATION_NAME" />'କୁ ଫେରାଇ ନିଆଯାଇପାରିଲା ନାହିଁ, ତେଣୁ ଏହି କାର୍ଯ୍ୟକୁ ଆପଣ ପୂର୍ବବତ୍‍ କରିପାରିବେ ନାହିଁ।</translation>
 <translation id="9035689366572880647">ବର୍ତ୍ତମାନର PIN ଲେଖନ୍ତୁ</translation>
-<translation id="9037777873893411148">*ସଂସ୍ଥାର ଷ୍ଟୋରେଜ ପୂର୍ଣ୍ଣ ହୋଇଯାଇଛି</translation>
 <translation id="9038620279323455325">"<ph name="FILE_NAME" />" ଫାଇଲ୍ ନାମ ପୂର୍ବରୁ ବିଦ୍ୟମାନ ଅଛି। ଏକ ଭିନ୍ନ ନାମ ବ୍ୟବହାର କରନ୍ତୁ।</translation>
 <translation id="9046895021617826162">ସଂଯୋଗ ବିଫଳ ହେଲା</translation>
 <translation id="9065512565307033593">ଯଦି ଆପଣ ଯାଞ୍ଚ କରିବାକୁ ବିଫଳ ହୁଅନ୍ତି, ତେବେ ଆପଣଙ୍କ ନେଟୱାର୍କ ଆକ୍ସେସକୁ ଅକ୍ଷମ କରିଦିଆଯିବ।</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_pa.xtb b/ui/chromeos/translations/ui_chromeos_strings_pa.xtb
index 47e14ecb..2f4bf8de 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_pa.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_pa.xtb
@@ -949,7 +949,6 @@
 <translation id="9034924485347205037">Linux ਫ਼ਾਈਲਾਂ</translation>
 <translation id="9035012421917565900">ਆਈਟਮਾਂ ਨੂੰ '<ph name="DESTINATION_NAME" />' ਵਿੱਚ ਵਾਪਸ ਤਬਦੀਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ, ਇਸ ਕਰਕੇ ਤੁਸੀਂ ਇਸ ਕਾਰਵਾਈ ਨੂੰ ਅਣਕੀਤਾ ਕਰਨ ਦੇ ਯੋਗ ਨਹੀਂ ਹੋਵੋਗੇ।</translation>
 <translation id="9035689366572880647">ਮੌਜੂਦਾ ਪਿੰਨ ਦਾਖਲ ਕਰੋ</translation>
-<translation id="9037777873893411148">*ਸੰਸਥਾ ਦੀ ਸਟੋਰੇਜ ਭਰ ਗਈ ਹੈ</translation>
 <translation id="9038620279323455325">"<ph name="FILE_NAME" />" ਨਾਮਕ ਫ਼ਾਈਲ ਪਹਿਲਾਂ ਹੀ ਮੌਜੂਦ ਹੈ। ਕਿਰਪਾ ਕਰਕੇ ਕੋਈ ਵੱਖਰਾ ਨਾਮ ਚੁਣੋ।</translation>
 <translation id="9046895021617826162">ਕਨੈਕਟ ਅਸਫ਼ਲ ਹੋ ਗਿਆ</translation>
 <translation id="9065512565307033593">ਜੇ ਤੁਸੀਂ ਪੁਸ਼ਟੀ ਕਰਨ ਵਿੱਚ ਅਸਫਲ ਰਹਿੰਦੇ ਹੋ, ਤਾਂ ਤੁਹਾਡੀ ਨੈੱਟਵਰਕ ਪਹੁੰਚ ਨੂੰ ਬੰਦ ਕਰ ਦਿੱਤਾ ਜਾਵੇਗਾ।</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_pl.xtb b/ui/chromeos/translations/ui_chromeos_strings_pl.xtb
index 1918bde..c2277d5 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_pl.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_pl.xtb
@@ -950,7 +950,6 @@
 <translation id="9034924485347205037">Pliki Linuksa</translation>
 <translation id="9035012421917565900">Nie można przenieść elementów z powrotem do: „<ph name="DESTINATION_NAME" />”, więc tej czynności nie da się cofnąć.</translation>
 <translation id="9035689366572880647">Podaj bieżący kod PIN</translation>
-<translation id="9037777873893411148">* Brak miejsca na dane w organizacji</translation>
 <translation id="9038620279323455325">Istnieje już plik o nazwie „<ph name="FILE_NAME" />”. Wybierz inną nazwę.</translation>
 <translation id="9046895021617826162">Łączenie nie powiodło się</translation>
 <translation id="9065512565307033593">Jeśli nie uda Ci się dokonać weryfikacji, dostęp do sieci zostanie wyłączony.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_pt-BR.xtb b/ui/chromeos/translations/ui_chromeos_strings_pt-BR.xtb
index a062c61..e6753f9 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_pt-BR.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_pt-BR.xtb
@@ -950,7 +950,6 @@
 <translation id="9034924485347205037">Arquivos do Linux</translation>
 <translation id="9035012421917565900">Os itens não poderão retornar para '<ph name="DESTINATION_NAME" />', portanto, você não poderá desfazer esta ação.</translation>
 <translation id="9035689366572880647">Digite o PIN atual</translation>
-<translation id="9037777873893411148">*Armazenamento da organização cheio</translation>
 <translation id="9038620279323455325">O arquivo chamado "<ph name="FILE_NAME" />" já existe. Escolha outro nome.</translation>
 <translation id="9046895021617826162">Falha na conexão</translation>
 <translation id="9065512565307033593">Se você não conseguir fazer a verificação, o acesso à rede será desativado.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_pt-PT.xtb b/ui/chromeos/translations/ui_chromeos_strings_pt-PT.xtb
index 9813ea79..9dae773 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_pt-PT.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_pt-PT.xtb
@@ -950,7 +950,6 @@
 <translation id="9034924485347205037">Ficheiros Linux</translation>
 <translation id="9035012421917565900">Não é possível mover os itens novamente para "<ph name="DESTINATION_NAME" />", pelo que não pode anular esta ação.</translation>
 <translation id="9035689366572880647">Introduza o PIN atual</translation>
-<translation id="9037777873893411148">* Armazenamento da organização cheio</translation>
 <translation id="9038620279323455325">O ficheiro com o nome "<ph name="FILE_NAME" />" já existe. Escolha um nome diferente.</translation>
 <translation id="9046895021617826162">A ligação falhou</translation>
 <translation id="9065512565307033593">Se não validar, o seu acesso à rede será desativado.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ro.xtb b/ui/chromeos/translations/ui_chromeos_strings_ro.xtb
index 808f938..3c0c36d 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ro.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ro.xtb
@@ -950,7 +950,6 @@
 <translation id="9034924485347205037">Fișiere Linux</translation>
 <translation id="9035012421917565900">Articolele nu pot fi mutate înapoi în „<ph name="DESTINATION_NAME" />”, prin urmare, nu vei putea să anulezi această acțiune.</translation>
 <translation id="9035689366572880647">Introdu codul PIN actual</translation>
-<translation id="9037777873893411148">*Spațiul de stocare al organizației este plin</translation>
 <translation id="9038620279323455325">Fișierul cu numele „<ph name="FILE_NAME" />” există deja. Alege un alt nume.</translation>
 <translation id="9046895021617826162">Conectare nereușită</translation>
 <translation id="9065512565307033593">Dacă nu confirmi codul, accesul tău la rețea va fi oprit.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ru.xtb b/ui/chromeos/translations/ui_chromeos_strings_ru.xtb
index 73e8e0f14..bec90e84 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ru.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ru.xtb
@@ -950,7 +950,6 @@
 <translation id="9034924485347205037">Файлы Linux</translation>
 <translation id="9035012421917565900">Объекты нельзя переместить обратно на общий диск "<ph name="DESTINATION_NAME" />", поэтому вы не сможете отменить это действие.</translation>
 <translation id="9035689366572880647">Введите текущий PIN-код</translation>
-<translation id="9037777873893411148">Хранилище организации заполнено</translation>
 <translation id="9038620279323455325">Файл "<ph name="FILE_NAME" />" уже существует. Выберите другое название.</translation>
 <translation id="9046895021617826162">Сбой подключения</translation>
 <translation id="9065512565307033593">Если не пройти проверку, доступ к сети будет отключен.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_si.xtb b/ui/chromeos/translations/ui_chromeos_strings_si.xtb
index 2c8220f..d29129f 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_si.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_si.xtb
@@ -949,7 +949,6 @@
 <translation id="9034924485347205037">Linux ගොනු</translation>
 <translation id="9035012421917565900">අයිතම නැවත '<ph name="DESTINATION_NAME" />' වෙත ගෙන යාමට නොහැකිය, එබැවින් ඔබට මෙම ක්‍රියාව පසුගමනය කළ නොහැකි වනු ඇත.</translation>
 <translation id="9035689366572880647">වත්මන් PIN ඇතුළු කරන්න</translation>
-<translation id="9037777873893411148">*සංවිධානයේ ආචයනය පිරී ඇත</translation>
 <translation id="9038620279323455325">"<ph name="FILE_NAME" />" නමැති ගොනුව දැනටමත් පවතියි . වෙනත් නමක් තෝරන්න.</translation>
 <translation id="9046895021617826162">සම්බන්ධය අසාර්ථකයි</translation>
 <translation id="9065512565307033593">ඔබ සත්‍යාපනය කිරීමට අපොහොසත් වුවහොත්, ඔබගේ ජාල ප්‍රවේශය අබල කරනු ඇත.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sk.xtb b/ui/chromeos/translations/ui_chromeos_strings_sk.xtb
index dfc9258..ceb5a824 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_sk.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_sk.xtb
@@ -950,7 +950,6 @@
 <translation id="9034924485347205037">Súbory systému Linux</translation>
 <translation id="9035012421917565900">Položky sa nedajú presunúť späť do cieľa <ph name="DESTINATION_NAME" />, takže túto akciu nebude možné vrátiť späť.</translation>
 <translation id="9035689366572880647">Zadajte aktuálny kód PIN</translation>
-<translation id="9037777873893411148">* Priestor organizácie je plný.</translation>
 <translation id="9038620279323455325">Súbor s názvom <ph name="FILE_NAME" /> už existuje. Vyberte iný názov.</translation>
 <translation id="9046895021617826162">Zlyhanie pripojenia</translation>
 <translation id="9065512565307033593">Ak sa vám nepodarí overiť, váš prístup k sieti bude zakázaný.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sl.xtb b/ui/chromeos/translations/ui_chromeos_strings_sl.xtb
index fa99b96..3d65f4a8 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_sl.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_sl.xtb
@@ -950,7 +950,6 @@
 <translation id="9034924485347205037">Datoteke za Linux</translation>
 <translation id="9035012421917565900">Elementov ni mogoče premakniti nazaj v »<ph name="DESTINATION_NAME" />«, zato tega dejanja ne bo mogoče razveljaviti.</translation>
 <translation id="9035689366572880647">Vnesite trenutno kodo PIN</translation>
-<translation id="9037777873893411148">* Prostor za shranjevanje v organizaciji je povsem zaseden</translation>
 <translation id="9038620279323455325">Datoteka z imenom »<ph name="FILE_NAME" />« že obstaja. Izberite drugo ime.</translation>
 <translation id="9046895021617826162">Vzpostavljanje povezave ni uspelo</translation>
 <translation id="9065512565307033593">Če ne preverite, bo dostop do omrežja onemogočen.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sq.xtb b/ui/chromeos/translations/ui_chromeos_strings_sq.xtb
index cc8a84c..d537757 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_sq.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_sq.xtb
@@ -949,7 +949,6 @@
 <translation id="9034924485347205037">Skedarët e Linux</translation>
 <translation id="9035012421917565900">Artikujt nuk mund të zhvendosen sërish te "<ph name="DESTINATION_NAME" />", prandaj nuk do të jesh në gjendje ta zhbësh këtë veprim.</translation>
 <translation id="9035689366572880647">Fut kodin aktual PIN</translation>
-<translation id="9037777873893411148">*Hapësira ruajtëse e organizatës është plot</translation>
 <translation id="9038620279323455325">Skedari me emrin "<ph name="FILE_NAME" />" ekziston tashmë. Zgjidh një emër tjetër.</translation>
 <translation id="9046895021617826162">Lidhja dështoi</translation>
 <translation id="9065512565307033593">Nëse nuk e verifikon, qasja jote në rrjet do të çaktivizohet.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb b/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb
index 8b5c6e5..3013bef 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb
@@ -950,7 +950,6 @@
 <translation id="9034924485347205037">Linux datoteke</translation>
 <translation id="9035012421917565900">Stavke ne mogu da se vrate u „<ph name="DESTINATION_NAME" />“, pa nećete moći da opozovete ovu radnju.</translation>
 <translation id="9035689366572880647">Unesite aktuelni PIN</translation>
-<translation id="9037777873893411148">*Memorijski prostor organizacije je popunjen</translation>
 <translation id="9038620279323455325">Datoteka „<ph name="FILE_NAME" />“ već postoji. Odaberite drugi naziv.</translation>
 <translation id="9046895021617826162">Povezivanje nije uspelo</translation>
 <translation id="9065512565307033593">Ako verifikacija ne uspe, pristup mreži će biti onemogućen.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sr.xtb b/ui/chromeos/translations/ui_chromeos_strings_sr.xtb
index 37e9f400..af4c587 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_sr.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_sr.xtb
@@ -950,7 +950,6 @@
 <translation id="9034924485347205037">Linux датотеке</translation>
 <translation id="9035012421917565900">Ставке не могу да се врате у „<ph name="DESTINATION_NAME" />“, па нећете моћи да опозовете ову радњу.</translation>
 <translation id="9035689366572880647">Унесите актуелни PIN</translation>
-<translation id="9037777873893411148">*Меморијски простор организације је попуњен</translation>
 <translation id="9038620279323455325">Датотека „<ph name="FILE_NAME" />“ већ постоји. Одаберите други назив.</translation>
 <translation id="9046895021617826162">Повезивање није успело</translation>
 <translation id="9065512565307033593">Ако верификација не успе, приступ мрежи ће бити онемогућен.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sv.xtb b/ui/chromeos/translations/ui_chromeos_strings_sv.xtb
index 44ee675..f587666 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_sv.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_sv.xtb
@@ -950,7 +950,6 @@
 <translation id="9034924485347205037">Linux-filer</translation>
 <translation id="9035012421917565900">Eftersom det inte går att flytta tillbaka objekten till <ph name="DESTINATION_NAME" /> går det inte att ångra åtgärden.</translation>
 <translation id="9035689366572880647">Ange den nuvarande pinkoden</translation>
-<translation id="9037777873893411148">*Organisationens lagringsutrymme är fullt</translation>
 <translation id="9038620279323455325">Det finns redan en fil med namnet <ph name="FILE_NAME" />. Välj ett annat namn.</translation>
 <translation id="9046895021617826162">Anslutningen misslyckades</translation>
 <translation id="9065512565307033593">Nätverksåtkomsten kommer att inaktiveras om du misslyckas med verifieringen.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sw.xtb b/ui/chromeos/translations/ui_chromeos_strings_sw.xtb
index 204176f..182ab95 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_sw.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_sw.xtb
@@ -950,7 +950,6 @@
 <translation id="9034924485347205037">Faili za Linux</translation>
 <translation id="9035012421917565900">Hutaweza kuvirudisha vipengee kwenye '<ph name="DESTINATION_NAME" />', hivyo hutaweza kutendua hatua hii.</translation>
 <translation id="9035689366572880647">Weka PIN ya sasa</translation>
-<translation id="9037777873893411148">*Nafasi ya hifadhi ya shirika imejaa</translation>
 <translation id="9038620279323455325">Faili yenye jina la "<ph name="FILE_NAME" />" tayari ipo. Tafadhali chagua jina tofauti.</translation>
 <translation id="9046895021617826162">Muunganisho umeshindikana</translation>
 <translation id="9065512565307033593">Usipothibitisha, ufikiaji wako wa mtandao utazimwa.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ta.xtb b/ui/chromeos/translations/ui_chromeos_strings_ta.xtb
index 9784157f..f40ae8d7 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ta.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ta.xtb
@@ -950,7 +950,6 @@
 <translation id="9034924485347205037">Linux ஃபைல்கள் </translation>
 <translation id="9035012421917565900">கோப்புகளை '<ph name="DESTINATION_NAME" />'க்கு மீண்டும் நகர்த்த முடியாது என்பதால், இதைச் செயல்தவிர்க்க முடியாது.</translation>
 <translation id="9035689366572880647">தற்போதைய பின்னை (PIN) உள்ளிடவும்</translation>
-<translation id="9037777873893411148">*நிறுவனச் சேமிப்பகம் நிரம்பிவிட்டது</translation>
 <translation id="9038620279323455325">"<ph name="FILE_NAME" />" என்ற பெயருள்ள ஃபைல் ஏற்கனவே உள்ளது. வேறொரு பெயரைத் தேர்வுசெய்யவும்.</translation>
 <translation id="9046895021617826162">இணைப்பு தோல்வியடைந்தது</translation>
 <translation id="9065512565307033593">சரிபார்க்கத் தவறினால் உங்கள் நெட்வொர்க் அணுகல் முடக்கப்படும்.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_te.xtb b/ui/chromeos/translations/ui_chromeos_strings_te.xtb
index bdf3a62..a9868ec 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_te.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_te.xtb
@@ -950,7 +950,6 @@
 <translation id="9034924485347205037">Linux ఫైళ్లు</translation>
 <translation id="9035012421917565900">ఈ అంశాలను '<ph name="DESTINATION_NAME" />'లోకి తిరిగి తరలించడం సాధ్యపడదు. కాబట్టి మీరు ఈ చర్యను రద్దు చేయలేరు.</translation>
 <translation id="9035689366572880647">ప్రస్తుత PINను ఎంటర్ చేయండి</translation>
-<translation id="9037777873893411148">*సంస్థ స్టోరేజ్ నిండింది</translation>
 <translation id="9038620279323455325">"<ph name="FILE_NAME" />" పేరు గల ఫైల్ ఇప్పటికే ఉంది. దయచేసి వేరొక పేరును ఎంచుకోండి.</translation>
 <translation id="9046895021617826162">కనెక్ట్ విఫలమైంది</translation>
 <translation id="9065512565307033593">మీరు వెరిఫై చేయలేకపోతే, మీ నెట్‌వర్క్ యాక్సెస్ డిజేబుల్ చేయబడుతుంది.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_th.xtb b/ui/chromeos/translations/ui_chromeos_strings_th.xtb
index 7f591fce..198c95cb 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_th.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_th.xtb
@@ -950,7 +950,6 @@
 <translation id="9034924485347205037">ไฟล์ Linux</translation>
 <translation id="9035012421917565900">ไม่สามารถย้ายรายการกลับไปที่ "<ph name="DESTINATION_NAME" />" คุณจึงไม่สามารถเลิกทำการดำเนินการนี้</translation>
 <translation id="9035689366572880647">ป้อน PIN ปัจจุบัน</translation>
-<translation id="9037777873893411148">*พื้นที่เก็บข้อมูลขององค์กรเต็มแล้ว</translation>
 <translation id="9038620279323455325">มีไฟล์ชื่อ "<ph name="FILE_NAME" />" อยู่แล้ว โปรดเลือกชื่ออื่น</translation>
 <translation id="9046895021617826162">การเชื่อมต่อล้มเหลว</translation>
 <translation id="9065512565307033593">หากไม่ยืนยัน ระบบจะปิดใช้สิทธิ์เข้าถึงเครือข่ายของคุณ</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_tr.xtb b/ui/chromeos/translations/ui_chromeos_strings_tr.xtb
index 3d3f346..9d44133 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_tr.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_tr.xtb
@@ -950,7 +950,6 @@
 <translation id="9034924485347205037">Linux dosyaları</translation>
 <translation id="9035012421917565900">Öğeler "<ph name="DESTINATION_NAME" />" hedefine geri taşınamaz. Bu nedenle bu işlemi geri alamazsınız.</translation>
 <translation id="9035689366572880647">Geçerli PIN'i gir</translation>
-<translation id="9037777873893411148">*Kuruluşun depolama alanı dolu</translation>
 <translation id="9038620279323455325">"<ph name="FILE_NAME" />" adlı dosya zaten var. Lütfen farklı bir ad seçin.</translation>
 <translation id="9046895021617826162">Bağlantı başarısız oldu</translation>
 <translation id="9065512565307033593">Kimliğinizi doğrulayamazsanız ağ erişiminiz devre dışı bırakılacaktır.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_uk.xtb b/ui/chromeos/translations/ui_chromeos_strings_uk.xtb
index e281b1ac..9e23daa 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_uk.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_uk.xtb
@@ -950,7 +950,6 @@
 <translation id="9034924485347205037">Файли Linux</translation>
 <translation id="9035012421917565900">Елементи не можна перенести назад у розташування "<ph name="DESTINATION_NAME" />", тож ви не зможете відмінити цю дію.</translation>
 <translation id="9035689366572880647">Введіть поточний PIN-код</translation>
-<translation id="9037777873893411148">* Сховище організації заповнено</translation>
 <translation id="9038620279323455325">Файл із назвою "<ph name="FILE_NAME" />" уже існує. Виберіть іншу назву.</translation>
 <translation id="9046895021617826162">Помилка з'єднання</translation>
 <translation id="9065512565307033593">Якщо ви не пройдете цю перевірку, вам буде закрито доступ до мережі.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ur.xtb b/ui/chromeos/translations/ui_chromeos_strings_ur.xtb
index 8cdb8353..88be62a 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ur.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ur.xtb
@@ -949,7 +949,6 @@
 <translation id="9034924485347205037">‏Linux فائلز</translation>
 <translation id="9035012421917565900">آئٹمز '<ph name="DESTINATION_NAME" />' میں واپس منتقل نہیں کیے جا سکتے، اسلئے آپ اس کارروائي کو کالعدم نہیں کر سکیں گے۔</translation>
 <translation id="9035689366572880647">‏موجودہ PIN درج کریں</translation>
-<translation id="9037777873893411148">*تنظیم کی اسٹوریج بھری ہوئی ہے</translation>
 <translation id="9038620279323455325">"<ph name="FILE_NAME" />" نام کی فائل پہلے سے موجود ہے۔ براہ کرم ایک مختلف نام منتخب کریں۔</translation>
 <translation id="9046895021617826162">منسلک کرنا ناکام ہوگیا</translation>
 <translation id="9065512565307033593">اگر آپ توثیق کرنے میں ناکام ہوتے ہیں تو آپ کے نیٹ ورک کی رسائی کو غیر فعال کر دیا جائے گا۔</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_uz.xtb b/ui/chromeos/translations/ui_chromeos_strings_uz.xtb
index 222824cb..a909e52 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_uz.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_uz.xtb
@@ -949,7 +949,6 @@
 <translation id="9034924485347205037">Linux fayllari</translation>
 <translation id="9035012421917565900">Obyektlarni “<ph name="DESTINATION_NAME" />” umumiy diskiga qaytarib bo‘lmaydi, shuning uchun bu amalni bekor qila olmaysiz.</translation>
 <translation id="9035689366572880647">Joriy PIN kodni kiriting</translation>
-<translation id="9037777873893411148">*Tashkilot ombori toʻlgan</translation>
 <translation id="9038620279323455325">“<ph name="FILE_NAME" />” nomli fayl allaqachon mavjud. Boshqa nom tanlang.</translation>
 <translation id="9046895021617826162">Ulanmadi</translation>
 <translation id="9065512565307033593">Tasdiqlanmasa, tarmoqqa ruxsatingiz yopiladi.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_vi.xtb b/ui/chromeos/translations/ui_chromeos_strings_vi.xtb
index 33f6cfd69..8ac6c44 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_vi.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_vi.xtb
@@ -950,7 +950,6 @@
 <translation id="9034924485347205037">Tệp Linux</translation>
 <translation id="9035012421917565900">Không thể chuyển lại các tệp này vào '<ph name="DESTINATION_NAME" />', do đó bạn sẽ không thể hoàn tác hành động này.</translation>
 <translation id="9035689366572880647">Nhập mã PIN hiện tại</translation>
-<translation id="9037777873893411148">*Đã dùng hết bộ nhớ của tổ chức</translation>
 <translation id="9038620279323455325">Tệp có tên "<ph name="FILE_NAME" />" đã tồn tại. Vui lòng chọn một tên khác.</translation>
 <translation id="9046895021617826162">Kết nối không thành công</translation>
 <translation id="9065512565307033593">Nếu không xác minh được, bạn sẽ không thể dùng mạng.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_zh-CN.xtb b/ui/chromeos/translations/ui_chromeos_strings_zh-CN.xtb
index a208fcd..e9a46e10 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_zh-CN.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_zh-CN.xtb
@@ -945,7 +945,6 @@
 <translation id="9034924485347205037">Linux 文件</translation>
 <translation id="9035012421917565900">这些内容一旦移出“<ph name="DESTINATION_NAME" />”便无法移回,因此您将无法撤消这项操作。</translation>
 <translation id="9035689366572880647">输入当前 PIN 码</translation>
-<translation id="9037777873893411148">*贵组织的存储空间已用尽</translation>
 <translation id="9038620279323455325">已有名为“<ph name="FILE_NAME" />”的文件。请另选一个名称。</translation>
 <translation id="9046895021617826162">连接失败</translation>
 <translation id="9065512565307033593">如果您未通过验证,我们将禁止您访问网络。</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_zh-HK.xtb b/ui/chromeos/translations/ui_chromeos_strings_zh-HK.xtb
index b34e9f3..167ef212 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_zh-HK.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_zh-HK.xtb
@@ -950,7 +950,6 @@
 <translation id="9034924485347205037">Linux 檔案</translation>
 <translation id="9035012421917565900">這些項目無法移回「<ph name="DESTINATION_NAME" />」,因此無法復原此操作。</translation>
 <translation id="9035689366572880647">輸入目前的 PIN</translation>
-<translation id="9037777873893411148">*機構的儲存空間已滿</translation>
 <translation id="9038620279323455325">名稱為「<ph name="FILE_NAME" />」的檔案已經存在,請選擇其他名稱。</translation>
 <translation id="9046895021617826162">連線失敗</translation>
 <translation id="9065512565307033593">如未完成驗證,您將無法存取網絡。</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_zh-TW.xtb b/ui/chromeos/translations/ui_chromeos_strings_zh-TW.xtb
index 03959c7..8fed029 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_zh-TW.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_zh-TW.xtb
@@ -950,7 +950,6 @@
 <translation id="9034924485347205037">Linux 檔案</translation>
 <translation id="9035012421917565900">這些項目無法移回「<ph name="DESTINATION_NAME" />」,因此無法復原這項操作。</translation>
 <translation id="9035689366572880647">輸入目前的 PIN 碼</translation>
-<translation id="9037777873893411148">*機構的儲存空間已滿</translation>
 <translation id="9038620279323455325">名稱為「<ph name="FILE_NAME" />」的檔案已經存在,請選擇其他名稱。</translation>
 <translation id="9046895021617826162">連線失敗</translation>
 <translation id="9065512565307033593">如未完成驗證,你將無法存取網路。</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_zu.xtb b/ui/chromeos/translations/ui_chromeos_strings_zu.xtb
index 200dff6..07fee1d3 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_zu.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_zu.xtb
@@ -949,7 +949,6 @@
 <translation id="9034924485347205037">Amafayela e-Linux</translation>
 <translation id="9035012421917565900">Lezi zinto azikwazi ukubuyiselwa ku-'<ph name="DESTINATION_NAME" />', ngakho-ke ngeke ukwazi ukuhlehlisa lesi senzo.</translation>
 <translation id="9035689366572880647">Faka Iphinikhodi yamanje</translation>
-<translation id="9037777873893411148">*Isitoreji senhlangano sigcwele</translation>
 <translation id="9038620279323455325">Igama eliqanjwe "<ph name="FILE_NAME" />" selivele likhona. Sicela ukhethe igama elihlukile.</translation>
 <translation id="9046895021617826162">Ukuxhumeka kuhlulekile</translation>
 <translation id="9065512565307033593">Uma wehluleka ukuqinisekisa, ukufinyelela kwakho kunethiwekhi kuzokhutshazwa.</translation>
diff --git a/ui/color/ui_color_mixer.cc b/ui/color/ui_color_mixer.cc
index 23a1891..ca33acaf 100644
--- a/ui/color/ui_color_mixer.cc
+++ b/ui/color/ui_color_mixer.cc
@@ -162,7 +162,7 @@
   mixer[kColorShadowValueKeyShadowElevationSixteen] =
       SetAlpha(kColorShadowBase, 0x1a);
   mixer[kColorSidePanelComboboxBorder] = {SK_ColorTRANSPARENT};
-  mixer[kColorSidePanelComboboxBackground] = {SK_ColorTRANSPARENT};
+  mixer[kColorSidePanelComboboxBackground] = {kColorPrimaryBackground};
   mixer[kColorSliderThumb] = {kColorAccent};
   mixer[kColorSliderThumbMinimal] = {kColorSecondaryForeground};
   mixer[kColorSliderTrack] = {kColorSubtleAccent};
diff --git a/ui/message_center/views/notification_view_unittest.cc b/ui/message_center/views/notification_view_unittest.cc
index 0a62679..c7bfa243 100644
--- a/ui/message_center/views/notification_view_unittest.cc
+++ b/ui/message_center/views/notification_view_unittest.cc
@@ -321,8 +321,8 @@
 TEST_F(NotificationViewTest, UpdateViewsOrderingTest) {
   EXPECT_NE(nullptr, title_view());
   EXPECT_NE(nullptr, message_label());
-  EXPECT_EQ(0, left_content()->GetIndexOf(title_view()));
-  EXPECT_EQ(1, left_content()->GetIndexOf(message_label()));
+  EXPECT_EQ(0u, left_content()->GetIndexOf(title_view()));
+  EXPECT_EQ(1u, left_content()->GetIndexOf(message_label()));
 
   std::unique_ptr<Notification> notification = CreateSimpleNotification();
   notification->set_title(std::u16string());
@@ -331,7 +331,7 @@
 
   EXPECT_EQ(nullptr, title_view());
   EXPECT_NE(nullptr, message_label());
-  EXPECT_EQ(0, left_content()->GetIndexOf(message_label()));
+  EXPECT_EQ(0u, left_content()->GetIndexOf(message_label()));
 
   notification->set_title(u"title");
 
@@ -339,8 +339,8 @@
 
   EXPECT_NE(nullptr, title_view());
   EXPECT_NE(nullptr, message_label());
-  EXPECT_EQ(0, left_content()->GetIndexOf(title_view()));
-  EXPECT_EQ(1, left_content()->GetIndexOf(message_label()));
+  EXPECT_EQ(0u, left_content()->GetIndexOf(title_view()));
+  EXPECT_EQ(1u, left_content()->GetIndexOf(message_label()));
 }
 
 TEST_F(NotificationViewTest, CreateOrUpdateTitle) {
diff --git a/ui/views/accessibility/ax_virtual_view.cc b/ui/views/accessibility/ax_virtual_view.cc
index a15c64bf..26173b8 100644
--- a/ui/views/accessibility/ax_virtual_view.cc
+++ b/ui/views/accessibility/ax_virtual_view.cc
@@ -93,7 +93,8 @@
   DCHECK_LE(index, children_.size());
 
   view->virtual_parent_view_ = this;
-  children_.insert(children_.begin() + index, std::move(view));
+  children_.insert(children_.begin() + static_cast<ptrdiff_t>(index),
+                   std::move(view));
   if (GetOwnerView()) {
     GetOwnerView()->NotifyAccessibilityEvent(ax::mojom::Event::kChildrenChanged,
                                              true);
@@ -114,8 +115,10 @@
 
   std::unique_ptr<AXVirtualView> child =
       std::move(children_[cur_index.value()]);
-  children_.erase(children_.begin() + cur_index.value());
-  children_.insert(children_.begin() + index, std::move(child));
+  children_.erase(children_.begin() +
+                  static_cast<ptrdiff_t>(cur_index.value()));
+  children_.insert(children_.begin() + static_cast<ptrdiff_t>(index),
+                   std::move(child));
 
   GetOwnerView()->NotifyAccessibilityEvent(ax::mojom::Event::kChildrenChanged,
                                            true);
@@ -152,7 +155,8 @@
 
   std::unique_ptr<AXVirtualView> child =
       std::move(children_[cur_index.value()]);
-  children_.erase(children_.begin() + cur_index.value());
+  children_.erase(children_.begin() +
+                  static_cast<ptrdiff_t>(cur_index.value()));
   child->virtual_parent_view_ = nullptr;
   child->populate_data_callback_.Reset();
 
diff --git a/ui/views/accessibility/view_accessibility.cc b/ui/views/accessibility/view_accessibility.cc
index 4d149aa..0bf42b75 100644
--- a/ui/views/accessibility/view_accessibility.cc
+++ b/ui/views/accessibility/view_accessibility.cc
@@ -100,7 +100,8 @@
                                                   "AXVirtualView parent. Call "
                                                   "RemoveChildView first.";
   virtual_view->set_parent_view(this);
-  auto insert_iterator = virtual_children_.begin() + index;
+  auto insert_iterator =
+      virtual_children_.begin() + static_cast<ptrdiff_t>(index);
   virtual_children_.insert(insert_iterator, std::move(virtual_view));
 }
 
@@ -113,7 +114,8 @@
 
   std::unique_ptr<AXVirtualView> child =
       std::move(virtual_children_[cur_index.value()]);
-  virtual_children_.erase(virtual_children_.begin() + cur_index.value());
+  virtual_children_.erase(virtual_children_.begin() +
+                          static_cast<ptrdiff_t>(cur_index.value()));
   child->set_parent_view(nullptr);
   child->UnsetPopulateDataCallback();
   if (focused_virtual_child_ && child->Contains(focused_virtual_child_))
diff --git a/ui/views/accessibility/view_ax_platform_node_delegate.cc b/ui/views/accessibility/view_ax_platform_node_delegate.cc
index ff5f266..f6318482 100644
--- a/ui/views/accessibility/view_ax_platform_node_delegate.cc
+++ b/ui/views/accessibility/view_ax_platform_node_delegate.cc
@@ -735,10 +735,10 @@
 std::vector<int32_t> ViewAXPlatformNodeDelegate::GetColHeaderNodeIds(
     int col_index) const {
   std::vector<int32_t> columns = GetColHeaderNodeIds();
-  if (columns.size() <= static_cast<size_t>(col_index)) {
+  if (static_cast<size_t>(col_index) >= columns.size()) {
     return {};
   }
-  return {columns[col_index]};
+  return {columns[static_cast<size_t>(col_index)]};
 }
 
 absl::optional<int32_t> ViewAXPlatformNodeDelegate::GetCellId(
@@ -747,8 +747,8 @@
   if (virtual_children().empty() || !GetAncestorTableView())
     return absl::nullopt;
 
-  AXVirtualView* ax_cell =
-      GetAncestorTableView()->GetVirtualAccessibilityCell(row_index, col_index);
+  AXVirtualView* ax_cell = GetAncestorTableView()->GetVirtualAccessibilityCell(
+      static_cast<size_t>(row_index), static_cast<size_t>(col_index));
   if (!ax_cell)
     return absl::nullopt;
 
diff --git a/ui/views/bubble/bubble_frame_view.cc b/ui/views/bubble/bubble_frame_view.cc
index 97bb6ec..3aa32ae 100644
--- a/ui/views/bubble/bubble_frame_view.cc
+++ b/ui/views/bubble/bubble_frame_view.cc
@@ -324,7 +324,7 @@
 void BubbleFrameView::InsertClientView(ClientView* client_view) {
   // Place the client view before any footnote view for focus order.
   footnote_container_
-      ? AddChildViewAt(client_view, GetIndexOf(footnote_container_))
+      ? AddChildViewAt(client_view, GetIndexOf(footnote_container_).value())
       : AddChildView(client_view);
 }
 
@@ -335,7 +335,7 @@
   delete custom_title_;
   custom_title_ = title_view.get();
   // Keep the title after the icon for focus order.
-  AddChildViewAt(title_view.release(), GetIndexOf(title_icon_) + 1);
+  AddChildViewAt(title_view.release(), GetIndexOf(title_icon_).value() + 1);
 }
 
 void BubbleFrameView::SetProgress(absl::optional<double> progress) {
diff --git a/ui/views/controls/menu/menu_model_adapter_unittest.cc b/ui/views/controls/menu/menu_model_adapter_unittest.cc
index 5164ca6..3b2dc29 100644
--- a/ui/views/controls/menu/menu_model_adapter_unittest.cc
+++ b/ui/views/controls/menu/menu_model_adapter_unittest.cc
@@ -230,7 +230,7 @@
       continue;
     }
     // Check placement.
-    EXPECT_EQ(i, static_cast<size_t>(submenu->GetSubmenu()->GetIndexOf(item)));
+    EXPECT_EQ(i, submenu->GetSubmenu()->GetIndexOf(item));
 
     // Check type.
     switch (model_item.type) {
@@ -314,7 +314,7 @@
     }
 
     // Check placement.
-    EXPECT_EQ(i, static_cast<size_t>(menu->GetSubmenu()->GetIndexOf(item)));
+    EXPECT_EQ(i, menu->GetSubmenu()->GetIndexOf(item));
 
     // Check type.
     switch (model_item.type) {
diff --git a/ui/views/controls/tabbed_pane/tabbed_pane.cc b/ui/views/controls/tabbed_pane/tabbed_pane.cc
index e33d31e..65bb442f 100644
--- a/ui/views/controls/tabbed_pane/tabbed_pane.cc
+++ b/ui/views/controls/tabbed_pane/tabbed_pane.cc
@@ -567,7 +567,7 @@
   }
 
   if (listener())
-    listener()->TabSelectedAt(tab_strip_->GetIndexOf(new_selected_tab));
+    listener()->TabSelectedAt(tab_strip_->GetIndexOf(new_selected_tab).value());
 }
 
 void TabbedPane::SelectTabAt(size_t index, bool animate) {
diff --git a/ui/views/controls/table/table_view_unittest.cc b/ui/views/controls/table/table_view_unittest.cc
index ce5fdf1..2e2493ff 100644
--- a/ui/views/controls/table/table_view_unittest.cc
+++ b/ui/views/controls/table/table_view_unittest.cc
@@ -67,7 +67,7 @@
 
   const gfx::FontList& font_list() { return table_->font_list_; }
 
-  AXVirtualView* GetVirtualAccessibilityBodyRow(int row) {
+  AXVirtualView* GetVirtualAccessibilityBodyRow(size_t row) {
     return table_->GetVirtualAccessibilityBodyRow(row);
   }
 
@@ -75,17 +75,18 @@
     return table_->GetVirtualAccessibilityHeaderRow();
   }
 
-  AXVirtualView* GetVirtualAccessibilityHeaderCell(int visible_column_index) {
+  AXVirtualView* GetVirtualAccessibilityHeaderCell(
+      size_t visible_column_index) {
     return table_->GetVirtualAccessibilityCellImpl(
         GetVirtualAccessibilityHeaderRow(), visible_column_index);
   }
 
-  AXVirtualView* GetVirtualAccessibilityCell(int row,
-                                             int visible_column_index) {
+  AXVirtualView* GetVirtualAccessibilityCell(size_t row,
+                                             size_t visible_column_index) {
     return table_->GetVirtualAccessibilityCell(row, visible_column_index);
   }
 
-  gfx::Rect GetCellBounds(int row, int visible_column_index) const {
+  gfx::Rect GetCellBounds(size_t row, size_t visible_column_index) const {
     return table_->GetCellBounds(row, visible_column_index);
   }
 
diff --git a/ui/views/controls/textfield/textfield.cc b/ui/views/controls/textfield/textfield.cc
index 5ac5429..46dedbf 100644
--- a/ui/views/controls/textfield/textfield.cc
+++ b/ui/views/controls/textfield/textfield.cc
@@ -2046,7 +2046,7 @@
   return {changed, cursor_changed};
 }
 
-void Textfield::OffsetDoubleClickWord(int offset) {
+void Textfield::OffsetDoubleClickWord(size_t offset) {
   selection_controller_.OffsetDoubleClickWord(offset);
 }
 
diff --git a/ui/views/controls/textfield/textfield.h b/ui/views/controls/textfield/textfield.h
index 6688bcc..13557f58 100644
--- a/ui/views/controls/textfield/textfield.h
+++ b/ui/views/controls/textfield/textfield.h
@@ -498,7 +498,7 @@
   // Offsets the double-clicked word's range. This is only used in the unusual
   // case where the text changes on the second mousedown of a double-click.
   // This is harmless if there is not a currently double-clicked word.
-  void OffsetDoubleClickWord(int offset);
+  void OffsetDoubleClickWord(size_t offset);
 
   // Returns true if the drop cursor is for insertion at a target text location,
   // the standard behavior/style. Returns false when drop will do something
diff --git a/ui/views/focus/focus_manager.cc b/ui/views/focus/focus_manager.cc
index 5e0e3c0..a4780a93 100644
--- a/ui/views/focus/focus_manager.cc
+++ b/ui/views/focus/focus_manager.cc
@@ -95,13 +95,13 @@
       View::Views::const_iterator i(
           std::find(views.begin(), views.end(), focused_view_));
       DCHECK(i != views.end());
-      size_t index = i - views.begin();
+      auto index = static_cast<size_t>(i - views.begin());
       if (next && index == views.size() - 1)
         index = 0;
       else if (!next && index == 0)
         index = views.size() - 1;
       else
-        index += next ? 1 : -1;
+        index = next ? (index + 1) : (index - 1);
       SetFocusedViewWithReason(views[index],
                                FocusChangeReason::kFocusTraversal);
       return false;
@@ -169,13 +169,13 @@
 
   // Count the number of panes and set the default index if no pane
   // is initially focused.
-  if (panes.empty())
+  const size_t count = panes.size();
+  if (!count)
     return false;
-  int count = static_cast<int>(panes.size());
 
   // Initialize |index| to an appropriate starting index if nothing is
   // focused initially.
-  int index = direction == Direction::kBackward ? 0 : count - 1;
+  size_t index = (direction == Direction::kBackward) ? 0 : (count - 1);
 
   // Check to see if a pane already has focus and update the index accordingly.
   const views::View* focused_view = GetFocusedView();
@@ -185,41 +185,35 @@
                                   return pane && pane->Contains(focused_view);
                                 });
     if (i != panes.cend())
-      index = i - panes.cbegin();
+      index = static_cast<size_t>(i - panes.cbegin());
   }
 
   // Rotate focus.
-  int start_index = index;
-  for (;;) {
-    if (direction == Direction::kBackward)
-      index--;
-    else
-      index++;
+  for (const size_t start_index = index;;) {
+    index = ((direction == Direction::kBackward) ? (index + count - 1)
+                                                 : (index + 1)) %
+            count;
 
-    if (wrapping == FocusCycleWrapping::kDisabled &&
-        (index >= count || index < 0))
+    if ((wrapping == FocusCycleWrapping::kDisabled) &&
+        (index == ((direction == Direction::kBackward) ? (count - 1) : 0))) {
       return false;
-    index = (index + count) % count;
+    }
 
     // Ensure that we don't loop more than once.
     if (index == start_index)
-      break;
+      return false;
 
     views::View* pane = panes[index];
     DCHECK(pane);
-
-    if (!pane->GetVisible())
-      continue;
-
-    pane->RequestFocus();
-    // |pane| may be in a different widget, so don't assume its focus manager
-    // is |this|.
-    focused_view = pane->GetWidget()->GetFocusManager()->GetFocusedView();
-    if (pane == focused_view || pane->Contains(focused_view))
-      return true;
+    if (pane->GetVisible()) {
+      pane->RequestFocus();
+      // |pane| may be in a different widget, so don't assume its focus manager
+      // is |this|.
+      focused_view = pane->GetWidget()->GetFocusManager()->GetFocusedView();
+      if (pane == focused_view || pane->Contains(focused_view))
+        return true;
+    }
   }
-
-  return false;
 }
 
 View* FocusManager::GetNextFocusableView(View* original_starting_view,
diff --git a/ui/views/layout/animating_layout_manager.cc b/ui/views/layout/animating_layout_manager.cc
index f3dbee0..8b242824 100644
--- a/ui/views/layout/animating_layout_manager.cc
+++ b/ui/views/layout/animating_layout_manager.cc
@@ -735,7 +735,7 @@
 
   for (const LayoutFadeInfo& fade_info : fade_infos_) {
     // This shouldn't happen but we should ensure that with a check.
-    DCHECK_NE(-1, host_view()->GetIndexOf(fade_info.child_view));
+    DCHECK(host_view()->GetIndexOf(fade_info.child_view).has_value());
 
     // Views that were previously fading are animated as normal, so nothing to
     // do here.
@@ -947,7 +947,7 @@
   for (const LayoutFadeInfo& fade_info : fade_infos_) {
     View* const child = fade_info.child_view;
     if (fade_info.fade_type == LayoutFadeType::kFadingOut &&
-        host_view()->GetIndexOf(child) >= 0 &&
+        host_view()->GetIndexOf(child).has_value() &&
         !IsChildViewIgnoredByLayout(child) && !IsChildIncludedInLayout(child)) {
       SetViewVisibility(child, false);
     }
diff --git a/ui/views/layout/layout_manager_base.cc b/ui/views/layout/layout_manager_base.cc
index b380e9c..101d559 100644
--- a/ui/views/layout/layout_manager_base.cc
+++ b/ui/views/layout/layout_manager_base.cc
@@ -172,7 +172,7 @@
     // a non-const reference to the child.
     View* const child_view = child_layout.child_view;
     // Should not be attempting to modify a child view that has been removed.
-    DCHECK_GE(host_view()->GetIndexOf(child_view), 0);
+    DCHECK(host_view()->GetIndexOf(child_view).has_value());
     if (child_view->GetVisible() != child_layout.visible)
       SetViewVisibility(child_view, child_layout.visible);
 
diff --git a/ui/views/metrics_aura.cc b/ui/views/metrics_aura.cc
index 1416330..8f7846e4 100644
--- a/ui/views/metrics_aura.cc
+++ b/ui/views/metrics_aura.cc
@@ -13,7 +13,7 @@
 
 int GetDoubleClickInterval() {
 #if BUILDFLAG(IS_WIN)
-  return ::GetDoubleClickTime();
+  return static_cast<int>(::GetDoubleClickTime());
 #else
   // TODO(jennyz): This value may need to be adjusted on different platforms.
   const int kDefaultDoubleClickIntervalMs = 500;
@@ -23,9 +23,12 @@
 
 int GetMenuShowDelay() {
 #if BUILDFLAG(IS_WIN)
-  static DWORD delay = 0;
-  if (!delay && !SystemParametersInfo(SPI_GETMENUSHOWDELAY, 0, &delay, 0))
-    delay = kDefaultMenuShowDelay;
+  static int delay = []() {
+    DWORD show_delay;
+    return SystemParametersInfo(SPI_GETMENUSHOWDELAY, 0, &show_delay, 0)
+               ? static_cast<int>(show_delay)
+               : kDefaultMenuShowDelay;
+  }();
   return delay;
 #else
   return 0;
diff --git a/ui/views/selection_controller.cc b/ui/views/selection_controller.cc
index 2803044c..de30c4c8 100644
--- a/ui/views/selection_controller.cc
+++ b/ui/views/selection_controller.cc
@@ -161,7 +161,7 @@
     delegate_->UpdateSelectionClipboard();
 }
 
-void SelectionController::OffsetDoubleClickWord(int offset) {
+void SelectionController::OffsetDoubleClickWord(size_t offset) {
   double_click_word_.set_start(double_click_word_.start() + offset);
   double_click_word_.set_end(double_click_word_.end() + offset);
 }
diff --git a/ui/views/selection_controller.h b/ui/views/selection_controller.h
index 5a92577..25bf759 100644
--- a/ui/views/selection_controller.h
+++ b/ui/views/selection_controller.h
@@ -67,7 +67,7 @@
   // Offsets the double-clicked word's range. This is only used in the unusual
   // case where the text changes on the second mousedown of a double-click.
   // This is harmless if there is not a currently double-clicked word.
-  void OffsetDoubleClickWord(int offset);
+  void OffsetDoubleClickWord(size_t offset);
 
  private:
   // Tracks the mouse clicks for single/double/triple clicks.
diff --git a/ui/views/view.cc b/ui/views/view.cc
index 64046a5..7f8f67a 100644
--- a/ui/views/view.cc
+++ b/ui/views/view.cc
@@ -348,11 +348,11 @@
   return std::find(children_.cbegin(), children_.cend(), view);
 }
 
-int View::GetIndexOf(const View* view) const {
+absl::optional<size_t> View::GetIndexOf(const View* view) const {
   const auto i = FindChild(view);
-  return i == children_.cend()
-             ? -1
-             : static_cast<int>(std::distance(children_.cbegin(), i));
+  return i == children_.cend() ? absl::nullopt
+                               : absl::make_optional(static_cast<size_t>(
+                                     std::distance(children_.cbegin(), i)));
 }
 
 // Size and disposition --------------------------------------------------------
diff --git a/ui/views/view.h b/ui/views/view.h
index f80f61f..2d4c5485 100644
--- a/ui/views/view.h
+++ b/ui/views/view.h
@@ -486,8 +486,9 @@
   // not a child of this view.
   Views::const_iterator FindChild(const View* view) const;
 
-  // Returns the index of |view|, or -1 if |view| is not a child of this view.
-  int GetIndexOf(const View* view) const;
+  // Returns the index of |view|, or nullopt if |view| is not a child of this
+  // view.
+  absl::optional<size_t> GetIndexOf(const View* view) const;
 
   // Size and disposition ------------------------------------------------------
   // Methods for obtaining and modifying the position and size of the view.
diff --git a/ui/views/view_model.cc b/ui/views/view_model.cc
index 18ecb35..0ec71be 100644
--- a/ui/views/view_model.cc
+++ b/ui/views/view_model.cc
@@ -17,7 +17,7 @@
 
 void ViewModelBase::Remove(size_t index) {
   check_index(index);
-  entries_.erase(entries_.begin() + index);
+  entries_.erase(entries_.begin() + static_cast<ptrdiff_t>(index));
 }
 
 void ViewModelBase::Move(size_t index, size_t target_index) {
@@ -27,8 +27,9 @@
   if (index == target_index)
     return;
   Entry entry(entries_[index]);
-  entries_.erase(entries_.begin() + index);
-  entries_.insert(entries_.begin() + target_index, entry);
+  entries_.erase(entries_.begin() + static_cast<ptrdiff_t>(index));
+  entries_.insert(entries_.begin() + static_cast<ptrdiff_t>(target_index),
+                  entry);
 }
 
 void ViewModelBase::MoveViewOnly(size_t index, size_t target_index) {
@@ -67,7 +68,7 @@
   DCHECK_LE(index, entries_.size());
   Entry entry;
   entry.view = view;
-  entries_.insert(entries_.begin() + index, entry);
+  entries_.insert(entries_.begin() + static_cast<ptrdiff_t>(index), entry);
 }
 
 }  // namespace views
diff --git a/ui/views/view_unittest.cc b/ui/views/view_unittest.cc
index f36564f..3f6ae0f 100644
--- a/ui/views/view_unittest.cc
+++ b/ui/views/view_unittest.cc
@@ -3525,23 +3525,23 @@
 
   auto* foo1 = child1->AddChildView(std::make_unique<View>());
 
-  EXPECT_EQ(-1, root->GetIndexOf(nullptr));
-  EXPECT_EQ(-1, root->GetIndexOf(root.get()));
-  EXPECT_EQ(0, root->GetIndexOf(child1));
-  EXPECT_EQ(1, root->GetIndexOf(child2));
-  EXPECT_EQ(-1, root->GetIndexOf(foo1));
+  EXPECT_FALSE(root->GetIndexOf(nullptr).has_value());
+  EXPECT_FALSE(root->GetIndexOf(root.get()).has_value());
+  EXPECT_EQ(0u, root->GetIndexOf(child1));
+  EXPECT_EQ(1u, root->GetIndexOf(child2));
+  EXPECT_FALSE(root->GetIndexOf(foo1).has_value());
 
-  EXPECT_EQ(-1, child1->GetIndexOf(nullptr));
-  EXPECT_EQ(-1, child1->GetIndexOf(root.get()));
-  EXPECT_EQ(-1, child1->GetIndexOf(child1));
-  EXPECT_EQ(-1, child1->GetIndexOf(child2));
-  EXPECT_EQ(0, child1->GetIndexOf(foo1));
+  EXPECT_FALSE(child1->GetIndexOf(nullptr).has_value());
+  EXPECT_FALSE(child1->GetIndexOf(root.get()).has_value());
+  EXPECT_FALSE(child1->GetIndexOf(child1).has_value());
+  EXPECT_FALSE(child1->GetIndexOf(child2).has_value());
+  EXPECT_EQ(0u, child1->GetIndexOf(foo1));
 
-  EXPECT_EQ(-1, child2->GetIndexOf(nullptr));
-  EXPECT_EQ(-1, child2->GetIndexOf(root.get()));
-  EXPECT_EQ(-1, child2->GetIndexOf(child2));
-  EXPECT_EQ(-1, child2->GetIndexOf(child1));
-  EXPECT_EQ(-1, child2->GetIndexOf(foo1));
+  EXPECT_FALSE(child2->GetIndexOf(nullptr).has_value());
+  EXPECT_FALSE(child2->GetIndexOf(root.get()).has_value());
+  EXPECT_FALSE(child2->GetIndexOf(child2).has_value());
+  EXPECT_FALSE(child2->GetIndexOf(child1).has_value());
+  EXPECT_FALSE(child2->GetIndexOf(foo1).has_value());
 }
 
 // Verifies that the child views can be reordered correctly.
@@ -3557,27 +3557,27 @@
   foo2->SetFocusBehavior(View::FocusBehavior::ALWAYS);
   foo3->SetFocusBehavior(View::FocusBehavior::ALWAYS);
 
-  ASSERT_EQ(0, child->GetIndexOf(foo1));
-  ASSERT_EQ(1, child->GetIndexOf(foo2));
-  ASSERT_EQ(2, child->GetIndexOf(foo3));
+  ASSERT_EQ(0u, child->GetIndexOf(foo1));
+  ASSERT_EQ(1u, child->GetIndexOf(foo2));
+  ASSERT_EQ(2u, child->GetIndexOf(foo3));
   ASSERT_EQ(foo2, foo1->GetNextFocusableView());
   ASSERT_EQ(foo3, foo2->GetNextFocusableView());
   ASSERT_EQ(nullptr, foo3->GetNextFocusableView());
 
   // Move |foo2| at the end.
   child->ReorderChildView(foo2, -1);
-  ASSERT_EQ(0, child->GetIndexOf(foo1));
-  ASSERT_EQ(1, child->GetIndexOf(foo3));
-  ASSERT_EQ(2, child->GetIndexOf(foo2));
+  ASSERT_EQ(0u, child->GetIndexOf(foo1));
+  ASSERT_EQ(1u, child->GetIndexOf(foo3));
+  ASSERT_EQ(2u, child->GetIndexOf(foo2));
   ASSERT_EQ(foo3, foo1->GetNextFocusableView());
   ASSERT_EQ(foo2, foo3->GetNextFocusableView());
   ASSERT_EQ(nullptr, foo2->GetNextFocusableView());
 
   // Move |foo1| at the end.
   child->ReorderChildView(foo1, -1);
-  ASSERT_EQ(0, child->GetIndexOf(foo3));
-  ASSERT_EQ(1, child->GetIndexOf(foo2));
-  ASSERT_EQ(2, child->GetIndexOf(foo1));
+  ASSERT_EQ(0u, child->GetIndexOf(foo3));
+  ASSERT_EQ(1u, child->GetIndexOf(foo2));
+  ASSERT_EQ(2u, child->GetIndexOf(foo1));
   ASSERT_EQ(nullptr, foo1->GetNextFocusableView());
   ASSERT_EQ(foo2, foo1->GetPreviousFocusableView());
   ASSERT_EQ(foo2, foo3->GetNextFocusableView());
@@ -3585,9 +3585,9 @@
 
   // Move |foo2| to the front.
   child->ReorderChildView(foo2, 0);
-  ASSERT_EQ(0, child->GetIndexOf(foo2));
-  ASSERT_EQ(1, child->GetIndexOf(foo3));
-  ASSERT_EQ(2, child->GetIndexOf(foo1));
+  ASSERT_EQ(0u, child->GetIndexOf(foo2));
+  ASSERT_EQ(1u, child->GetIndexOf(foo3));
+  ASSERT_EQ(2u, child->GetIndexOf(foo1));
   ASSERT_EQ(nullptr, foo1->GetNextFocusableView());
   ASSERT_EQ(foo3, foo1->GetPreviousFocusableView());
   ASSERT_EQ(foo3, foo2->GetNextFocusableView());
@@ -3648,32 +3648,32 @@
 
   auto* v2 = v1->AddChildView(std::make_unique<View>());
   auto* v3 = v1->AddChildView(std::make_unique<View>());
-  EXPECT_EQ(0, v1->GetIndexOf(v2));
-  EXPECT_EQ(1, v1->GetIndexOf(v3));
+  EXPECT_EQ(0u, v1->GetIndexOf(v2));
+  EXPECT_EQ(1u, v1->GetIndexOf(v3));
 
   // Check that there's no change in order when adding at same index.
   v1->AddChildViewAt(v2, 0);
-  EXPECT_EQ(0, v1->GetIndexOf(v2));
-  EXPECT_EQ(1, v1->GetIndexOf(v3));
+  EXPECT_EQ(0u, v1->GetIndexOf(v2));
+  EXPECT_EQ(1u, v1->GetIndexOf(v3));
   v1->AddChildViewAt(v3, 1);
-  EXPECT_EQ(0, v1->GetIndexOf(v2));
-  EXPECT_EQ(1, v1->GetIndexOf(v3));
+  EXPECT_EQ(0u, v1->GetIndexOf(v2));
+  EXPECT_EQ(1u, v1->GetIndexOf(v3));
 
   // Add it at a different index and check for change in order.
   v1->AddChildViewAt(v2, 1);
-  EXPECT_EQ(1, v1->GetIndexOf(v2));
-  EXPECT_EQ(0, v1->GetIndexOf(v3));
+  EXPECT_EQ(1u, v1->GetIndexOf(v2));
+  EXPECT_EQ(0u, v1->GetIndexOf(v3));
   v1->AddChildViewAt(v2, 0);
-  EXPECT_EQ(0, v1->GetIndexOf(v2));
-  EXPECT_EQ(1, v1->GetIndexOf(v3));
+  EXPECT_EQ(0u, v1->GetIndexOf(v2));
+  EXPECT_EQ(1u, v1->GetIndexOf(v3));
 
   // Check that calling AddChildView() moves to the end.
   v1->AddChildView(v2);
-  EXPECT_EQ(1, v1->GetIndexOf(v2));
-  EXPECT_EQ(0, v1->GetIndexOf(v3));
+  EXPECT_EQ(1u, v1->GetIndexOf(v2));
+  EXPECT_EQ(0u, v1->GetIndexOf(v3));
   v1->AddChildView(v3);
-  EXPECT_EQ(0, v1->GetIndexOf(v2));
-  EXPECT_EQ(1, v1->GetIndexOf(v3));
+  EXPECT_EQ(0u, v1->GetIndexOf(v2));
+  EXPECT_EQ(1u, v1->GetIndexOf(v3));
 }
 
 TEST_F(ViewTest, UseMirroredLayoutDisableMirroring) {
diff --git a/ui/views/widget/widget_interactive_uitest.cc b/ui/views/widget/widget_interactive_uitest.cc
index f20021d..9140fa3 100644
--- a/ui/views/widget/widget_interactive_uitest.cc
+++ b/ui/views/widget/widget_interactive_uitest.cc
@@ -13,7 +13,7 @@
 #include "base/location.h"
 #include "base/memory/raw_ptr.h"
 #include "base/run_loop.h"
-#include "base/strings/stringprintf.h"
+#include "base/strings/string_number_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_task_runner_handle.h"
@@ -734,8 +734,9 @@
   EXPECT_EQ(hwnd, ::GetActiveWindow());
 
   for (View* view : widget->GetContentsView()->children()) {
-    SCOPED_TRACE(base::StringPrintf(
-        "Child view %d", widget->GetContentsView()->GetIndexOf(view)));
+    SCOPED_TRACE("Child view " +
+                 base::NumberToString(
+                     widget->GetContentsView()->GetIndexOf(view).value()));
 
     view->RequestFocus();
     EXPECT_EQ(view, widget->GetFocusManager()->GetFocusedView());
diff --git a/ui/views/window/dialog_client_view.cc b/ui/views/window/dialog_client_view.cc
index 283ee15..d59f49ea 100644
--- a/ui/views/window/dialog_client_view.cc
+++ b/ui/views/window/dialog_client_view.cc
@@ -382,7 +382,7 @@
           DISTANCE_BUTTON_MAX_LINKABLE_WIDTH));
 
   // Track which columns to link sizes under MD.
-  constexpr int kViewToColumnIndex[] = {1, 3, 5};
+  constexpr size_t kViewToColumnIndex[] = {1, 3, 5};
   std::vector<size_t> columns_to_link;
 
   // Skip views that are not a button, or are a specific subclass of Button
diff --git a/ui/views/window/frame_caption_button.cc b/ui/views/window/frame_caption_button.cc
index c5a9ff5f..eb87352 100644
--- a/ui/views/window/frame_caption_button.cc
+++ b/ui/views/window/frame_caption_button.cc
@@ -163,7 +163,7 @@
   return swap_images_animation_->is_animating();
 }
 
-void FrameCaptionButton::SetAlpha(int alpha) {
+void FrameCaptionButton::SetAlpha(SkAlpha alpha) {
   if (alpha_ != alpha) {
     alpha_ = alpha;
     SchedulePaint();
@@ -272,8 +272,9 @@
   constexpr SkAlpha kHighlightVisibleOpacity = 0x14;
   SkAlpha highlight_alpha = SK_AlphaTRANSPARENT;
   if (hover_animation().is_animating()) {
-    highlight_alpha = hover_animation().CurrentValueBetween(
-        SK_AlphaTRANSPARENT, kHighlightVisibleOpacity);
+    highlight_alpha =
+        static_cast<SkAlpha>(hover_animation().CurrentValueBetween(
+            SK_AlphaTRANSPARENT, kHighlightVisibleOpacity));
   } else if (GetState() == STATE_HOVERED || GetState() == STATE_PRESSED) {
     // Painting a circular highlight in both "hovered" and "pressed" states
     // simulates and ink drop highlight mode of
@@ -292,10 +293,14 @@
     DrawHighlight(canvas, flags);
   }
 
-  int icon_alpha = swap_images_animation_->CurrentValueBetween(0, 255);
-  int crossfade_icon_alpha = 0;
-  if (icon_alpha < static_cast<int>(kFadeOutRatio * 255))
-    crossfade_icon_alpha = static_cast<int>(255 - icon_alpha / kFadeOutRatio);
+  SkAlpha icon_alpha =
+      static_cast<SkAlpha>(swap_images_animation_->CurrentValueBetween(
+          SK_AlphaTRANSPARENT, SK_AlphaOPAQUE));
+  SkAlpha crossfade_icon_alpha = 0;
+  if (icon_alpha < base::ClampRound<SkAlpha>(kFadeOutRatio * SK_AlphaOPAQUE)) {
+    crossfade_icon_alpha =
+        base::ClampRound<SkAlpha>(SK_AlphaOPAQUE - icon_alpha / kFadeOutRatio);
+  }
 
   int centered_origin_x = (width() - icon_image_.width()) / 2;
   int centered_origin_y = (height() - icon_image_.height()) / 2;
@@ -322,9 +327,9 @@
   }
 }
 
-int FrameCaptionButton::GetAlphaForIcon(int base_alpha) const {
+SkAlpha FrameCaptionButton::GetAlphaForIcon(SkAlpha base_alpha) const {
   if (!GetEnabled())
-    return base_alpha * kDisabledButtonAlphaRatio;
+    return base::ClampRound<SkAlpha>(base_alpha * kDisabledButtonAlphaRatio);
 
   if (paint_as_active_)
     return base_alpha;
@@ -338,7 +343,7 @@
   } else if (GetState() == STATE_PRESSED || GetState() == STATE_HOVERED) {
     inactive_alpha = 1.0f;
   }
-  return base_alpha * inactive_alpha;
+  return base::ClampRound<SkAlpha>(base_alpha * inactive_alpha);
 }
 
 void FrameCaptionButton::UpdateInkDropBaseColor() {
diff --git a/ui/views/window/frame_caption_button.h b/ui/views/window/frame_caption_button.h
index 5a674e0..bbc2c120 100644
--- a/ui/views/window/frame_caption_button.h
+++ b/ui/views/window/frame_caption_button.h
@@ -61,7 +61,7 @@
   bool IsAnimatingImageSwap() const;
 
   // Sets the alpha to use for painting. Used to animate visibility changes.
-  void SetAlpha(int alpha);
+  void SetAlpha(SkAlpha alpha);
 
   // views::Button:
   void OnGestureEvent(ui::GestureEvent* event) override;
@@ -110,7 +110,7 @@
 
   // Determines what alpha to use for the icon based on animation and
   // active state.
-  int GetAlphaForIcon(int base_alpha) const;
+  SkAlpha GetAlphaForIcon(SkAlpha base_alpha) const;
 
   void UpdateInkDropBaseColor();
 
@@ -124,7 +124,7 @@
   bool paint_as_active_ = false;
 
   // Current alpha to use for painting.
-  int alpha_ = 255;
+  SkAlpha alpha_ = SK_AlphaOPAQUE;
 
   // Radius of the ink drop highlight and mask.
   int ink_drop_corner_radius_ = kCaptionButtonInkDropDefaultCornerRadius;
diff --git a/ui/webui/resources/cr_elements/cr_expand_button/cr_expand_button.js b/ui/webui/resources/cr_elements/cr_expand_button/cr_expand_button.js
index d7d56bdd..e00b3e9 100644
--- a/ui/webui/resources/cr_elements/cr_expand_button/cr_expand_button.js
+++ b/ui/webui/resources/cr_elements/cr_expand_button/cr_expand_button.js
@@ -54,6 +54,28 @@
       value: 'cr:expand-less',
       observer: 'onIconChange_',
     },
+
+    expandTitle: String,
+    collapseTitle: String,
+
+    tooltipText_: {
+      type: String,
+      computed: 'computeTooltipText_(expandTitle, collapseTitle, expanded)',
+      observer: 'onTooltipTextChange_',
+    },
+  },
+
+  /**
+   * @return {string}
+   * @private
+   */
+  computeTooltipText_() {
+    return this.expanded ? this.collapseTitle : this.expandTitle;
+  },
+
+  /** @private */
+  onTooltipTextChange_() {
+    this.title = this.tooltipText_;
   },
 
   observers: [
diff --git a/ui/webui/resources/cr_elements/cr_expand_button/cr_expand_button.m.d.ts b/ui/webui/resources/cr_elements/cr_expand_button/cr_expand_button.m.d.ts
index e98af06..4c16c58 100644
--- a/ui/webui/resources/cr_elements/cr_expand_button/cr_expand_button.m.d.ts
+++ b/ui/webui/resources/cr_elements/cr_expand_button/cr_expand_button.m.d.ts
@@ -9,6 +9,8 @@
   disabled: boolean;
   tabIndex: number;
   noink: boolean;
+  expandTitle?: string;
+  collapseTitle?: string;
   focus(): void;
 }